scipy.optimize.fmin有2个变量。如何使它工作

时间:2014-01-21 10:17:00

标签: python numpy scipy

我没有问题scipy.optimize.fmin为一个变量的函数工作,但不知怎的,我无法弄清楚如何让它适用于2个变量。下面是我尝试(和失败)最大化的函数的简单示例。我做错了什么?

from scipy.optimize import fmin

test2 = lambda x,y: x-x**2 + y - y**2
guess = [ 0.5,0.5 ] #just some guess
print fmin( -test2, guess, args=(x,y) )

错误讯息:

    print fmin( -test2, guess, args=(x,y) )
TypeError: bad operand type for unary -: 'function'

更新:谢谢你的回答!结束以下也有效:

谢谢,这很有用。结束以下代码也起作用:

来自scipy.optimize import fmin

test2 = lambda x: -(x[0]-x[0]**2 + x[1] - x[1]**2 )
guess = [ 0.5,0.5 ] #just some guess
print fmin( test2, guess )

Optimization terminated successfully.
         Current function value: -0.500000
         Iterations: 18
         Function evaluations: 37
[ 0.5  0.5]

正如您可能已经猜到的那样,我仍然在学习基础知识,并且总是找不到明显的错误消息。

1 个答案:

答案 0 :(得分:2)

错误消息非常明确:您无法否定函数。在函数定义中移动否定。同时,您应该更改函数,使其适用于单个参数,即NumPy数组:

>>> def test2(x):
...     return -np.sum(x - x**2)
... 
>>> test2(np.array([.5, .5]))
-0.5

然后在没有args的情况下将其最小化:

>>> fmin(test2, np.array([.5, .5]))
Optimization terminated successfully.
         Current function value: -0.500000
         Iterations: 18
         Function evaluations: 37
array([ 0.5,  0.5])