带有两个方程的 scipy.minimize 仅返回初始值
Posted
技术标签:
【中文标题】带有两个方程的 scipy.minimize 仅返回初始值【英文标题】:scipy.minimize with two equations returns initial values only 【发布时间】:2022-01-21 16:00:31 【问题描述】:我想得到以下方程组的最优解:
x_w * 1010 + x_m * d_m = 1017
x_w + x_m = 1
我的代码如下:
from scipy.optimize import minimize
import numpy as np
def f1(p):
x_w, x_m, d_m = p
return (x_w*1010 + x_m*d_m) - 1017.7
def f2(p):
x_w, x_m, d_m = p
return x_w + x_m - 1
bounds =[(0,1), (0,1), (1000, 10000)]
x0 = np.array([0.5, 0.5, 1500])
res = minimize(lambda p: f1(p)+f2(p), x0=x0, bounds=bounds)
但是,我得到的所有 (res.x) 都是初始值 (x0)。
如何让它发挥作用?有更好的方法吗?这三个变量只有这两个方程。
【问题讨论】:
【参考方案1】:一般来说,你不能通过最小化f1(p) + f2(p)
来求解方程组,因为这个目标的最小值是方程组的无解。但是,您必须最小化每个方程的平方误差之和,即最小化f1(p)**2 + f2(p)**2
:
minimize(lambda p: f1(p)**2 + f2(p)**2, x0=x0, bounds=bounds)
不幸的是,您也可以使用不支持边界的scipy.optimize.fsolve
。
【讨论】:
以上是关于带有两个方程的 scipy.minimize 仅返回初始值的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 scipy minimize ValueError: no enough values to unpack (expected 4, got 3)?