1、数值分析实验报告一、 实验目的1、了解熟悉 jacobi 迭代法和 seidel 迭代法的解法2、将原理与 matlab 语言结合起来,编程解决问题3、分析实验结果二、实验题目设线性方程组为10251042783431x考察用 jacobi 迭代法和 seidel 迭代法求解该线性方程组的收敛情况。如果收敛,给出误差满足 的解。4)1()(kkx三、实验原理将 A 作如下分解 ULDA这里 00,0, 211221221 nnn aaLaaDJacobi 迭代矩阵为 )(UDBJSeidel 迭代矩阵为 LS1它们的迭代格式都可化为 gxkk)()(则迭代格式对任何初值都瘦脸的充要条件是迭代矩
2、阵谱半径 n2,1kn,1max)( k1 ,个 特 征 值 ,的是 矩 阵其 中 , BBknJacobi 迭代矩阵的特征方程为 0)det(JBISeidel 迭代矩阵的特征方程为 0)(detULDS四、实验内容用 matlab 编写计算 jacobi 迭代矩程序,建立 m 文件如下:functionM=BJ(A)D=diag(diag(A); L=tril(-A)+D; U=triu(-A)+D; M=inv(D)*(L+U); 输入: A=20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5; M=BJ(A)M:M =0 -0.0500 0.1500 0.0
3、500-0.1667 0 0 -0.38890.0250 -0.0500 0 0.0500-0.2000 0 0.2000 0则 jacobi 迭代矩阵为: 02.02. 5.5.389167. .1.JB用 matlab 求 jacobi 迭代矩阵的特征根的算法如下: A=0 -0.05 0.15 -0.05;-0.67 0 0 -0.39;0.025 -0.05 0 0.05;-0.2 0 0.2 0;V,D=eig(A)V =-0.1892 + 0.0450i -0.1892 - 0.0450i -0.3812 -0.5005 -0.9467 -0.9467 0.8867 0.5461
4、-0.1528 - 0.1181i -0.1528 + 0.1181i -0.2099 -0.0466 -0.1056 + 0.1325i -0.1056 - 0.1325i 0.1561 0.6701 D =-0.1774 + 0.0864i 0 0 0 0 -0.1774 - 0.0864i 0 0 0 0 0.2194 0 0 0 0 0.1355 则最大特征根为:0.2194 则 ,所以 jacobi 迭代法收敛1294.)(JB用 matlab 编程 jacobi 迭代法求根的算法:function n,x=jacobi(A,b,X,nm,w)%用雅克比迭代法求解方程组 Ax=b%输
5、入:A 为方程组的系数矩阵,b 为方程组右端的列向量, X 为迭代初值构成的列向量,nm 为最大迭代次数,w 为误差精度%输出:x 为求得的方程组的解构成的列向量,n 为迭代次数n=1;m=length(A);D=diag(diag(A); %令 A=D-L-U,计算矩阵 DL=tril(-A)+D; %令 A=D-L-U,计算矩阵 LU=triu(-A)+D; %令 A=D-L-U,计算矩阵 UM=inv(D)*(L+U); %计算迭代矩阵g=inv(D)*b; %计算迭代格式中的常数项%下面是迭代过程while n A=20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0
6、-1 5;b=1;2;10;-1;X=0;0;0;0; nm=100; w=1e-4; n,x=jacobi1(A,b,X,nm,w)迭代次数为n =6方程组的解为x =0.06870.16450.2352-0.1667n =6x =0.06870.16450.2352-0.1667所以,满足精度的根为 x = 0.0687 0.1645 0.2352 -0.1667 迭代次数为 6 次用 matlab 编程计算 seidel 迭代矩阵算法为:functionM=BS(A)D=diag(diag(A); L=tril(-A)+D; U=triu(-A)+D; M=inv(D-L)*U; 输入:
7、 A=20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5; M=BS(A)M =0 -0.0500 0.1500 0.05000 0.0083 -0.0250 -0.39720 -0.0017 0.0050 0.07110 0.0097 -0.0290 0.0042则 seidel 迭代矩阵为: 042.9.07. 7151383.SB用 matlab 编程求得 seidel 矩阵的算法为: A=0 -0.05 0.15 0.05;0 0.0083 -0.025 -0.3972;0 -0.0017 0.005 0.0711;0 0.0097 -0.029 0.004
8、2;V,D=eig(A)V =1.0000 -0.1596 + 0.6750i -0.1596 - 0.6750i -0.9104 0 0.6965 0.6965 0.3924 0 -0.1250 + 0.0028i -0.1250 - 0.0028i 0.1313 0 0.0070 - 0.1348i 0.0070 + 0.1348i 0.0000 D =0 0 0 0 0 0.0088 + 0.0768i 0 0 0 0 0.0088 - 0.0768i 0 0 0 0 -0.0001 则特征根为 0.008+0.0768i 0.0088-0.0768i -0.0001则 ,所以 seid
9、el 迭代法收敛18.)(SB用 seidel 迭代法求根的算法为:function n,x=gaussseidel(A,b,X,nm,w)%用高斯- 赛德尔迭代法求解方程组 Ax=b%输入:A 为方程组的系数矩阵,b 为方程组右端的列向量, X 为迭代初值构成的列向量,nm 为最大迭代次数,w 为误差精度%输出:x 为求得的方程组的解构成的列向量,n 为迭代次数n=1;m=length(A);I=eye(m); %生成 m*m 阶的单位矩阵D=diag(diag(A); %令 A=D-L-U,计算矩阵 DL=tril(-A)+D; %令 A=D-L-U,计算矩阵 LU=triu(-A)+D;
10、 %令 A=D-L-U,计算矩阵 UM=inv(D-L)*U; %计算迭代矩阵g=inv(I-inv(D)*L)*(inv(D)*b); %计算迭代格式中的常数项%下面是迭代过程while n A=20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5;b=1;2;10;-1;X=0;0;0;0;nm=100;w=1e-4;n,x=gaussseidel(A,b,X,nm,w)迭代次数为n =5方程组的解为x =0.06870.16450.2352-0.1667n =5x =0.06870.16450.2352-0.166满足精度的根为 x =0.0687 0.1645 0.2352 -0.1667 迭代次数为 5 次五、 实验分析从实验过程可以看到求出满足精度的根,seidel 迭代要比 jacobi 迭代快,这是因为在 jacobi 迭代计算中,计算向量 时是按分量的角标由小到大依次计算的。)1(kx如果 随着 k 的增大不断靠近解 ,可以期盼分量 ,于)1(kx* ikiki xx*)()1(更 靠 近比是 seidel 迭代法的收敛速度比 jacobi 迭代法的收敛速度快,所以迭代次数少。