使用2个变量的scipy.optimize.fmin,如何让它工作

xxb16uws  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(139)

我可以让scipy. optimiz.fmin处理一个变量的函数,但是我不知道如何处理两个变量的函数。下面是一个简单的例子,我尝试过最大化一个函数(但是失败了)。我做错了什么?

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'

更新:谢谢你的回答!最后得到了以下同样有效的结果:
谢谢,这起作用了。最后得到了下面的代码,它们也起作用了:
第一个
正如您可能已经猜到的,我仍在学习基础知识,并不总是发现错误消息那么明显。

kuuvgm7e

kuuvgm7e1#

错误消息非常明确:你不能对一个函数求反。把求反操作移到函数定义中。同时,你应该改变函数,使它只对一个参数,一个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])

相关问题