线性方程组的迭代解法(Matlab)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章线性方程组的迭代解法
2015年12月27日17:12
迭代法是目前求解大规模稀疏线性方程组的主要方法之一。包括定常迭代法和不定常迭代法,定常迭代法的迭代矩阵通常保持不变,包括有雅可比迭代法(Jacobi)、高斯-塞德尔迭代法(Gauss-Seidel)、超松弛迭代法(SOR)
1.雅可比迭代法(Jacobi)
A表示线性方程组的系数矩阵,D表示A的主对角部分,L表示下三角部分,U表示上三角部分。
A=D+L+U
要解的方程变为Dx+Lx+Ux=b
x=D^(-1)(b-(L+U)x)
所以Jocabi方法如下:
Matlab程序
function [x,iter] =jacobi(A,b,tol)
D=diag(diag(A));
L=D-tril(A);
U=D-triu(A);
x=zeros(size(b));
for iter=1:500
x=D\(b+L*x+U*x);
error=norm(b-A*x)/norm(b);
if(error break; end End 2.高斯-塞德尔迭代法(Guass-Seidel) 在雅可比迭代法中将算出来的的分 马上投入到下一个迭代方程中进行 Matlab程序 function [x,iter]=guass_seidel(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); for iter=1:500 x=(D-L)\(U*x+b); error=norm(b-A*x)/norm(b); if(error break; end end 3.超松弛迭代法(SOR) GS迭代格式可以改写成 上面等式的右边第二项可以看成修正 ,在修正 之前加参数w(松弛因子),SOR迭代格式为 即 Matlab程序 function [x,iter]=sor(A,b,omega,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); for iter=1:500 x=(D-omega*L)\(omega*b+(1-omega)*D*x+omega*U*x); error=norm(b-A*x)/norm(b); if(error break; end end