高斯-赛德尔迭代法

高斯-赛德尔迭代法
高斯-赛德尔迭代法

一、 实验目的与要求

对于线性方程组?????=++=++=++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)

三、实验结果和数据处理(运行结果,截图)

四、结论

根据实验结果得出以下结论:高斯-赛德尔迭代法的收敛速度比雅可比迭代法的收敛速度要快一些。

相关主题
相关文档
最新文档