解线性方程组的列主元素高斯消去法和LU分解法_1.pdf
实验报告 一、实验名称 解线性方程组的列主元素高斯消去法和 LU 分解法 二、实验目的及要求 通过数值实验,用熟悉的算法语言编写程序,从中体会解线性方程组选主元素的必要性和 Lu 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。三、实验内容 解下列两个线性方程组(1)1233.016.031.9911.274.16-1.2310.987-4.819.341xxx (2)123410701832.099999625.9000015151521021xxxx 四、算法描述 1、列主元高斯消去法:记(1)ijijaa (,1,2,i jn)(1)iibb (1,2,in)(1)消元过程 对于 R=1,2,n-1 执行:1)选行号ki,使()()amaxkkki kikk i na 2)交换()kkja与()akki k(j=k,k+1,n)以及()kkb与()kikb所含的数值。3)对于 i=k+1,k+2,,n 计算()()/kkikikkkmaa(1)()()kkkijijikkjaam a j=k+1,k+2,n.(1)(k)()kkiiikkbbm b(2)回代过程()n/nnnnnxba()()()()1()/,1,2,1.nkkkkkkjjkkj kxbaxaknn 在此算法中的()akki k(k=1,2,,n-1)称为第 k 个列主元素,它的数值总要被交换到第 k个主对角线元素的位置上。2、LU 分解法 通过 MATLAB 自有的函数把系数矩阵 A 分解成 A=LU,其中,L 是下三角矩阵,U 是上三角矩阵。这时方程组 Axb 就可化为两个容易求解的三角形方程组 Lyb,Uxy先由 Lyb 解出向量 y,再由 Uxy 解出向量 x,这就是原方程组 Axb 的解向量。五、程序流程图(1)列主元高斯消去法程序流程图如下:Y N 开始 读入矩阵A,b 选主元 ik=k 跳出循环 列主元 计算 对 A 进行上三角变换 回代求 x 结束 输出 x(2)LU 分解法程序流程图如下:Y N Y N 这里我使用了四种框,一种是起止框 ,一种是输入输出框 ,一种是判断框 ,还有一种是处理框 。3、列主元素高斯消去法的 M 文件如下:function a=liezhuGS(A,b)r=length(A1,i)for i=1:r 开始 读入矩阵A 求出值 y(1),y(2)i3 求 求 y 值 求末值 x(n),x(n-1)j3 求 x 值 结束 输出 y 输出 x for j=1:r if A(i,i)A(j,i)for k=i:r c=A(i:k);A(i,k)=A(j,k);A(j,k)=c;end d=b(i);b(i)=b(j);b(j)=d;end end for l=(i+1):r p=A(l,l)/A(i,i);for m=i:r A(l,m)=A(l,m)-p*A(i,m);end b(l)=b(l)-p*b(i);end end AZ=det(A)b for n=r:-1:1 if n=r x(n)=b(n)/A(n,n);else for q=1:(r-n)b(n)=b(n)-x(x+q)*A(n,n+q);end x(n)=b(n)/A(n,n);end end x 4、LU 分解法的 M 文件如下:Function a=Lufenjiefa(A,b)L,U=lu(A)Y=lb X=uy A b Z=det(l)*det(u)5、实验步骤如下:(1)A=3.016.031.991.274.16-1.230.987-4.819.34;b=111 ;分别在命令窗口中运行 LiezhuGs(A,b)和Lufenjiefa(A,b);记录相关数据(2)A=1070132.0999996251512102;b=85.90000151;分别在命令窗口中运 行 LiezhuGs(A,b)和 Lufenjiefa(A,b);记录相关数据(3)A=3.006.031.991.274.161.230.9904.819.34;b=111 ;分别运行 LiezhuGs(A,b),记录列主行交换次序 x,det(A)(4)A=1070132.16251512102;b=85.951;运行 LiezhuGs(A,b),记录相关数据(5)分别对上述 A,b 在命令窗口运行 x=inv(A)*b,y=det(A),记录数据。六、实验结果 实验项目 列主元高斯消去法 LU 分解法 Matlab内部函数法(1)A=3.016.031.990-6.7872798.68746500-0.001495 Tb10.6720930.738072 A=0.030547 T3x101.5926,0.6319,0.4936 L=1000.4219-0.238110.327910 U=3.016.031.990-6.78138.687500-0.0015 A=-0.0305T3x101.5926,0.6319,0.4936 31.5926x100.63190.4936 A=det(A)=-0.030547(2)10-70102.551.5A=006.00023.2999990005.079999 Tb818.3000015.079999 2A=7.620001 10 Tx01 1 1 1000-0.3-0.000000410L=0.51000.20.96-0.799997 1 10-70102.55-1.5U=0060.2999990005.0799989 2A=-7.620001 10 Tx01 1 1 01x11 2A=-7.62000110(3)3.06.031.99A=0-6.7998.683300-0.019952 Tb10.676.735035 A=0.407014 21.195273x100.4714260.368403 21.195273x100.4714260.368403 A=-0.407014(4)10-70102.551.5A=0063.20005.08 Tb818.35.08 A=7.62 Tx01 1 1 Tx01 1 1 A=-7.62 七、实验结果分析 解线性方程组有选主元的必要性。LU 分解法具有简洁、正确的优点,调用L,U内部函数使其解法简便,得出的系数距阵的行列式为精确值。实验(1)系数为改为,改为,得出结果如上所示。实验(1)中系数发生微小改变后,结果变化不大。用 Matlab 的内部函数 inv 计算得出的解向量 x=inv(A)*b,即为上述各方程组的解,与列主元素高斯消去法和 LU 分解法求出的解进行比较可知,它们都是等同的,这说明列主元素消去法具有良好的数值稳定性。