如何在三变量函数中优化两个变量?我的理解是我可以在args参数中包含最后一个变量,但我无法使其工作。我在这做错了什么?我的想法是,我想优化x和y,并且z是固定的。
> from scipy.optimize import minimize
> def f(x,y,z):return x**2 * y**2 - x*y*z*32 +10
> minimize(f,[1,2,3],args=[2])
TypeError: f() takes exactly 3 arguments (2 given)
答案 0 :(得分:1)
这里的想法是,您要最小化的函数必须接受一个参数数组,以最小化和可选参数。因此,您必须将手动输入数组分配给函数参数:
>>> def f(xs, z):
... x, y = xs
... return x**2 * y**2 - x*y*z*32 +10
...
>>> minimize(f, [1,3], args=(2,))
status: 2
success: False
njev: 18
nfev: 84
hess_inv: array([[ 0.02619011, -0.02104178],
[-0.02104178, 0.02982305]])
fun: -1014.0000000000002
x: array([ 5.79312665, 5.52378745])
message: 'Desired error not necessarily achieved due to precision loss.'
jac: array([ 3.05175781e-05, 1.52587891e-05])
nit: 6