您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 解线性方程组的列主元素高斯消去法和LU分解法
实验报告一、实验名称解线性方程组的列主元素高斯消去法和LU分解法二、实验目的及要求通过数值实验,用熟悉的算法语言编写程序,从中体会解线性方程组选主元素的必要性和Lu分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。三、实验内容解下列两个线性方程组(1)1233.016.031.9911.274.16-1.2310.987-4.819.341xxx(2)123410701832.099999625.9000015151521021xxxx四、算法描述1、列主元高斯消去法:记(1)ijijaa(,1,2,ijn)(1)iibb(1,2,in)(1)消元过程对于R=1,2,……,n-1执行:1)选行号ki,使()()amaxkkkikikkina2)交换()kkja与()akkik(j=k,k+1,……n)以及()kkb与()kikb所含的数值。3)对于i=k+1,k+2,……,n计算()()/kkikikkkmaa(1)()()kkkijijikkjaamaj=k+1,k+2,……n.(1)(k)()kkiiikkbbmb(2)回代过程()n/nnnnnxba()()()()1()/,1,2,,1.nkkkkkkjjkkjkxbaxaknn在此算法中的()akkik(k=1,2,……,n-1)称为第k个列主元素,它的数值总要被交换到第k个主对角线元素的位置上。2、LU分解法通过MATLAB自有的函数把系数矩阵A分解成A=LU,其中,L是下三角矩阵,U是上三角矩阵。这时方程组Ax=b就可化为两个容易求解的三角形方程组Ly=b,Ux=y.先由Ly=b解出向量y,再由Ux=y解出向量x,这就是原方程组Ax=b的解向量。五、程序流程图(1)列主元高斯消去法程序流程图如下:YN开始读入矩阵A,b选主元ik=k?跳出循环列主元计算错误!未找到引用源。对A进行上三角变换回代求x结束输出x(2)LU分解法程序流程图如下:YNYN这里我使用了四种框,一种是起止框,一种是输入输出框,一种是判断框,还有一种是处理框。3、列主元素高斯消去法的M文件如下:functiona=liezhuGS(A,b)r=length(A[1],i)fori=1:r开始读入矩阵A求出值y(1),y(2)i3?求求y值求末值x(n),x(n-1)j3?求x值结束输出y输出xforj=1:rifA(i,i)A(j,i)fork=i:rc=A(i:k);A(i,k)=A(j,k);A(j,k)=c;endd=b(i);b(i)=b(j);b(j)=d;endendforl=(i+1):rp=A(l,l)/A(i,i);form=i:rA(l,m)=A(l,m)-p*A(i,m);endb(l)=b(l)-p*b(i);endendA……Z=det(A)…bforn=r:-1:1ifn==rx(n)=b(n)/A(n,n);elseforq=1:(r-n)b(n)=b(n)-x(x+q)*A(n,n+q);endx(n)=b(n)/A(n,n);endendx4、LU分解法的M文件如下:Functiona=Lufenjiefa(A,b)[L,U]=lu(A)Y=l\bX=u\yAbZ=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.001495Tb10.6720930.738072A=0.030547T3x101.5926,0.6319,0.4936L=1000.4219-0.238110.327910U=3.016.031.990-6.78138.687500-0.0015A=-0.0305T3x101.5926,0.6319,0.493631.5926x100.63190.4936A=det(A)=-0.030547(2)10-70102.551.5A=006.00023.2999990005.079999Tb818.3000015.0799992A=7.62000110Tx01111000-0.3-0.000000410L=0.51000.20.96-0.799997110-70102.55-1.5U=0060.2999990005.07999892A=-7.62000110Tx011101x112A=-7.62000110(3)3.06.031.99A=0-6.7998.683300-0.019952Tb10.676.735035A=0.40701421.195273x100.4714260.36840321.195273x100.4714260.368403A=-0.407014(4)10-70102.551.5A=0063.20005.08Tb818.35.08A=7.62Tx0111Tx0111A=-7.62七、实验结果分析解线性方程组有选主元的必要性。LU分解法具有简洁、正确的优点,调用[L,U]内部函数使其解法简便,得出的系数距阵的行列式为精确值。实验(1)系数为3.01改为3.00,0.978改为0.990,得出结果如上所示。实验(1)中系数发生微小改变后,结果变化不大。用Matlab的内部函数inv计算得出的解向量x=inv(A)*b,即为上述各方程组的解,与列主元素高斯消去法和LU分解法求出的解进行比较可知,它们都是等同的,这说明列主元素消去法具有良好的数值稳定性。
本文标题:解线性方程组的列主元素高斯消去法和LU分解法
链接地址:https://www.777doc.com/doc-5558025 .html