高斯-赛德尔迭代法
一、 实验目的与要求
对于线性方程组?????=++=++=++69228281027321
321321x x x x x x x x x
1. 用高斯-赛德尔迭代法求此方程组的近似解(终止迭代过程的最大允许迭代次数N ,近似解的误差限eps ,均由用户设定);
2. 通过数值实验说明,求此线性方程组的近似解时,高斯-赛德尔迭代法的收敛速度比雅可比迭代法的收敛速度要快一些。(用同样精度要求的条件来比较迭代次数)
二、 实验方案(程序源文件)
运用MATLAB 软件编辑M 文件如下:
function EX()
a=input('请输入系数矩阵a :');
b=input('请输入矩阵b:');
N=input('请输入最大迭代次数N :');
esp=input('请输入近似解的误差限:');
if any(diag(a))==0
error('系数矩阵错误,迭代终止!')
end
D=diag(diag(a));
X0=zeros(size(b));
x1=0;
x2=0;
x3=0;
X1=[x1;x2;x3];
h=inv(D)*b;
B=inv(D)*(D-a);
B1=triu(B);
B2=tril(B);
k=1;
fprintf('高斯-赛德尔迭代法 \n');
fprintf('第0次迭代得:')
disp(X1');
while k<=N
x1=h(1,1)+B1(1,:)*X0;
X1=[x1;x2;x3];
x2=h(2,1)+B1(2,:)*X0+B2(2,:)*X1;
X1=[x1;x2;x3];
x3=h(3,1)+B2(3,:)*X1;
X1=[x1;x2;x3];
if norm(X1-X0,inf) fprintf('已满足误差限。 ') break ; end X0=X1; fprintf('第%2d次迭代得:',k) disp(X1'); k=k+1; end fprintf('满足误差限的高斯-赛德尔迭代近似解为:') disp(X1'); fprintf('雅可比迭代法 '); t=0; Y0=zeros(size(b)); while t<=N Y1=h+B*Y0; if norm(Y1-Y0,inf) fprintf('满足误差限 \n') break ; end Y0=Y1; fprintf('第%2d次迭代得:',t) disp(Y1'); t=t+1; end fprintf('满足误差限的雅可比迭代近似解为:') disp(Y1'); fprintf('用高斯-赛德尔迭代法迭代次数为 %d次\n用高斯-赛德尔迭代法迭代次数为%d次\n',k-1,t-1) 三、实验结果和数据处理(运行结果,截图) 四、结论 根据实验结果得出以下结论:高斯-赛德尔迭代法的收敛速度比雅可比迭代法的收敛速度要快一些。