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

Find maximum value for x for a polynomial function

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

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

您可以使用 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

如果重新排列函数,使要最大化的变量排在第一位,然后像这样设置默认值:

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 为负,抛物线 a * x^2 + b * x + c 的最大值在 -b/(2*a) 处达到:

a<0
#[1] TRUE

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