【发布时间】:2021-12-13 23:58:43
【问题描述】:
我正在尝试求解这个非线性方程组:
from scipy.optimize import fsolve
import numpy as np
def equations(vars):
x, y, z = vars
eq1 = x - 0.095*np.log(z) - 1.2022
eq2 = y - 100000/x
eq3 = z - y
return [eq1, eq2, eq3]
ini = (1, 1, 1)
x, y, z = fsolve(equations, ini)
print(x, y, z)
系统给了我一个解决方案但不是问题的解决方案。求解器给了我这个解决方案:x=2.22015, y=14373.01967, z=14372.9181 但真正的解决方案是x=2.220157, y=45041.83986, z=45041.83986。
似乎问题在于值的初始化。如果我将这些值用于初始化:
ini = (2, 40000, 40000)
x, y, z = fsolve(equations, in)
系统给了我真正的解决方案:x=2.220157, y=45041.83986, z=45041.83986
如何在事先不知道的情况下获得好的解决方案?
【问题讨论】:
-
没有解决非线性方程组的通用方法。每种方法都取决于最初的猜测。不是算法的问题,只是你要找的东西超出了目前可用的方法范围。
-
当我尝试
ini = (1, 1, 1)时,我收到了警告RuntimeWarning: The iteration is not making good progress ...,因此这表示求解器无法找到正确的解决方案。 -
@ferdy 这就是我的意思:如果我可以调整求解器以进行更多迭代或调整步骤以提供更多时间来取得进展以找到解决方案
标签: python solver non-linear nonlinear-equation