繁体   English   中英

Python Scipy Fsolve解决了大量非线性方程

[英]Python scipy fsolve to solve a large number of nonlinear equations

我想使用Python解决由6个非线性方程组成的系统。 我发现我可以很容易地使用scipyfsolve来解决一个由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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM