欢迎来到天天文库
浏览记录
ID:6617701
大小:216.00 KB
页数:8页
时间:2018-01-20
《线性方程组的j-迭代,gs-迭代,sor-迭代,ssor-迭代方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、西京学院数学软件实验任务书课程名称数学软件实验班级数0901学号0912020119姓名王震实验课题雅克比迭代、高斯—赛德尔迭代、超松弛迭代实验目的熟悉雅克比迭代、高斯—赛德尔迭代、超松弛迭代实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成实验内容雅克比迭代法高斯—赛德尔迭代法、超松弛迭代法成绩教师【实验课题】雅克比迭代、高斯—赛德尔迭代、超松弛迭代【实验目的】学习和掌握线性代数方程组的雅克比迭代、高斯—赛德尔迭代、超松弛迭代法,并且能够熟练运用这些迭代法对线性方程组进行求解。【实验内容】1、问题重述:对于线
2、性方程组,即:(1),其中,如何运用雅克比迭代、高斯—赛德尔迭代、超松弛迭代法对线性方程组进行求解。2、方法原理:2.1雅克比迭代迭代思想:首先通过构造形如的等式,然后给定一个初值,再通过进行迭代。step1:对(1)相应第行中的用其它元素表示为:即:Step2:进行迭代,,取它的判断条件为小于一个确定的误差值,跳出循环。其中,为循环次数,则为所求的近视解。(参考程序)2.2、高斯—赛德尔迭代迭代思想:以雅克比迭代法为基础,假定每一次迭代得到的数据都优越于,即中的每一个分量都优越于中对应的分量。由于在求解第个分量的过程中,前个分量已经求出,所以可以直接调用所求
3、出来的前个分量。考虑雅克比迭代:,即:所以,当可逆时,由于在求解第个分量的过程中,前个分量已经求出,将上式改写为:即:所以,设,,上式改写为:,迭代算法:得出计算步骤:,由于再代入数据时尽可能采用最新数值,因此,高斯—赛德尔迭代法的收敛速度大于雅克比迭代法。2.3、逐次超松弛迭代法(SOR)逐次超松弛迭代法是对高斯—赛德尔迭代的一种改进,在高斯—赛德尔迭代的基础上加入松弛因子,使得与的误差由控制。由高斯—赛德尔迭代公式:得出SOR迭代算法:,其中,为松弛因子。迭代的控制条件为:,得出SOR的计算公式为:,则存在,令,则,2.4、对称超松弛迭代法对称超松弛迭代法
4、是对逐次超松弛迭代法的改进,在逐次超松弛迭代法的基础上,首先对线性方程组按照顺序方式依次求解,然后在此基础上对线性方程组逆序求解,得出SSOR迭代法。求解步骤:Step1顺序求解得出:Step2逆序求解由得出得出SSOR公式:【实验总结】由以上实验得出SSOR在求解线性方程时最优。当时,逐次超松弛迭代法(SOR)等价于高斯赛德尔迭代法。(参考程序)【程序】%%%%%%%%%%%%%%%%%%%%%%程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%functionmaintest1(A,b)N=input('请输入最大迭代次数N(
5、足够大):');esp=input('请输入近视解的误差限:');X0=input('请输入初始值:');ifany(diag(A))==0error('系数矩阵错误,迭代终止!')endD=diag(diag(A));U=-triu(A);L=-tril(A);%%%%%%%%%%%%%%%jacobi%%%%%%fJ=inv(D)*b;BJ=inv(D)*(L+U);PJ=max(abs(eig(BJ)));fprintf('用雅克比求解的谱半径为:%2d',PJ)%%%%%%%%%%%%%%%GS%%%%%%fG=inv(D-L)*b;BG=inv(
6、D-L)*U;PG=max(abs(eig(BG)));fprintf('用GS求解的谱半径为:%2d',PG)%%%%%%%%%%%%%SOR%%%%%%%%%%omega=1;fS=omega*inv(D-omega*L)*b;BS=inv(D-omega*L)*((1-omega)*D+omega*U);PS=max(abs(eig(BS)));fprintf('用SOR求解的谱半径为:%2d',PS)%%%%%%%%%%%%SSOR%%%%%%%%%%%%%%%Lw=inv(D-omega*L)*((1-omega)*D+omega*U);Uw
7、=inv(D-omega*U)*((1-omega)*D+omega*L);Sw=Uw*Lw;fw=omega*(2-omega)*inv(D-omega*inv(D)*U)*inv(D-omega*inv(D)*L)*inv(D)*b;PSS=max(abs(eig(Sw)));fprintf('用SSOR求解的谱半径为:%2d',PSS)%%%%%%%%%%%%%%%Jacobi%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fprintf('Jacobi迭代法')t=1;Y0=X0;Y1=BJ*Y0+fJ;fprintf('
8、第%2d次迭代得:',t)disp(Y
此文档下载收益归作者所有