带有两个方程的 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 如何处理 NaN?

如何处理 scipy minimize ValueError: no enough values to unpack (expected 4, got 3)?

带有多项式的 C++ 方程

deSolve:具有两个连续动力学的微分方程

带有项目组的背包方程

在 matplotlib 中使用带有 x 和 y 的方程和 Python 的 3D 绘图