PHPを使用して特定の範囲の関数の最大値を取得するにはどうすればよいですか。たとえば、次の関数があります。
function f($x){
return pow($x,2);
}
そして、この関数の最大値を範囲(-1,1)で取得したいと思います。これをphpまたは他のライブラリを使用して実装するにはどうすればよいですか?
PHPを使用して特定の範囲の関数の最大値を取得するにはどうすればよいですか。たとえば、次の関数があります。
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
多くのリソースを浪費したいが、より正確な結果が得られるようにする場合にも変更できます。
微分を使用する場合は、局所最適点がない場合に対処する必要があります。関数がスムーズである場合、これは最適化がエンドポイントで発生することを意味します。これがどれほど正確である必要があるかはわかりませんが、関数がペアの有限リストによって与えられている場合は、関数が定義されているすべてのポイントを含むリストを並べ替えることができます。