如何使用php获取特定范围内函数的最大值。 例如,我有一个功能:
function f($x){
return pow($x,2);
}
我希望在范围(-1,1)中获得此函数的最大值。 我怎样才能在php或其他库中实现这个?
答案 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);
..应该可以正常工作
这只会检查数字-1
,0
和1
。如果您想要更高的精度,只需将$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.9
和1
。
如果您想浪费大量资源,也可以更改为$i += 0.000000001
,但要获得更准确的结果。
答案 2 :(得分:0)
如果你使用差异化,你必须处理没有局部最优的情况。如果函数是平滑的,这将意味着最终点发生在端点上。我不确定这一切都需要多精确,但是如果函数只是由有限的对列表给出,你可以对列表进行排序,其中包含定义函数的所有点。