如何使用scipy minimize()传递固定参数?

时间:2015-11-30 06:33:07

标签: python scipy minimize

如何在三变量函数中优化两个变量?我的理解是我可以在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)

1 个答案:

答案 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