【问题标题】:scipy.minimize with two equations returns initial values only带有两个方程的 scipy.minimize 仅返回初始值
【发布时间】: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)。

如何让它发挥作用?有更好的方法吗?这三个变量只有这两个方程。

【问题讨论】:

    标签: python scipy scipy-optimize-minimize


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 2021-08-18
      • 2014-02-02
      • 2015-09-11
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      相关资源
      最近更新 更多