21

Pythonで関数の最大値を見つけるにはどうすればよいですか? 微分関数を一緒にハックしてそのゼロを見つけようとすることはできますが、numpy(または他のライブラリ) にそれを実行できるメソッドはありますか?

4

5 に答える 5

27

scipy.optimize.fmin関数のネガで使用できます。

def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
于 2012-04-13T19:17:45.493 に答える
9

関数が解析的に解ける場合は、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 が f の最小化ではなく最大化であることを確認する必要があります。

In [7]: f.diff(x).diff(x) < 0
Out[7]: True
于 2012-04-19T13:54:32.127 に答える
3

私は、さまざまなテクニックにアクセスできるようにするため、今ではscipy.optimize.minimize_scalarとが好ましい方法だと思います。scipy.optimize.minimize

solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')

0 と 1 の間でなければならない単一変数関数の場合。

于 2014-12-03T09:41:33.040 に答える
0

SymPyを試すことができます。SymPy は導関数をシンボリックに提供したり、そのゼロを見つけたりすることができるかもしれません。

于 2012-04-13T20:50:58.217 に答える