r-找到多项式函数x的最大值



我正在使用一个简单的多项式来拟合曲线。

poly <- function(a, b, c, x) a * x^2 + b * x + c

我想找到x的值,它会导致曲线的最大值。目前,我创建了一个x范围从20000到50000的网格,为每一行运行函数,然后对结果使用max()。它很有效,但我有很多小组,每次我做它都会创建一个大的数据帧。它很笨重,我觉得一定有更好的方法。

一些典型的系数是:

a <- -0.000000179
b <- 0.011153167
c <- 9.896420781

如果重新排列函数,使要最大化的变量位于第一位,并设置默认值,如:

poly <- function(x, a, b, c) a * x^2 + b * x + c
formals(poly)$a <- -0.000000179
formals(poly)$b <- 0.011153167
formals(poly)$c <- 9.896420781

然后,您可以使用optimize函数在您的间隔内最大化:

optimize(poly, c(20000, 50000), maximum = T)
$`maximum`
[1] 31154.1
$objective
[1] 183.6298

其中$maximum是出现最大值的x值,$objective是高度。

如果a为负,则在-b/(2*a):处达到抛物线a * x^2 + b * x + c的最大值

a<0
#[1] TRUE
-b/(2*a)
#[1] 31154.1

您可以使用optim。我认为本线程中回答的其他解决方案更具吸引力,但为了完整起见,我将写下这篇文章:


a <- -0.000000179
b <- 0.011153167
c <- 9.896420781
o <- optim(
par=list(x=0),
fn=function(x){ -poly(a,b,c,x=x) },
method="Brent",
lower=-50e3, upper=50e3
)

输出:


> o
$par
[1] 31154.1
$value
[1] -183.6298
$counts
function gradient 
NA       NA 
$convergence
[1] 0
$message
NULL

最新更新