多变量Lambdifying函数

时间:2019-07-09 09:15:03

标签: python numpy sympy

我正在尝试优化成本函数EL_c

EL_c=-300.49858410695*C_0 - 301*C_1 - 60.2000000000003*C_2

使用

确认自由变量后
EL_c.free_symbols={C_0,C_1,C_2}

我尝试使用

ff=lambdify(("C_0","C_1","C_2"),EL_c)

然后

x0=(1,1,1)
scipy.optimize.minimize(ff,x0,method="Nelder-Mead")

但是,我得到了错误

TypeError: <lambda>() missing 2 required positional arguments: 'C_1' 
and 'C_2'

理想情况下,我希望能够使用上述方法优化功能。

1 个答案:

答案 0 :(得分:0)

根据documentation of optimize(在this answer中已正确指出),正在优化的可调用函数必须接受元组(N,),而不仅仅是N争论。

对我有用的是:

ff = lambdify((A,B,C), EL_c)
fff = lambda x: ff(*x) # Unpack tuple into positional args
scipy.optimize.minimize(fff, x0=(1,1,1), method="Nelder-Mead")

(我的变量称为A,B,C。)