Pythonで関数の最大値を見つけるにはどうすればよいですか?私はデリバティブ関数を一緒にハックしようとすると、そのゼロを見つけることができますが、numpy
(または他のライブラリ)のメソッドは私のためにそれを行うことができますか?関数の最大値を見つける
答えて
scipy.optimize.fmin
は、機能のネガティブに使用できます。
def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
しかし、ここでは数値解析の問題に本当に注意する必要があることに注意してください。誰かが「私がライブラリでこれをどうやって解決できますか?」と言うと、間違ったエラーが出ることがよくあります。 *あなたが本当にライブラリ関数が何をしているのか理解していることを確認してください。たとえあなたが長い間数値作業を行っていたとしてもそうです。私は最近、 'scipy.stats'で[類似の問題](http://stackoverflow.com/questions/10038543/tracking-down-the-assumptions-made-by-scipys-ttest-ind-function)に苦しんでいました。 – ely
無関係の質問には申し訳ありませんが、ラムダ式にゼロがあるのはなぜですか? – user1700890
ゼロは 'lambda'の一部ではありません。 'lambda 'は、カンマ区切りの値のシーケンスを返すことによって暗黙的に' tuple'を返すことはできません。通常のPython関数ができる方法です。この場合、コンマは 'scipy.optimize.fmin'の引数リストの一部です。したがって、最初の引数は' lambda x:-f(x) 'で、2番目の引数はすべて' 0'です。 – ely
SymPyを試すことができます。 symPyは派生物を象徴的に提供し、ゼロを見つけることができるかもしれません。
あなたの機能が解析的に解決できる場合は、SymPyを試してみてください。上記のEMSの例を使用します。もちろん
In [1]: from sympy import *
In [2]: x = Symbol('x', real=True)
In [3]: f = -2 * x**2 + 4*x
In [4]: fprime = f.diff(x)
In [5]: fprime
Out[5]: -4*x + 4
In [6]: solve(fprime, x) # solve fprime = 0 with respect to x
Out[6]: [1]
、あなたはまだ1がマキシマイザーはなく、私がscipy.optimize.minimize_scalar
とscipy.optimize.minimize
はあなたにアクセス権を与える今の好適な方法、あると思います
In [7]: f.diff(x).diff(x) < 0
Out[7]: True
の最小化であることを確認する必要があります技術の範囲、例えばパラメータを持つ関数の0と1
最大値の間になければならない単一変数関数の
solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')
。
import scipy.optimize as opt
def get_function_max(f, *args):
"""
>>> round(get_function_max(lambda x, *a: 3.0-2.0*(x**2)), 2)
3.0
>>> round(get_function_max(lambda x, *a: 3.0-2.0*(x**2)-2.0*x), 2)
3.5
>>> round(get_function_max(lambda x, *a: a[0]-a[1]*(x**2)-a[1]*x, 3.0, 2.0), 2)
3.5
"""
def func(x, *arg):
return -f(x, *arg)
return f(opt.fmin(func, 0, args=args, disp=False)[0], *args)
- 1. Matlabが関数の最小値/最大値を見つける
- 2. ユーティリティ関数の最大値を見つける
- 3. 最大値を見つけるxslt max関数
- 4. ディストリビューションの最大値を見つける
- 5. sql - 最大値を見つける
- 6. Javascriptが最大値を見つける
- 7. 最大の変数を見つける
- 8. 再帰関数との最大の要素を見つける
- 9. 私は関数の最大値を見つける必要がある機能
- 10. リストの辞書の複数の最大値を見つける
- 11. ベクトル内の複数の最大値のインデックスを見つける
- 12. 最大公約数を見つける
- 13. ファイル内の最小値/最大値を見つける方法
- 14. ユーザ入力の最小値と最大値を見つける
- 15. WPF DataGrid列の最大値と最小値を見つける
- 16. 倍精度の配列で最大値を見つけるC++関数?
- 17. 変数の最大値を見つける方法
- 18. DFの各行で最大と最大の最大値を見つけるR
- 19. 測定アレイの周波数の最小値と最大値を見つける
- 20. Js:変数の可能な最大値と最小値を見つける
- 21. CUBLASで最大値と最小値を見つける
- 22. Pythonで最小値と最大値を見つける
- 23. loadashで最小値と最大値を見つける方法
- 24. 配列から最小値と最大値を見つける
- 25. パンダがローカル最大値と最小値を見つける
- 26. 計算の最大数でグローバルな最大値を見つけよう
- 27. 日付範囲の最大値と最大値を見つける(ユーザ選択)
- 28. 複数の分割ループで最大値を見つけよう
- 29. Typescript最大値の変数を見つけよう
- 30. スタック内の最大値を見つける最適化
ゴールデンセクション検索をご覧ください。 http://en.wikipedia.org/wiki/Golden_section_search – wberry
@EMSこれは一般的に私が行うことですが、私は常にそうではありません。あなたは人々にいくつかの時間を与える必要があります:P –
申し訳ありませんが、私はpersnicketyを聞くことを意味しませんでした。多くは受け入れられないので、私は一般的にその特定の質問に答えたことを忘れる前に〜1日後のようなリマインダーノートを書く。 – ely