1、运用matlab编写一个.m文件,要求用列主元消去法求解方程组(实现PA=LU):要求输出以下内容:(1) 计算解x;(2) L,U;(3) 整形数组IP(i)(i=1,2,n-1)(记录主行信息)3 算法原理与流程图(1) 算法原理设有线性方程组Ax=b,其中设A为非奇异矩阵。方程组的增广矩阵为第1步(k=1):首先在A的第一列中选取绝对值最大的元素,作为第一步的主元素: ,然后交换(A,b)的第1行与第i1行元素,再进行消元计算。设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组第k步计算如下:对于k=1,2,n-1(1)按列选主元:即确定
2、ik使 (2)如果,则A为非奇异矩阵,停止计算。(3)如果ikk,则交换A,b第ik行与第k行元素。(4)消元计算消元乘数满足:(5)回代求解计算解在常数项b(n)内得到。(2) 流程图见图1(3) 4 程序代码及注释%列主元消去法解方程组Ax=b,实现PA=LUfunction x,L,U,IP,P =gauss(A,b)%x为方程组的解,IP用来记录行信息%每次选列主元时,将A的第k行与第IP(k)行进行交换n=length(b);p,q=size(A);%当输入的系数矩阵不为方阵,或方阵维数与b不符时,报错if p=q|p=n fprintf(Error! Please input ag
3、ain!);end%为提高运行速度,给IP,P,L,U赋初值IP=zeros(1,n-1);L=zeros(n,n);U=zeros(n,n);P=eye(n);x=zeros(1,n);det=1.0;%按列选主元,并进行行交换,记录行信息for k=1:n-1 IP(k)=k; for m=k+1:n if abs(A(m,k)abs(A(k,k) IP(k)=m; end I=eye(n); if IP(k)=k for i=1: p(i)=I(k,i); I(k,i)=I(IP(k),i); I(IP(k),i)=p(i); A=I*A; b=I*b; b=b%进行消元计算 for i
4、=k+1:n A(i,k)=A(i,k)/A(k,k); b(i)=b(i)-A(i,k)*b(k); for j=k+1: A(i,j)=A(i,j)-A(i,k)*A(k,j); det=det*A(k,k); P=I*P;%回代求解x(n)=b(n)/A(n,n);for i=n-1:-1:1 sum=0.0; for j=i+1: sum=sum+A(i,j)*x(j); x(i)=(b(i)-sum)/A(i,i);det=det*A(n,n);if det=0 The equations have no unique solution!%输出PA=LU中的L,U的信息for i=1
5、: for j=1: if i A=1 23 45 6; b=3 7 11; x L U IP P=gauss(A,b)1 2 30 0 04 5 6;x = NaN -Inf InfL = 1.0000 0 0 0.2500 1.0000 0 0 0 1.0000U = 4.0000 5.0000 6.0000 0 0.7500 1.5000 0 0 0IP = 3 3P = 1 0 0 0 0 1 0 1 02、计算过程(1)首先输入系数矩阵A和矩阵b1 1 1 1 1 1 12 1 1 1 1 1 13 2 1 1 1 1 14 3 2 1 1 1 15 4 3 2 1 1 16 5 4
6、 3 2 1 17 6 5 4 3 2 1; b=7 8 10 13 17 22 28;(2)输出结果 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0 0 0 0 0 0 0.2857 1.0000 0 0 0 0 0 0.4286 0.8000 1.0000 0 0 0 0 0.5714 0.6000 0.7500 1.0000 0 0 0 0.7143 0.4000 0.5000 0.6667 1.0000 0 0 0.1429 -0.2000 -0.2500 -0.3333 -0.5000 1.0000 0 0.8571
7、 0.2000 0.2500 0.3333 0.5000 -1.0000 1.0000 7.0000 6.0000 5.0000 4.0000 3.0000 2.0000 1.0000 0 -0.7143 -0.4286 -0.1429 0.1429 0.4286 0.7143 0 0 -0.8000 -0.6000 -0.4000 -0.2000 0.0000 0 0 0 -0.7500 -0.5000 -0.2500 0.0000 0 0 0 0 -0.6667 -0.3333 -0.0000 0 0 0 0 0 0.5000 1.0000 0 0 0 0 0 0 1.0000 7 2 3
8、 4 5 7 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 06讨论与结论1、 时间复杂度: tic;x L U IP P=gauss(A,b);tocElapsed time is 0.000856 seconds.2、 程序优化初次编程时,没有考虑到给一个变量赋初值的情况。虽然在MATLAB中变量不赋初值是完全允许的,但是由于一个变量中含有多个元素时,每次改变该数组的长度,便会增加计算机时间。另外,给程序加上一定的判断条件及报错信息,一定程度上有程序优化的作用。因此,本程序中的以下程序段都起到了程序优化的作用。参考文献1 易大义,沈云宝,李有法. 计算方法(第2版),浙江大学出版社. p.29-53.2 张琨 高思超 毕靖 编著 MATLAB2010从入门到精通 电子工业出版社
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2