数值分析实验报告--解线性方程组的迭代法及其并行算法

更新时间:2023-09-06 02:11:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

解线性方程组的迭代法及其并行算法

《计算方法》实验报告

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

其并行算法

1、实验目的:

① 会用Matlab编程进而编写雅可比迭代法和高斯-塞德尔迭代法,用Matlab的程序来解线性方程组等的具体问题,同时加深对雅可比迭代和高斯塞德尔迭代的具体算法的理解及其应用。能很好的熟练掌握并深入体会计算方法这门课的重要性以及广泛的应用性。 ② 熟悉并熟练掌握Matlab编程环境。

2、实验要求:

用雅可比迭代和高斯-塞德尔迭代法来解线性方程组以及判断它们的收敛情况。

3、实验内容:用雅可比迭代和高斯-塞德尔解线性方程组

如下所示:

4、实验题目:用雅可比迭代和高斯-塞德尔解线性方程组

10x1+2x2+3x3=14, 2x1+5x2+2x3=18,以及判断雅可比迭代法的收敛 3x+x+5x=20,23 1

性和高斯-赛德尔迭代法的收敛性.

5、实验原理:

判断收敛性:是根据n*n阶矩阵是严格对角占优的,(所谓占优解释指对角线元素的绝对值大于其它同行或同列的绝对值之和)则线性方程组有唯一的解。且对于任意初始量产生的迭代向量都收敛来解雅可比迭代。如果n*n阶矩阵是正定的对称矩阵,则对于任

解线性方程组的迭代法及其并行算法

意初始向量产生的迭代向量序列都是收敛于此线性

方程组的

雅可比迭代公式:

1 k+1(k)(k)(k)(....= xaxaxax1221331nn+b1) 1a11 1(k+1)(k)(k) x2( a21x1(k+1) a23x3= .... a2nxn+b2) a22 .............................................. (k+1)1(k)(k)= .... an,n 1xn( an1x1(k) an2x2 xn 1+bn) ann

高斯-塞德尔迭代公式

1 k+1(k)(k)(k)= +b1)x(axax....ax11221331nn a11 1(k+1)(k)(k) x2= .... a2nxn+b2)( a21x1(k+1) a23x3 a22 .............................................. (k+1)1(k+1)(k+1)= .... an,n 1xn( an1x1(k+1) an2x2 xn 1+bn) ann

6、 设计思想:先化简,把对角线的项提到左边,其它项移到右边,再利用迭代公式使根逐渐精确化,直到达到要求求出最后结果为止。

7、 对应程序:

雅可比迭代程序:

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<wucha)&(xdwcX<wucha)

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

return

end

end

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

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

运行雅可比迭代程序输入:A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2];X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)

结果为:

k =

1

X =

解线性方程组的迭代法及其并行算法

0.1000 0.1000 0.2000

k =

2

X =

0.0200 0.0600 0.1600

k =

3

X =

0.0400 0.0800 0.1880

k =

4

X =

0.0276 0.0732 0.1800

k =

5

X =

0.0314 0.0765 0.1844

k =

6

X =

0.0294 0.0753 0.1829

k =

7

X =

0.0301 0.0758 0.1837

k =

8

X =

0.0297 0.0756 0.1834

解线性方程组的迭代法及其并行算法

k =

9

X =

0.0299 0.0757 0.1835

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

X =

0.0299 0.0757 0.1835

高斯-塞德尔:

a,X=X;jX=X1' 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<wucha)|(xdwcX<wucha)

return

else

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

end

end

if (djwcX<wucha)|(xdwcX<wucha)

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'

高斯-塞德尔的输入为:

A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2]; X0=[0 0 0]';

X=gsdddy(A,b,X0,inf, 0.001,100) A=[10 2 3;2 10 1;3 1 10]; 请注意:因为对角矩阵D非奇异,所以此方程组有解. 高斯-塞德尔实验结果:

A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2];

X0=[0 0 0]';

X=gsdddy(A,b,X0,inf, 0.001,100)

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

k =

1

ans =

0.1000 0.0800 0.1620

k =

2

ans =

0.0354 0.0767 0.1817

k =

3

ans =

0.0301 0.0758 0.1834

X =

解线性方程组的迭代法及其并行算法

0.0301

0.0758

0.1834

8.心得体会:

这已经是第三次实验了,或多或少我已经对MATLAB有了更多的了解与深入的学习。通过这次实验我了解了雅可比迭代法和高斯-塞德尔迭代法的基本思想,虽然我们不能熟练编出程序,但还是能看明白的。运行起来也比较容易,让我跟好的了解迭代法的多样性,使平常手算的题能得到很好的验证。通过这次实验让我对MATLAB又有了更深一层的认识,使我对这门课兴趣也更加浓厚。

本文来源:https://www.bwwdw.com/article/moui.html

Top