- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
if n~=m error(The rows and columns of matrix A must be equal!); return; end %当方程组与右端项的维数不匹配时,停止计算,并输出出错信息. if m~=nb error(The columns of A must be equal the length of b!); return; end if nargin4 it_max=100;end if nargin3 ep=1e-5;end k=0;x=zeros(n,1);y=zeros(n,1);index=1 线性方程组迭代解法 while 1 y=x; for i=1:n z=b(i); for j=1:n if j~=i z=z-A(i,j)*x(j); end end if abs(A(i,i))1e-10|k== it_max index=0;return; end z=z/A(i,i);x(i)=z; end 线性方程组迭代解法 if norm(y-x,inf)ep break; end k=k+1; end 调用函数Gauss_Seidel.m 解例1. 线性方程组迭代解法 x = 0.9998 k = 4 index = 1 迭代成功,收敛 0.9998 1.0001 得到 输入 A=[10 3 1;2 -10 3;1 3 10]; b=[14 -5 14];ep=0.005; [x,k,index]=Gauss_Seidel(A,b,ep) 例3 分别用雅可比和高斯-赛德尔迭代法解方程组,均取相同初值 1) Jacobi4次达到精度 G-S发散。 线性方程组迭代解法 2) Jacobi发散, G-S发散. 3) Jacobi 89次达到精度 G-S 8次达到同样的精度。 线性方程组迭代解法 4) Jacobi发散,而G-S 10次达到精度 . 雅可比迭代法和高斯-赛德尔迭代法可能同时发散;也可能同时收敛,但一个快另一个慢;可能一个收敛而另一个发散。 线性方程组迭代解法 【注】 4.2.3 逐次超松弛迭代法 SOR迭代法:G-S迭代法基础上,用参数校正残差加速. 一、逐次超松弛迭代公式 G-S迭代公式中加、减 线性方程组迭代解法 【注】(1)G-S:对旧值 ,经残差校正而得新的 近似值,校正量大小为 (2)为加速收敛,将校正量乘加速因子 有 ω为松驰因子: 当 时为低松驰因子; 时 当 G-S公式; 称为超松驰因子. 其中, 为第i个方程的残差. 线性方程组迭代解法 二、逐次超松弛迭代法的矩阵描述 其中, 例4 用SOR解方程组,取 解 方程组的精确解为: 取初值 线性方程组迭代解法 用G-S迭代得 利用SOR方法 初值 迭代计算结果 线性方程组迭代解法 SOR迭代5次,与G-S法迭代10次的结果大体相同,SOR方法的松驰因子起到了加速收敛的重要作用. 逐次超松驰迭代的MATLAB程序:SOR.m function [x,k,index]=SOR(A,b,x0,ep,w,it_max) %解线性方程组的SOR迭代法,其中, %A为方程组的系数矩阵; %b为方程组的右端项;%x0为初始迭代向量; 【注】 线性方程组迭代解法 %ep为精度要求,缺省值1e-5;%w为超松弛因子,缺 省值为1;%it_max为最大迭代次数,缺省值100; %x为方程组的解;%k为迭代次数; %index为指标变量,index=0表示迭代失败, %index=1表示收敛到指定要求. [n,m]=size(A);nb=length(b); %当方程组行与列的维数不相等时,停止计算,并输出出错信息. if n~=m error(The rows and columns of matrix A must be equal!); return; end%当方程组与右端项的维数不匹配时,停止计算,并输出出错信息. 线性方程组迭代解法 if m~=nb error(The columns of A must be equal the length of b!); return; end if nargin6 it_max=100;end if nargin5 w=1;end if nargin4 ep=1e-5;end k=0;x=x0;y=zeros(n,1);index=1; while 1 y=x; for i=1:n z=b(i); for j=1:n
文档评论(0)