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

How can I pass fixed arguments using 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)

这里的想法是,您想要最小化的函数必须接受一组用于最小化的参数 个可选参数。所以你必须将手动输入的数组分配给函数参数:

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