1、N = size(A);n = N(1);(n-1)forj=(i+1):nif(A(i,i)=0)disp(对角元素为0!);%防止对角元素为0return;l= A(j,i);m= A(i,i);A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m;%消元方程b(j)=b(j)-l*b(i)/m;x=SolveUpTriangle(A,b);%通用的求上三角系数矩阵线性方程组的函数XA = A;%消元后的系数矩阵(SolveUpTriangle.m)解上三角方程组源程序:%解上三角方程组function x=SolveUpTriangle(A,b)x(n)=b(n)/A(n,n);
2、for k=n-1:1s=0;i=k+1:s=s+A(k,i)*x(i);x(k)=(b(k)-s)/A(k,k);结果:x1=0,0,0,.0,0,1Tx2=0,0,0,.0,0,0.3820Tx3=0,0,0,.0,0,0.9900Tx4=1,1,1,.1,1,1TCholesky:x2=Cholesky(A,b);(Cholesky.m):Cholesky法源程序%用Cholesky方法解线性方程组function x=Cholesky(A,b);N=size(A);n=N(1);L(1,1)=sqrt(A(1,1);%L为下三角矩阵for j=2:L(j,1)=A(1,j)./L(1,
3、1)for k=2:i=1:k-1s=s+L(k,i);L(k,k)=sqrt(A(k,k)-s);j=(k+1):sum=0;sum=sum+L(j,i)*L(k,i);L(j,k)=(A(j,k)-sum)./L(k,k);%定义L的转置for j=1:k=1:LT(j,k)=L(k,j);y=SolveDownTriangle(L,b);x=SolveUpTriangle(LT,y);解上三角方程组源程序:End解下三角方程组源程序:function x=SolveDownTriangle(A,b)x(1)=b(1)/A(1,1);x1=0,0,0,.0,0,0.9894T;x2=0,0
4、,0,.0,0,0.9899T;LTDT:x3=GJCholesky(A,b);(GJCholesky.m):%用改进Cholesky法求解线性方程组%记LD为U,U为下三角矩阵,LT为单位上三角矩阵function x=GJCholesky(A,b);for k=1:U(k,1)=A(k,1);for i=2:L(k,1)=A(1,k)./U(1,1);endj=k:s=s+U(j,i).*L(j,i);U(j,k)=A(j,k)-s;j=k+1:sum=sum+U(k,i).*L(j,i);L(j,k)=(A(k,j)-sum)./U(k,k);D(k,k)=U(k,k);L(k,k)=1
5、;LT(k,k)=1;LT(k,j)=L(j,k);z(i)=y(i)./D(i,i);x=SolveUpTriangle(LT,z);n=8x1=0,0,0,.0,0,0.9891T;x2=0,0,0,.0,0,0.9889T;n=10x1=0,0,0,.0,0,0.9889T;x2=0,0,0,.0,0,0.9885T;n=12x1=0,0,0,.0,0,0.9886T;n=14x1=0,0,0,.0,0,0.9884T;x2=0,0,0,.0,0,0.9884T;n=16x1=0,0,0,.0,0,0.9881T;x2=0,0,0,.0,0,0.9882T;n=18x1=0,0,0,.0
6、,0,0.9878T;x2=0,0,0,.0,0,0.9879T;n=20x1=0,0,0,.0,0,0.9875T;x2=0,0,0,.0,0,0.9875T;追赶法:x4=zhuigan(A,b);追赶法源程序%用追赶法求解线性方程组function M=zhuigan(A,g)n=length(A);L=eye(n);U=zeros(n);n-1U(i,i+1)=A(i,i+1);U(1,1)=A(1,1);nL(i,i-1)=A(i,i-1)/U(i-1,i-1);U(i,i)=A(i,i)-L(i,i-1)*A(i-1,i);Y(1)=g(1);Y(i)=g(i)-L(i,i-1)*
7、Y(i-1);M(n)=Y(n)/U(n,n);for i=n-1:-1:1M(i)=(Y(i)-A(i,i+1)*M(i+1)/U(i,i);(2)Gauss消去:n=6;j=1:A(i,j)=1/(i+j-1);s=s+A(i,j);b(i)=s;x1,XA=GaussJordanXQ(A,b);Gauss消元法源程序列主元Gauss消去:x2,XA=GaussLineMainXQ(A,b);列主元Gauss消去法源程序%列主元Gauss消去法解线性方程组function x=GaussLinemainXQ(A,b);index=0;main=max(abs(A(1:n,i);%选取列主元
8、k=i:if(abs(A(k,i)=main)index=k;break;%保存主元所在行的指标temp=A(i,1:n);A(i,1:n)=A(index,1:A(index,1:n)=temp;btemp=b(index);b(index)=b(i);b(i)=btemp;%交换主元所在行(A(i,i)=0)对角线元素为0);l=A(j.i);m=A(i,i);n)-A(i,1:n).*l/m;b(j)=b(j)-b(i).*l/m;2考虑矩阵,其中。利用Gauss-Jordan方法求解逆矩阵,并验证逆矩阵与A的乘积是否为单位矩阵Gauss-Jordan方法程序:function x=Ga
9、ussJordan(A)n,n=size(A);while det(A)=0 breaks=1;P=zeros(1,n);while s=n max=abs(A(s,s); big=0; for m=s: if maxabs(A(m,s) max=abs(A(m,s); q=m; big=1; else continue end if big=1 P(s)=q; D=A(s,: A(s,:)=A(q,: A(q,:)=D; for i=1: if i=s for j=1: if j=s A(i,j)=A(i,j)-A(s,j)*A(i,s)/A(s,s); A(i,s)=-A(i,s)/A(s
10、,s); for k=1: if k A(s,k)=A(s,k)*A(s,s);s=s+1;for i=n:(-1): if P(i)=0 p=P(i); d=A(:,i); A(:,i)=A(:,p);,p)=d;A调用程序为:format rata=zeros(n,n);n a(i,j)=i-j;End b=eye(n,n)+aB=GaussJordan(b)B*b结果为:B = 51/106 -39/106 -23/106 -7/106 9/106 25/106 -41/106 75/106 -21/106 -11/106 -1/106 9/106 -27/106 -23/106 87/
11、106 -15/106 -11/106 -7/106 -13/106 -15/106 -17/106 87/106 -21/106 -23/106 1/106 -7/106 -15/106 -23/106 75/106 -39/106 15/106 1/106 -13/106 -27/106 -41/106 51/106 B*bans = 1.0000 0.0000 0 -0.0000 -0.0000 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000 0.00000.0000 0.0000 0.0000 0.0000 0.0000 1.0000是单位矩阵
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1