使用php查找函数的最大值

时间:2013-03-24 21:24:27

标签: php mathematical-optimization

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

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

我希望在范围(-1,1)中获得此函数的最大值。 我怎样才能在php或其他库中实现这个?

3 个答案:

答案 0 :(得分: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)。现在检查函数的值,在下限,上限和它告诉您检查的点,并获得所有这些结果的最大值/最小值。这将是您在该范围内的限制。

答案 1 :(得分:0)

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

..应该可以正常工作

这只会检查数字-101。如果您想要更高的精度,只需将$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.80.91

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

答案 2 :(得分:0)

如果你使用差异化,你必须处理没有局部最优的情况。如果函数是平滑的,这将意味着最终点发生在端点上。我不确定这一切都需要多精确,但是如果函数只是由有限的对列表给出,你可以对列表进行排序,其中包含定义函数的所有点。