找到函数的最大值

Nic*_*k T 13 python numpy

如何在Python中找到函数的最大值?我可以尝试将衍生函数组合在一起并找到其中的零,但在numpy(或其他库)中是否有一种方法可以为我做到这一点?

ely*_*ely 20

您可以使用scipy.optimize.fmin功能的否定.

def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,您确实需要注意数值分析问题.当有人说"图书馆如何为我解决这个问题?"时,这通常是即将出现错误的红旗.确保*you*真正理解库函数正在做什么.即使你已经做了很长时间的数字工作,这也是事实.我最近遇到了[类似问题](http://stackoverflow.com/questions/10038543/tracking-down-the-assumptions-made-by-scipys-ttest-ind-function)和`scipy.stats`. (9认同)

MRo*_*lin 6

如果您的功能可解析,请尝试使用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]
Run Code Online (Sandbox Code Playgroud)

当然,你仍然需要检查1是最大化器而不是f的最小化器

In [7]: f.diff(x).diff(x) < 0
Out[7]: True
Run Code Online (Sandbox Code Playgroud)