MATLAB数值分析:Gauss-Seidel高斯赛德尔迭代法详解

Matlab 数值分析 Gauss_Seidel高斯赛德尔迭代法

%* Gauss_Seidel迭代法求解线性方程组-----------------------------------------

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

A=[5,2,1;-1,4,2;2,-3,10];  %A矩阵

 b=[-12;20;3];                   %列向量b

 X1=[-3;1;1];                       %初始X1

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

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

 max=1000;                     % 最大迭代次数

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

 k=0;

 while 1

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

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

     X1(1)=( 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)=( 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)=( 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',k);

         break;

     end

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

     if k>=max

         fprintf('迭代法不收敛\n');

         break;

     end

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

 end

 

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

 if k<max

     for i=1:n

         fprintf('x[%d]=%f\n',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
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空