MATLAB高斯迭代算法,matlab实现高斯赛德尔迭代法解方程组

已知方程组

Ax=b

MATLAB高斯迭代算法,matlab实现高斯赛德尔迭代法解方程组_第1张图片

使用高斯赛德尔迭代法

要求精度达到0.0001

迭代初始向量[0 0 0 0 0 0 0 0 0]

最大限制迭代50次

---------------------------------------------------------分--割--线---------------------------------------------------------

function[x]=GS(A,b,xi,eps,N)

%x为方程组的解A为系数矩阵b为常数项x0为迭代初值eps为误差N是限定的迭代次数

%首先要将A分解为上下三角矩阵

L=triu(A)-A;

U=tril(A)-A;

D=A+L+U;

Bs=inv((D-L))*U;

fs=inv((D-L))*b;

%得到迭代格式Bs为迭代阵fs为常向量

i=0;con=0;

%其中con是用来记录计算结果是否收敛

while i

i=i+1;

x=Bs*xi+fs;

for

j=1:length(b)

il(i,j)=x(j);

end

if

norm(x-xi)

con=1;

break

end

xi=x;

end

%以下是将迭代过程写入txt文档文件名为iteration.txt

fid=fopen('iteration.txt','w');

fprintf(fid,'iteration');

for j=1:length(b)

fprintf(fid,' x%d',j);

end

for j=1:i

fprintf(fid,'\n%6d ',j);

for

k=1:length(b)

fprintf(fid,'

%10.6f',il(j,k));

end

end

if con==1

fprintf(fid,'\n计算结果收敛!');

end

if con==0

fprintf(fid,'\n迭代步数过多可能不收敛!');

end

fclose(fid);

x=xi

---------------------------------------------------------分--割--线---------------------------------------------------------

运行结果:

x =

2.9999

2.0000

1.0000

2.9999

2.0000

1.0000

3.0001

1.9999

0.9997

---------------------------------------------------------分--割--线---------------------------------------------------------

在iteration.txt可看到迭代过程

iteration x1 x2 x3 x4 x5 x6 x7 x8 x9

1 2.000000 3.090909 1.977273 3.625000 1.681818 0.767045 3.375000 1.772727 -1.750000

2 5.017045 1.253099 0.084452 2.798295 2.052169 1.087810 3.596333 1.533152 -1.700695

......

32 2.999845 2.000006 1.000027 2.999932 2.000028 1.000027 3.000146 1.999896 0.999577

33 2.999884 2.000005 1.000020 2.999949 2.000021 1.000020 3.000110 1.999922 0.999683

34 2.999913 2.000004 1.000015 2.999962 2.000016 1.000015 3.000082 1.999941 0.999762

计算结果收敛!

你可能感兴趣的:(MATLAB高斯迭代算法)