数值计算方法I实验报告(2)

2025-11-11

6

?12?2??x1??6????????111??x2???6??221????11? ???3???(1) 用分量形式进行 Jacobi 迭代 (2) 用矩阵形式进行 Jacobi 迭代

(3) 用分量形式进行 Gauss-Seidel 迭代 (4) 用矩阵形式进行 Gauss-Seidel 迭代

实验代码:

(1) 用分量形式进行 Jacobi 迭代:

function x=chap3_3 clear;

fprintf('Jacobi迭代法') x1_(1)=0; x2_(1)=0; x3_(1)=0; for i =1:10

x1_(i+1)=6-2*x2_(i)+2*x3_(i); x2_(i+1)=6-x1_(i)-x3_(i);

x3_(i+1)=11-2*x1_(i)-2*x2_(i); end

x=[x1_',x2_',x3_'] chap3_3

Jacobi迭代法 x =

0 0 0 6 6 11 16 -11 -13 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1

实验结果 ans =

6

7

0 0 0 6 6 11 16 -11 -13 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1

(2) 用矩阵形式进行 Jacobi 迭代

function x=Jacobi(A,b,x0,eps) D=diag(diag(A)); D=inv(D); L=triu(A,-1); U=triu(A,1); B=-D*(L+U); f=D*b; k=0; x0=x0; x=B*x0+f;

fprintf('k x1_(k) x2_(k) x3_(k)\\n')

fprintf('- %4.0f %4.0f %4.0f\\n',k,x0) while norm(x-x0)>=eps x0=x;

x=B*x0+f; k=k+1;

fprintf('- %4.0f %4.0f %4.0f\\n',k,x0) end

实验结果

A=[1,2,-2;1,1,1;2,2,1]; >> b=[6;6;11]; >> x0=[0;0;0]; >> eps=1e-3;

>> x=Jacobi(A,b,x0,eps); k x1_(k) x2_(k) x3_(k) 0 0 0 0 1 6 6 11 2 20 -28 -12 3 50 38 79

(3) 用分量形式进行 Gauss-Seidel 迭代

7

function x=chap3_4 clear;

fprintf('Gauss-Seidel迭代法:') x1_(1)=0; x2_(1)=0; x3_(1)=0; for i =1:10

x1_(i+1)=6-2*x2_(i)+2*x3_(i); x2_(i+1)=6-x1_(i)-x3_(i);

x3_(i+1)=11-2*x1_(i)-2*x2_(i); end

x=[x1_',x2_',x3_]

实验结果

Gauss-Seidel迭代法: x =

0 0 0 6 6 11 16 -11 -13 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 ans =

0 0 0 6 6 11 16 -11 -13 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 GaussSidel矩阵迭代形式

8

8

9

function x=GaussSidel(A,b,x0) D=diag(diag(A)); L=triu(A,-1); C=inv(D+L); U=triu(A,1); B=-C*U; f=C*b; i=0; x0=x0; x=B*x0+f;

fprintf('k x1_(k) x2_(k) x3_(k)\\n')

fprintf('- .4f .4f .4f\\n',i,x0) for i=1:10 x0=x;

x=B*x0+f;

fprintf('- .4f .4f .4f\\n',i,x0) end

实验结果

A=[1,2,-2;1,1,1;2,2,1]; b=[6;6;11]; x0=[0;0;0];

x=GaussSeidel(A,b,x0); k x1_(k) x2_(k) x3_(k)

0 0.0000 0.0000 0.0000 1 -7.5000 8.0000 -2.5000 2 8.0000 -5.0000 10.5000 3 -44.0000 34.0000 -28.5000 4 112.0000 -83.0000 88.5000 5 -356.0000 268.0000 -262.5000 6 1048.0000 -785.0000 790.5000 7 -3164.0000 2374.0000 -2368.5000 8 9472.0000 -7103.0000 7108.5000 9 -28436.0000 21328.0000 -21322.5000 10 85288.0000 -63965.0000 63970.5000

(4) 用矩阵形式进行 Gauss-Seidel 迭代

clear

fprintf('增广矩阵')

A=[0.729,0.81,0.9,0.6867;1,1,1,0.8338;1.331,1.21,1.1,1.000] %输入增广矩阵

%第一次选主元,第三行和第一行交换 fprintf('第一次选主元后的增广矩阵')

tempo=A(3,:);A(3,:)=A(1,:);A(1,:)=tempo;A %第一次消元

fprintf('第一次消元后的增广矩阵')

9

10

A(2,:)=A(2,:)-A(1,:)*A(2,1)/A(1,1); A(3,:)=A(3,:)-A(1,:)*A(3,1)/A(1,1);A %第二次选主元,第三行和第二行交换 fprintf('第二次选主元后的增广矩阵') tempo=A(3,:);A(3,:)=A(2,:);A(2,:)=tempo %第二次消元

fprintf('第二次消元后的增广矩阵') A(3,:)=A(3,:)-A(2,:)*A(3,2)/A(2,2);A %回代求解

fprintf('回代求解') x(3)=A(3,4)/A(3,3);

x(2)=(A(2,4)-A(2,3)*x(3))/A(2,2)

x(1)=(A(1,4)-A(1,2:3)*x(2:3)')/A(1,1); x

运行结果: 增广矩阵 A =

0.7290 0.8100 0.9000 0.6867 1.0000 1.0000 1.0000 0.8338 1.3310 1.2100 1.1000 1.0000

第一次选主元后的增广矩阵 A =

1.3310 1.2100 1.1000 1.0000 1.0000 1.0000 1.0000 0.8338 0.7290 0.8100 0.9000 0.6867

第一次消元后的增广矩阵 A =

1.3310 1.2100 1.1000 1.0000 0 0.0909 0.1736 0.0825 0 0.1473 0.2975 0.1390

第二次选主元后的增广矩阵 A =

1.3310 1.2100 1.1000 1.0000 0 0.1473 0.2975 0.1390 0 0.0909 0.1736 0.0825

第二次消元后的增广矩阵

10


数值计算方法I实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:EMC900台架操作规程及几点说明

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219