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