如何使用 php.ini 获取特定范围内函数的最大值。例如我有一个功能:
function f($x){
return pow($x,2);
}
我想在(-1,1)范围内得到这个函数的最大值。如何在 php 或使用其他库中实现它?
如何使用 php.ini 获取特定范围内函数的最大值。例如我有一个功能:
function f($x){
return pow($x,2);
}
我想在(-1,1)范围内得到这个函数的最大值。如何在 php 或使用其他库中实现它?
没有通用的方法可以做到这一点。你必须自己做数学。
最大化/最小化问题通过微分解决。在这种情况下,您会得到:
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 )。现在检查您的函数在下限、上限和告诉您检查的点处的值,并获得所有这些结果的最大值/最小值。这将是您在该范围内的限制。
$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
如果您想浪费大量资源,但获得更准确的结果,也可以将其更改为。
如果你使用微分,你必须处理没有局部最优的情况。如果函数是平滑的,这意味着最优值出现在端点上。我不确定这一切需要多么精确,但也许如果函数只是由有限的对列表给出,你可以对包含定义函数的所有点的列表进行排序。