【问题标题】:How to solve properly a system of nonlinear equations with fsolve in python如何在 python 中使用 fsolve 正确求解非线性方程组
【发布时间】:2019-04-29 11:32:40
【问题描述】:

我正在尝试求解非线性方程组。

为此,我成功地在线使用 sympy 求解了一个由三个方程组成的系统。但它不再适用于 7 个方程,返回“操作超时”消息。 因此,我正在尝试使用标准 fsolve 来解决问题。但是,虽然我只用一组简单的 3 个方程就可以得到很好的结果,但 fsolve 却给了我不好的结果。

这是我写的代码(感谢我在这个论坛上找到的):

def equations(p):
    w1, w2, m = p
    f0 = w1+w2-1
    f1 = w1*m+w2*(1-2*m)-1/3
    f2 = w1*m**2+w2*(1-2*m)**2-1/5
    return (f0,f1,f2)

w1, w2, m = fsolve(equations, (0,0,0))
print equations((w1,w2,m))

作为回报,它给了我这些(负面...)结果:

(0.0, -1.2378986724570495e-13, 5.1419979385514125e-13)

为了比较,sympy 给了我预期的结果。它给出了大约:

(0.333333, 0.666667, 0,122515)

您知道为什么 fsolve 在我的情况下不起作用吗?

提前谢谢你。

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    使用print equations((w1,w2,m)),您将在 (w1,w2,m) 点打印 (f0,f1,f2) 的值。相反,sympy 返回 (w1,w2,m) 的值。

    因此,如果我用 print (w1,w2,m) 替换打印语句,我得到 (0.6666666666319606, 0.33333333336803944, 0.12251482264361727)。

    答案不同,因为方程是非线性的,可以有多个零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2019-01-15
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多