我尝试使用scipy.optimize来最小化一个函数。这是我的程序,最后一行是错误信息。
import sympy as s
from scipy.optimize import minimize
x,y,z=s.symbols('x y z')
f= lambda z: x**2-y**2
bnds = ((70,None),(4,6))
res = minimize(lambda z: fun(*x),(70,4), bounds=bnds)
<lambda>() argument after * must be an iterable, not Symbol
如何将symbol转换为iterable或直接定义iterable?
1条答案
按热度按时间rbl8hiat1#
在Python中,用
f(*x)
调用函数意味着f(x[0], x[1], ...)
。也就是说,它期望x
成为一个元组(或其他可迭代对象),并且该函数应该具有如下定义:我不太清楚你想用
sympy
代码做什么,或者为什么你要使用它而不是直接在Python/numpy中定义函数。一个类似于以下的函数:
应该在最小化调用中工作,其中:
这将从(10,3)开始改变
x
和y
,以寻求最小化f
值。