求解多元非線性方程組F(x)=0的Newton-Raphson方法及其MATLAB實現


牛頓迭代法可以推廣到多元非線性方程組 \(\boldsymbol{F}(\boldsymbol{x})=\boldsymbol{0}\)的情況,稱為牛頓-- 拉夫遜方法 (Newton-Raphson method). 當 \(\boldsymbol{F}(\boldsymbol{x})\) 關於 \(\boldsymbol{x}\) 的 Jacobi 矩陣 \(\boldsymbol{J}(\boldsymbol{x}) = (\cfrac{\partial \boldsymbol{F}}{\partial \boldsymbol{x}})\) 可逆時, 有

\[\boldsymbol{x}^{(k+1)}=\boldsymbol{x}^{(k)}- \boldsymbol{J}^{-1}(\boldsymbol{x}^{(k)})\boldsymbol{F}(\boldsymbol{x}^{(k)}), \]

求解非線性方程組的Newton-Raphson方法:
1、 取初始點 \(\boldsymbol{x}^{(0)}\),最大迭代次數 \(N\) 和精度要求 \(\varepsilon\), 置 \(k=0\);
2、 求解線性方程組 \(\boldsymbol{J}(\boldsymbol{x}^{(k)})\boldsymbol{d} = -\boldsymbol{F}(\boldsymbol{x}^{(k)})\);
3、 若 $|\boldsymbol{d}|<\varepsilon $, 則停止計算;否則,置
\(\boldsymbol{x}^{(k+1)} = \boldsymbol{x}^{(k)}+\boldsymbol{d}^{(k)}\);
4、 若 \(k=N\), 則停止計算;否則,置 \(k = k+1\), 轉(2).

function [x_star, it] = NewtonRapshon(fun,dfun,x0,ep,it_max)
if nargin <6 it_max = 100; end
if nargin<5 ep =1e-5; end
k = 1; err = 0; n = length(x0);
while k<it_max
    d = -feval(dfun,x0)\feval(fun,x0);
    x1 = x0 + d;
    err = norm(d,inf);
    if err<ep break; end
    x0 = x1; k = k+1;
end
x_star = x1; it = k;

用 Newton 法求非線性方程組$$\begin{cases}
x_1^2+x_2^2-5=0,\
(x_1+1)x_2-(3x_1+1)=0,
\end{cases}$$
取初始點\(\boldsymbol{x}^{(0)}=[1,1]^T\), 精度要求 \(\varepsilon = 10^{-3}\).
解:$$\boldsymbol{F}(\boldsymbol{x}) =\begin{bmatrix}
f_1(x_1,x_2)\
f_2(x_1,x_2)\
\end{bmatrix}= \begin{bmatrix}
x_1^2+x_2^2-5\
(x_1+1)x_2-(3x_1+1)\
\end{bmatrix}$$

\[\boldsymbol{J}(\boldsymbol{x}) = \begin{bmatrix} \dfrac{\partial f_1}{\partial x_1}&\dfrac{\partial f_1}{\partial x_2}\\ \dfrac{\partial f_2}{\partial x_2}&\dfrac{\partial f_2}{\partial x_2}\\ \end{bmatrix}= \begin{bmatrix} 2x_1&2x_2\\ x_2-3&x_1+1\\ \end{bmatrix}\]

所以有

\[\boldsymbol{x}^{(0)}=\begin{bmatrix} 1\\1\\ \end{bmatrix}, \boldsymbol{F}(\boldsymbol{x}^{(0)})=\begin{bmatrix} -3\\-2\\ \end{bmatrix},\boldsymbol{J}(\boldsymbol{x}^{(0)})=\begin{bmatrix} 2&2\\-2&2\\ \end{bmatrix},\]

解方程$$\begin{bmatrix}
2&2\-2&2\
\end{bmatrix}\begin{bmatrix}
d_1\d_2\
\end{bmatrix}=-\begin{bmatrix}
-3\-2\
\end{bmatrix}$$
得到 \(\boldsymbol{d}^{(0)}=[0.25,1.25]^T\), \(\boldsymbol{x}^{(1)} = \boldsymbol{x}^{(0)}+\boldsymbol{d}^{(0)}=[1.25,2.25]^T\),進入下一輪循環。
在 MATLAB 中,

>> [x_star, it] = NewtonRapshon(Fun,JFun,[1;1])

x_star =
    1.0000
    2.0000
it =
     5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM