文档库 最新最全的文档下载
当前位置:文档库 › 实验八、解线性方程组的迭代法

实验八、解线性方程组的迭代法

实验八、解线性方程组的迭代法
实验八、解线性方程组的迭代法

实验八、解线性方程组的迭代法

解线性方程组的迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,即是从一个初始向量)0(x 出发,按照一定的迭代格式产生一个向量序列}{)(k x ,使其收敛到方程组b Ax =的解。迭代法的优点是所需计算机存储单元少,程序设计简单,原始系数矩阵在计算过程中始终不变等。但迭代法存在收敛性及收敛速度问题。迭代法是解大型稀疏矩阵方程组的重要方法。

一、实验目的

1、熟悉迭代法的有关理论和方法;

2、会编制雅可比迭代法、高斯-塞德尔迭代法的程序;

3、注意所用方法的收敛性及其收敛速度问题。

二、实验任务

1、用雅可比迭代法解方程组

?????=++=++=-+5222722321

321321x x x x x x x x x .

注意:若用高斯-塞德尔迭代法则发散。

解:输入主程序:

function X=jacdd(A,b,X0,P,wucha,max1)

[n m]=size(A);

for j=1:m

%a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j)));

%end

%for i=1:n

%if a(i)>=0

%disp('请注意:系数矩阵A 不是严格对角占优的,此雅可比迭代不一定收敛')

%return

%end

%end

%if a(i)<0

disp('请注意:系数矩阵A 是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 ')

%end

for k=1:max1

k

for j=1:m

X(j)=(b(j)-A(j,[1:j-1,j+1:m])*X0([1:j-1,j+1:m]))/A(j,j);

end

X,djwcX=norm(X'-X0,P);

xdwcX=djwcX/(norm(X',P)+eps); X0=X';X1=A\b;

if (djwcX

disp('请注意:雅可比迭代收敛,此方程组的精确解jX 和近似解X 如下:')

return

end

end

if (djwcX>wucha)&(xdwcX>wucha)

disp('请注意:雅可比迭代次数已经超过最大迭代次数max1 ')

end

a,X=X;jX=X1',

在MATLAB 中输入:

A=[1 2 -2;1 1 1;2 2 1];

b=[7 2 5]’

X=jacdd(A,b,[0;0;0],inf,0.01,20)

输入结果得:

k =1 X = 7 2 5

k =2 X =13 -10 -13

k =3 X = 1 2 -1

k =4 X = 1 2 -1

请注意:雅可比迭代收敛,此方程组的精确解jX 和近似解X 如下:

X =1 2 -1

2、用高斯-塞德尔迭代法解方程组

??

???=++=++=++7.19.09.00.29.09.09.19.09.0321321321x x x x x x x x x .

注意:若用雅可比迭代法则发散。

解:输入主程序:

function X=gsdddy(A,b,X0,P,wucha,max1)

D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);

dD=det(D);

if dD==0

disp('请注意:因为对角矩阵D 奇异,所以此方程组无解.')

else

disp('请注意:因为对角矩阵D 非奇异,所以此方程组有解.')

iD=inv(D-L); B2=iD*U;f2=iD*b;jX=A\b; X=X0;

[n m]=size(A);

for k=1:max1

X1= B2*X+f2; djwcX=norm(X1-X,P);

xdwcX=djwcX/(norm(X,P)+eps);

if (djwcX

break

else

k,X1',k=k+1;X=X1;

end

end

if (djwcX

disp('请注意:高斯-塞德尔迭代收敛,此A的分解矩阵

D,U,L和方程组的精确解jX和近似解X如下: ')

else

disp('请注意:高斯-塞德尔迭代的结果没有达到给定的精度,并且迭代次数已经超过最大迭代次数max1,方程组的精确解

jX和迭代向量X如下: ')

X=X';jX=jX'

end

end

X=X';D,U,L,jX=jX'

然后再MA TLAB中输入:

A=[1 0.9 0.9;0.9 1 0.9;0.9 0.9 1];

b=[1.9;2.0;1.7];

X=gsdddy(A,b,[0;0;0],inf,0.01,20)

请注意:因为对角矩阵D非奇异,所以此方程组有解.

k =1 ans =1.9000 0.2900 -0.2710

k =2 ans =1.8829 0.5493 -0.4890

k =3 ans =1.8457 0.7789 -0.6622

k =4 ans =1.7949 0.9805 -0.7979

k =5 ans =1.7356 1.1560 -0.9025

k =6 ans =1.6718 1.3076 -0.9815

k =7 ans =1.6065 1.4375 -1.0396

k =8 ans =1.5419 1.5479 -1.0808

k =9 ans = 1.4796 1.6411 -1.1086

k =10 ans =1.4208 1.7191 -1.1259

k =11 ans =1.3661 1.7838 -1.1349

k =12 ans =1.3160 1.8370 -1.1377

k =13 ans =1.2706 1.8804 -1.1359

k =14 ans =1.2300 1.9153 -1.1308

k =15 ans =1.1939 1.9432 -1.1234

k =16 ans =1.1622 1.9651 -1.1145

k =17 ans =1.1345 1.9820 -1.1049

k =18 ans =1.1106 1.9949 -1.0949

k =19 ans =1.0900 2.0044 -1.0850

请注意:高斯-塞德尔迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下:

D = 1 0 0

0 1 0

0 0 1

U = 0 -0.9000 -0.9000

0 0 -0.9000

0 0 0

L = 0 0 0

-0.9000 0 0

-0.9000 -0.9000 0

jX =1.0000 2.0000 -1.0000

X =1.0900 2.0044 -1.0850

三.实验总结:

这次实验课我们上星期讨论课的时候已经讨论过了,主要是雅可比迭代和高斯迭代法。不同的题目算出来的根据是否收敛来定。例如第二道题目我们用雅可比迭代法和高斯迭代法计算,雅可比迭代法算出来谱半径>1,主对角不占绝对优势,所以发散。而高斯迭代发算出来是收敛的,而且高斯迭代法利用新值代替旧值,所以比雅可比迭代法更好。

相关文档