如何在R中找到函数的上限和下限
Posted
技术标签:
【中文标题】如何在R中找到函数的上限和下限【英文标题】:How to find upper and lower bounds of a function in R 【发布时间】:2019-01-14 16:58:57 【问题描述】:我想尝试在 R 中找到函数的上限和下限。
我正在尝试使用内置的 R 函数“优化”,但该函数试图找到函数的切线为零的位置。例如,如果您运行以下代码:
phi_function <- function(x)
return(((x^6)/8) - ((3*(x^2))/4))
lbound_ex <- -1.79550879355662
ubound_ex <- 0.168144378782495
LX_ex <- optimise(phi_function, interval = c(lbound_ex, ubound_ex), maximum = FALSE)$objective
UX_ex <- optimise(phi_function, interval = c(lbound_ex, ubound_ex), maximum = TRUE)$objective
curve(phi_function, from = lbound_ex, to = ubound_ex)
abline(v = lbound_ex)
abline(v = ubound_ex)
abline(h = LX_ex, col = 'red')
abline(h = UX_ex, col = 'red')
abline(h = phi_function(-1.79550879355662), col = 'green')
您会得到以下图表:
红线是 'optimise' 函数给出的最小值和最大值,绿线是区间 (lbound_ex, ubound_ex) 中 phi_function 的上限。有谁知道如何在 R 中找到上限和下限?
提前感谢您的帮助! 瑞恩
【问题讨论】:
来自?optimize
:如果'f'是一个单峰函数并且'f'的计算值在被至少eps分隔时总是单峰的* |x| + (tol/3),则 x_0 近似于区间“lower,upper”上“f”的全局最小值的横坐标,误差小于 eps * |x_0|+ tol。如果“f”不是单峰的,那么“optimize()”可能会逼近一个局部但可能是非全局的最小值,达到相同的精度。
它正在寻找函数的一阶导数改变符号的点。它将错过出现在区间边界的最大值和最小值。你需要自己检查。
【参考方案1】:
我不认为绿线代表最大值(或最小值)。它们被定义为切线斜率为0的点和斜率。
您的函数不是单峰的(只有一个峰值),最大值和最小值超出了您的范围。
函数optimize会搜索上下区间,并在区间内的连续函数中寻找最大值和最小值。 如果你扩展你的函数,你会发现在 (0,0) 处还有另一个最大值
【讨论】:
好的,谢谢,你说得对。对于我需要的东西,我需要一个函数来找到上限和下限,而不是最大值。我将编辑问题。 所以使用优化并检查间隔的端点。optimize()
确实找到 one 最小值和/或最大值,但这可能不是区间中的 global 最优值。您将需要检查 all 最小值和最大值以及端点处的函数值。为了识别全局最小值和最大值,函数pracma::findmins()
可能有用。以上是关于如何在R中找到函数的上限和下限的主要内容,如果未能解决你的问题,请参考以下文章
我如何向 Google ortools 添加一组值而不是下限和上限?