![](/img/trans.png)
[英]How to solve properly a system of nonlinear equations with fsolve in python
[英]Python scipy fsolve to solve a large number of nonlinear equations
我想使用Python解决由6个非线性方程组成的系统。 我发现我可以很容易地使用scipy
的fsolve
来解决一个由3个非线性方程组成的系统。 但是,当我将其扩展到更大的系统时,我发现该解决方案无法解决方程组。 我是否可以纠正一些问题,以解决6个非线性方程的问题?
import numpy as np
from scipy.optimize import fsolve
def system(z):
#arbitrary system of 3 nonlinear equations
x1 = z[0]
x2 = z[1]
x3 = z[2]
F = np.empty((3))
F[0] = 20* x1 + x2**2
F[1] = x2 - x1
F[2] = x3 + 5 - x1*x2
return F
def system2(z):
#arbitrary system of 6 nonlinear equations
x1 = z[0]
x2 = z[1]
x3 = z[2]
x4 = z[3]
x5 = z[4]
x6 = z[5]
F = np.empty((6))
F[0] = 20* x1 + x2**2
F[1] = x2 - x1
F[2] = x3 + 5 - x1*x2
F[3] = x3 + x2
F[4] = x5 + x4**2
F[5] = x6**2 + x1 - 20
return F
uInitial = np.array([1,1,1])
u = fsolve(system,uInitial)
print('Solution: ',u)
print('Solution check: ',system(u),'\n') #yields zeros as expected
vInitial = np.array([1,1,1,1,1,1])
v = fsolve(system2,vInitial)
print('Solution: ',v)
print('Solution check: ',system2(v)) #unexpectedly does not yield zeros. Equations not solved correctly.
当将给定的解决方案应用到方程组中时,我应该期望收到零(或接近零)。 这将确认所计算的解可以解决给定的方程组。 我尝试使用此方法对3个方程组和6个方程组进行检查,但是只有3个方程组可以通过此检查正确求解。 如何解决由6个非线性方程组成的系统?
您的系统不一致,并且您最初的猜测已经关闭。 尝试将第三个方程添加到第三个方程的系统中:
F[0] = 20 * x1 + x2**2 # "first" equation
F[1] = x2 - x1 # "second" (=> x1 == x2)
F[2] = x3 + 5 - x1*x2 # "third"
F[3] = x3 + x2 # "fourth" equation (=> x3 == -x2)
首先,让我们求解前三个方程。 从第二个方程式可以得出, x1
等于x2
。 因此,第一个等式可以重写为:
F[0] = 20 * x1 + x1**2
这导致x1 = -20
(和x2 = -20
)。 在第三个方程中使用它得出x3 = 395
。 尝试将第一个系统的初始条件修改为uInitial = np.array([-30, -30, 1])
-您应该得到正确的答案。
现在,让我们解决所有四个方程式。 使用x2 == x1
的事实,第三个方程可以重写为:
F[2] = x3 + 5 - x1**2
从第四个方程式可以得出x3 == -x2
(因此x3 == -x1
也是如此)。 因此,该方程式可以重写为x3 + 5 - x3**2 == 0
=> x3 = 0.5 +(-) sqrt(21)/2
,这与我们使用前三个方程式得出的395
不同。
这说明您的方程组不一致,没有解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.