当前位置:服务支持 >  软件文章 >  Matlab数值分析SOR逐次超松弛迭代法详解

Matlab数值分析SOR逐次超松弛迭代法详解

阅读数 4
点赞 0
article_banner

Matlab 数值分析SOR逐次超松弛迭代法

%* SOR(SuccesiveOver-Relaxation)逐次超松弛迭代法求解线性方程组-------

%* 输入方程组、预处理-------------------------------------------------------

A=[4,-1,0;-1,4,-1;0,-1,4];

 b=[1;4;-3];

 X1=[0;0;0];

 w=0.8;                               %松弛因子

 eps=1e-4;                            % 精度要求

 max=1000;                          % 最大迭代次数,一般不改动

 %* 开始迭代求解------------------------------------------------------------

 n=length(A);                 % 系数矩阵A的维数

 k=0;

 while 1

     x=X1;  %保存每次的X1,用于判定精度

     %* 先计算X1(1),与Jacobi迭代法计算一致

     X1(1)=(1-w)*X1(1)+w*(b(1)-A(1,2:n)*X1(2:n,1) )/A(1,1);

     %* 再计算X1(i),i=2,3,...,n-1

     for i=2:n-1

         X1(i)=(1-w)*X1(i)+w*(b(i)-A(i,1:i-1)*X1(1:i-1,1)-A(i,i+1:n)*X1(i+1:n,1) )/A(i,i);

     end

     %* 最后计算X1(n)

     X1(n)=(1-w)*X1(n)+w*(b(n)-A(n,1:n-1)*X1(1:n-1,1) )/A(n,n);

     k=k+1;

     %* 计算前后迭代解X1的误差

     if sum( abs(X1-x) )<eps

         fprintf('迭代次数=%d\n&#​39;,k);

         break;

     end

     %* 当迭代次数超过给定最大迭代次数时,迭代不收敛

     if k>=max

         fprintf('迭代法不收敛\n&#​39;);

         break;

     end

     %* 未达到给定精度要求则继续迭代

 end

  %* 输出迭代求解------------------------------------------------------------

 if k<max

     for i=1:n

         fprintf('x[%d]=%f\n&#​39;,i,X1(i));

     end

 end


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空