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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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) )

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

break;

end

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

if k>=max

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

break;

end

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

end

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

if k

for i=1:n

fprintf('x[%d]=%f\n',i,x1(i));

end

end

相关文档
最新文档