Python scipy fsolve可解决大量非线性方程

时间:2019-06-18 21:16:07

标签: python nonlinear-functions

我想使用Python解决由6个非线性方程组成的系统。我发现可以很容易地使用scipy的{​​{1}}来求解由3个非线性方程组成的系统。但是,当我将其扩展到更大的系统时,我发现该解决方案无法解决方程组。我可以纠正一些问题,以便解决6个非线性方程吗?

fsolve

当将给定的解决方案应用到方程组中时,我应该期望收到零(或接近零)。这将确认所计算的解可以解决给定的方程组。我尝试使用此方法对3个方程组和6个方程组进行检查,但是只有3个方程组可以通过此检查正确求解。如何解决由6个非线性方程组成的系统?

1 个答案:

答案 0 :(得分:0)

您的系统不一致,您的最初猜测不正确。尝试将第四个方程添加到第三个方程的系统中:

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不同。

这表明您的方程组不一致,没有解。