1

如何使用 php.ini 获取特定范围内函数的最大值。例如我有一个功能:

function f($x){
    return pow($x,2);
}

我想在(-1,1)范围内得到这个函数的最大值。如何在 php 或使用其他库中实现它?

4

3 回答 3

2

没有通用的方法可以做到这一点。你必须自己做数学。

最大化/最小化问题通过微分解决。在这种情况下,您会得到:

d(x^2)/dx = 2*x

计算微分的方法取决于您的功能。像这样的简单函数并不难,如果你问得好,Wolfram Alpha ( http://www.wolframalpha.com/ ) 会为你做这件事 ( http://www.wolframalpha.com/input/?i =d%28x%5E2%29%2Fdx )。

然后将其设置为 0,它会告诉您梯度何时为 0(因此,它处于最大值、最小值或转折点):

2*x = 0

这告诉您有一点需要检查x = 0(请参阅此处的“解决方案”部分:http ://www.wolframalpha.com/input/?i=d%28x%5E2%29%2Fdx%3D0 )。现在检查您的函数在下限、上限和告诉您检查的点处的值,并获得所有这些结果的最大值/最小值。这将是您在该范围内的限制。

于 2013-03-24T21:30:33.297 回答
0
$maximumValue = -999999999;
for ($i = -1; $i <= 1; $i++) {
    $maximumValue = max($maximumValue, f($i));
}
var_dump($maximumValue);

..应该可以正常工作

这只会检查数字-1和。如果您想要更精确,只需更改为例如。:01$i++$i += 0.1

$maximumValue = -999999999;
for ($i = -1; $i <= 1; $i += 0.1) {
    $maximumValue = max($maximumValue, f($i));
}
var_dump($maximumValue);

这将为您提供-1, -0.9, -0.8.....0.8和.0.91

$i += 0.000000001如果您想浪费大量资源,但获得更准确的结果,也可以将其更改为。

于 2013-03-24T21:30:47.993 回答
0

如果你使用微分,你必须处理没有局部最优的情况。如果函数是平滑的,这意味着最优值出现在端点上。我不确定这一切需要多么精确,但也许如果函数只是由有限的对列表给出,你可以对包含定义函数的所有点的列表进行排序。

于 2013-03-25T13:08:14.633 回答