ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数值计算:线性方程组的静态迭代解法

2021-10-03 23:00:51  阅读:202  来源: 互联网

标签:线性方程组 end 迭代 boldsymbol iter cases omega 解法


对于线性方程组的迭代求解方法可以分为两类,静态迭代方法与非静态迭代方法,两者区别在于,前者构造简单,迭代步长与方向恒定,但是收敛条件限制较大,收敛速度较慢。而非静态方法构造格式更复杂,收敛速度更快。本文主要记录静态迭代方法

静态迭代法

考虑以下线性方程组

\[\boldsymbol Ax=\boldsymbol b \]

对于工程计算中产生的大型稀疏矩阵A(非奇异),迭代法是求解此类方程组的最佳方法。根据此方程构造其一阶定常迭代格式迭

\[\begin{cases} x^{(0)}\qquad \text {初始值}\\ \boldsymbol x^{k+1}=\boldsymbol Bx^{k}+d \end{cases} \]

迭代方法的收敛条件可以简单认作:\(\boldsymbol B\)的谱半径小于\(1\),即\(\rho(B)<1\)

收敛速度可以简单认作:\(R(\boldsymbol B)=-\text{ln}\rho(\boldsymbol B)\)


对于方程\(\boldsymbol Ax=\boldsymbol b\),一般选择将\(\boldsymbol A\)进行分裂,\(\boldsymbol {A=M-N}\),可以选择合适的\(\boldsymbol M\)使得\(\boldsymbol {M}x=d\)易于求解,

\[\boldsymbol Ax=b \Leftrightarrow x=\boldsymbol M^{-1}\boldsymbol Nx+\boldsymbol M^{-1}b \]

Jacobi迭代法

将系数矩阵\(\boldsymbol A\)分解

\[\boldsymbol {A=D-L-U} \]

\(\boldsymbol {D,L,U}\)分别为对角矩阵、下三角矩阵、上三角矩阵,则可以构造得到\(Jacobi\)迭代格式

\[\begin{cases} x^{(0)}\qquad \text {初始值}\\ \boldsymbol x^{(k+1)}=\boldsymbol {D^{-1}(L+U)}x^{(k)}+\boldsymbol{D^{-1}b} \end{cases} \]

function [x,iter,Residual]=Jacobi(A,b,x0,epsilon,iter_max)
%系数矩阵A,b,初始值x0,误差限制epsilon,最大迭代步数iter_max
iter=0;
x=x0;
%D=diag(diag(A));    %对角线
invD=diag(diag(A).^(-1));
U=triu(A,1);        %上三角
L=tril(A,-1);       %下三角
B=-invD*(L+U);
d=invD*b;
if(max(abs(eig(B)))>=1)
    error('can not convergent!')
end
Residual=1e20;
while sqrt(Residual) >= epsilon && iter < iter_max
    iter=iter+1;
    x_new=B*x+d;
    Residual=norm(x_new-x,2);
    x=x_new;
end
end

Gauss-Seidel迭代法

与\(Jacobi\)迭代法不同的是,迭代过程中,更新计算第\(i+1\)个分量时,使用了已经更新的第\(i\)个变量。迭代形式为

\[\begin{cases} x^{(0)}\qquad \text {初始值}\\ \boldsymbol x^{(k+1)}=\boldsymbol {{(D-L)}^{-1}U}x^{(k)}+\boldsymbol{(D-L)^{-1}b} \end{cases} \]

SOR迭代

逐次超松弛迭代法(Successive Over Relaxation method)

选取分裂的下三角矩阵\(M\)中带有松弛因子

\[\boldsymbol M =\frac{1}{\omega}(\boldsymbol D-\omega \boldsymbol L),\quad \omega>0 \]

带有松弛因子的迭代格式为

\[\begin{cases} x^{(0)}\qquad \text {初始值}\\ \boldsymbol x^{(k+1)}=\boldsymbol {{(D-\omega L)}^{-1}((1-\omega)D+\omega U)}x^{(k)}+ \boldsymbol{\omega(D-\omega L)^{-1}b} \end{cases} \]

显然\(\omega=1\)时,\(SOR\)方法为\(Gauss-Seidel\)迭代法

\(\omega>1\),称为超松弛迭代;\(\omega<1\),称为亚松弛迭代;


function [x,iter,Residual]=SOR(A,b,x0,omega,epsilon,iter_max)
%系数矩阵A,b,初始值x0,误差限制epsilon,松弛因子omega,最大迭代步数iter_max
iter=0;
x=x0;
D=diag(diag(A));    %对角线
U=triu(A,1);        %上三角
L=tril(A,-1);       %下三角
B=inv(D-omega*L)*((1-omega)*D+omega*U);
d=omega*inv(D-omega*L)*b;
Residual=1e20;
while sqrt(Residual) >= epsilon && iter < iter_max
    iter=iter+1;
    x_new=B*x+d;
    Residual=norm(x_new-x,2);
    x=x_new;
end
end

标签:线性方程组,end,迭代,boldsymbol,iter,cases,omega,解法
来源: https://www.cnblogs.com/chetwin/p/15365338.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有