如何使用 Newton-Raphson 方法计算 Python 中的多元方程组?
How to compute system of multivariable equations in Python using Newton-Raphson method?
我需要你的编程帮助。这是我的方程组:
f_1(x1, x2) = 89.3885624 + 169.6377442*x1 + 169.439564*x2
+ 65.07923*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
+ 162.698313*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 174.39264*x1*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2))/(2*a2) +0.55071844)/3*x2)
+ 174.39264*x2*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 72.077218*x1*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 189.511738*x2*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
和
f_2(x1,x2) = 78.183644 + 26.71298*x1 + 66.782413*x2
- 169.637744*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
- 169.439564*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
- 174.39264*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)^2
- 261.5889567*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
- 174.39264*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)^2
- 54.306279*x1*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 54.306279*x2*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
a0
、a1
和 a2
是变量为 x1
和 x2
.
的方程
这两个方程需要等于0或非常接近0
。我想使用 Newton-Raphson 方法,但我不知道如何使用。我在网上找到了很多例子,但他们使用的方程组和我的一样简单。
抱歉我的英语不好,谢谢你的帮助!
您可以使用 scipy
或 mpmath
,查看此答案
如果您想自己解决,请查看此 link:http://fourier.eng.hmc.edu/e176/lectures/NM/node21.html
您需要计算函数的偏导数才能计算雅可比矩阵,然后需要对其求逆。您的函数非常粗糙,因此您可以考虑使用 wolframscript 这是 Mathematica 的命令行版本。这将使计算导数变得容易得多。
例如,使用 wolframscript(稍作改动,如 sqrt() -> Sqrt[] 并在行尾添加 + 以执行多行函数),您可以轻松获得所需的偏导数。
In[8]:= f1[x1_, x2_] := 89.3885624 + 169.6377442*x1 + 169.439564*x2 +
65.07923*((3*x1*(-a1-Sqrt[a1^2 - 4*a0*a2])/(2*a2) +0.55071844)/3*x2) +
162.698313*((-a1-Sqrt[a1^2 - 4*a0*a2])/2*a2) +
174.39264*x1*((3*x1*(-a1-Sqrt[a1^2 - 4*a0*a2])/(2*a2) +0.55071844)/3*x2) +
174.39264*x2*((-a1-Sqrt[a1^2 - 4*a0*a2])/2*a2) +
72.077218*x1*((-a1-Sqrt[a1^2 - 4*a0*a2])/2*a2) +
189.511738*x2*((3*x1*(-a1-Sqrt[a1^2 - 4*a0*a2])/(2*a2) +0.55071844)/3*x2)
In[9]:= D[f1[x1, x2], x1]
2
Out[9]= 169.638 + 36.0386 a2 (-a1 - Sqrt[a1 - 4 a0 a2]) +
2 2
32.5396 (-a1 - Sqrt[a1 - 4 a0 a2]) x2 87.1963 (-a1 - Sqrt[a1 - 4 a0 a2]) x1 x2
> -------------------------------------- + ----------------------------------------- +
a2 a2
2
3 (-a1 - Sqrt[a1 - 4 a0 a2]) x1
> 58.1309 (0.550718 + --------------------------------) x2 +
2 a2
2 2
94.7559 (-a1 - Sqrt[a1 - 4 a0 a2]) x2
> ---------------------------------------
a2
我需要你的编程帮助。这是我的方程组:
f_1(x1, x2) = 89.3885624 + 169.6377442*x1 + 169.439564*x2
+ 65.07923*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
+ 162.698313*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 174.39264*x1*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2))/(2*a2) +0.55071844)/3*x2)
+ 174.39264*x2*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 72.077218*x1*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 189.511738*x2*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
和
f_2(x1,x2) = 78.183644 + 26.71298*x1 + 66.782413*x2
- 169.637744*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
- 169.439564*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
- 174.39264*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)^2
- 261.5889567*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
- 174.39264*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)^2
- 54.306279*x1*((-a1-sqrt(a1^2 - 4*a0*a2))/2*a2)
+ 54.306279*x2*((3*x1*(-a1-sqrt(a1^2 - 4*a0*a2)/(2*a2) +0.55071844)/3*x2)
a0
、a1
和 a2
是变量为 x1
和 x2
.
这两个方程需要等于0或非常接近0
。我想使用 Newton-Raphson 方法,但我不知道如何使用。我在网上找到了很多例子,但他们使用的方程组和我的一样简单。
抱歉我的英语不好,谢谢你的帮助!
您可以使用 scipy
或 mpmath
,查看此答案
如果您想自己解决,请查看此 link:http://fourier.eng.hmc.edu/e176/lectures/NM/node21.html
您需要计算函数的偏导数才能计算雅可比矩阵,然后需要对其求逆。您的函数非常粗糙,因此您可以考虑使用 wolframscript 这是 Mathematica 的命令行版本。这将使计算导数变得容易得多。
例如,使用 wolframscript(稍作改动,如 sqrt() -> Sqrt[] 并在行尾添加 + 以执行多行函数),您可以轻松获得所需的偏导数。
In[8]:= f1[x1_, x2_] := 89.3885624 + 169.6377442*x1 + 169.439564*x2 +
65.07923*((3*x1*(-a1-Sqrt[a1^2 - 4*a0*a2])/(2*a2) +0.55071844)/3*x2) +
162.698313*((-a1-Sqrt[a1^2 - 4*a0*a2])/2*a2) +
174.39264*x1*((3*x1*(-a1-Sqrt[a1^2 - 4*a0*a2])/(2*a2) +0.55071844)/3*x2) +
174.39264*x2*((-a1-Sqrt[a1^2 - 4*a0*a2])/2*a2) +
72.077218*x1*((-a1-Sqrt[a1^2 - 4*a0*a2])/2*a2) +
189.511738*x2*((3*x1*(-a1-Sqrt[a1^2 - 4*a0*a2])/(2*a2) +0.55071844)/3*x2)
In[9]:= D[f1[x1, x2], x1]
2
Out[9]= 169.638 + 36.0386 a2 (-a1 - Sqrt[a1 - 4 a0 a2]) +
2 2
32.5396 (-a1 - Sqrt[a1 - 4 a0 a2]) x2 87.1963 (-a1 - Sqrt[a1 - 4 a0 a2]) x1 x2
> -------------------------------------- + ----------------------------------------- +
a2 a2
2
3 (-a1 - Sqrt[a1 - 4 a0 a2]) x1
> 58.1309 (0.550718 + --------------------------------) x2 +
2 a2
2 2
94.7559 (-a1 - Sqrt[a1 - 4 a0 a2]) x2
> ---------------------------------------
a2