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',k);
break;
end
%* 当迭代次数超过给定最大迭代次数时,迭代不收敛
if k>=max
fprintf('迭代法不收敛');
break;
end
%* 未达到给定精度要求则继续迭代
end
%* 输出迭代求解------------------------------------------------------------
if k<max
for i=1:n
fprintf('x[%d]=%f',i,x1(i));
end
end
评论0
最新资源