牛顿-拉普森法原理
在多变量微积分和矩阵理论的交叉点是求解非线性代数方程的迭代方法。设是的
n
n
n个未知向量x,有
F
(
x
)
=
0
∈
R
n
\mathbf{F}\left( \mathbf{x} \right) =0\in \text{R}^{\text{n}}
F(x)=0∈Rn
就是求解x的
n
n
n个非线性方程组,其中向量函数具有连续导数,并且雅可比矩阵
F
x
(
x
)
\mathbf F_\mathbf{x}(\mathbf x)
Fx(x) 在
R
n
R^n
Rn的开集D中是非奇异的。在解的估计值为
x
0
x^0
x0的情况下,一阶泰勒展开寻求
x
0
x^0
x0的扰动
Δ
x
0
\Delta x^0
Δx0,该干扰
Δ
x
0
\Delta x^0
Δx0使得
x
1
=
x
0
+
Δ
x
0
\mathbf{x}^1=\mathbf{x}^0+\Delta \mathbf{x}^0
x1=x0+Δx0更好地逼近解,使得
F
(
x
0
)
+
F
x
(
x
0
)
Δ
x
0
=
0
\mathbf{F}\left( \mathbf{x}^0 \right) +\mathbf{F}_{\mathbf{x}}\left( \mathbf{x}^0 \right) \Delta \mathbf{x}^0=0
F(x0)+Fx(x0)Δx0=0
经过
J
J
J次迭代,增量方程可表示为
F
x
(
x
j
)
Δ
x
j
=
−
F
(
x
j
)
x
j
+
1
=
x
j
+
Δ
x
j
\begin{array}{l} \mathbf{F}_{\mathbf{x}}\left( \mathbf{x}^{\mathbf{j}} \right) \Delta \mathbf{x}^{\mathbf{j}}=-\mathbf{F}\left( \mathbf{x}^{\mathbf{j}} \right)\\ \mathbf{x}^{j+1}=\mathbf{x}^{\text{j}}+\Delta \mathbf{x}^{\text{j}}\\ \end{array}
Fx(xj)Δxj=−F(xj)xj+1=xj+Δxj
一直持续到
∥
F
(
x
j
+
1
)
∥
≤
Tol
\lVert \mathbf{F}\left( \mathbf{x}^{j+1} \right) \rVert \leq \text{Tol}
∥F(xj+1)∥≤Tol ,其中Tol为解的容差。
如果
x
0
x^0
x0足够接近解,则该方法二次收敛于解;即
∥
x
ˉ
−
x
j
+
1
∥
≤
k
∥
x
ˉ
−
x
j
∥
2
\lVert \mathbf{\bar{x}}-\mathbf{x}^{j+1} \rVert \leq \text{k}\lVert \mathbf{\bar{x}}-\mathbf{x}^j \rVert ^2
∥xˉ−xj+1∥≤k∥xˉ−xj∥2
其中
x
‾
\overline x
x是解,
k
k
k是常数。然而,良好的初始估计通常很难获得,并且对于较差的初始估计,该方法可能会产生偏差。幸运的是,在时间
t
i
+
1
=
t
i
+
h
,
(
i
=
1
,
2
,
…
,
h
很
小
)
t_i+1=t_i+ h,(i=1,2,…,h很小)
ti+1=ti+h,(i=1,2,…,h很小)的运动学和动力学模拟应用中,其解可以用作
t
i
+
1
t_i+1
ti+1的初始估计,并且很可能收敛。
Nowton-Raphson方法matlab程序?
代码如下(示例):文章来源:https://www.toymoban.com/news/detail-449986.html
tolerance=1.0e-10; %迭代误差
x=0.5; %初始值
iters=0; %迭代次数
rnorm=1.0; %初始误差的最大值
itersmax=20; %最大迭代次数
while iters<itersmax && rnorm>tolerance %Iteration for x, through line 15
fx=1+sin(x)-x; %原函数
dfx=cos(x)-1; %函数的一阶导数
K=-dfx; R=fx;
delx=R/K; %Newton-Raphson iteration,x的增量
x=x+delx;
rnorm=abs(R);
iters=iters+1;
fprintf('iters=%3d,|R|=%14.5e,|delx|=%14.5e\n',iters,rnorm,abs(delx));
end
% 输出最终结果
if rnorm<tolerance
fprintf('the converged solution is:x=%14.6e,f(x)=%15.8e\n',x,fx);
else
fprintf('oops,your newton-raphson failed')
end
输出结果文章来源地址https://www.toymoban.com/news/detail-449986.html
iters= 1,|R|= 9.79426e-01,|delx|= 8.00070e+00
iters= 2,|R|= 6.70264e+00,|delx|= 4.18242e+00
iters= 3,|R|= 4.24162e+00,|delx|= 3.06478e+00
iters= 4,|R|= 6.96585e-01,|delx|= 1.01248e+00
iters= 5,|R|= 4.98041e-01,|delx|= 3.03586e-01
iters= 6,|R|= 3.80906e-02,|delx|= 2.75686e-02
iters= 7,|R|= 3.52559e-04,|delx|= 2.59991e-04
iters= 8,|R|= 3.15841e-08,|delx|= 2.32956e-08
iters= 9,|R|= 4.44089e-16,|delx|= 3.27548e-16
the converged solution is:x= 1.934563e+00,f(x)=-4.44089210e-16
到了这里,关于牛顿-拉普森法求解线性方程组原理及matlab程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!