您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > gauss在matlab的程序编写
1.高斯消元法function[x]=mgauss(A,b,flag)ticifnargin3,flag=0;endn=length(b);fork=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);ifflag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);fork=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endtoc2.程序验证n=6;r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);x=mgauss(a,b)Elapsedtimeis0.000000seconds.x=1.00001.00001.00001.00001.00001.0000n=100;r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);x=mgauss(a,b)Elapsedtimeis0.015000seconds.x=1.00001.00001.00001.00001.00001.00001.0000function[RA,RB,x]=gaus(A,b,flag)ticifnargin3,flag=0;endB=[Ab];n=length(b);RA=rank(A);RB=rank(B);ifRB-RA0disp('请注意:因为RA~=RB,所以此方程组无解.')returnendifRA==RBifRA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')fork=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);ifflag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);fork=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endelsedisp('请注意:因为RA=RBn,所以此方程组有无穷多解.')endendtoc程序验证n=100;r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);[ra,rb,x]=gaus(a,b)请注意:因为RA=RB=n,所以此方程组有唯一解.Elapsedtimeis0.032000seconds.ra=100rb=100x=1.00001.00001.00001.00001.00001.0000图形2.LU分解程序function[l,u,x]=mlu(a,b)ticn=length(b);l=zeros(n);u=zeros(n);x=zeros(n,1);y=zeros(n,1);fork=1:nu(k,k:n)=a(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k:n,k)=(a(k:n,k)-l(k:n,1:k-1)*u(1:k-1,k))/u(k,k);l(k,k)=1;endfork=1:ny(k)=b(k)-l(k,1:k-1)*y(1:k-1);endfork=n:-1:1x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);endtoc验证n=6,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n=6r=0.84620.68130.30460.15090.49660.34200.52520.37950.18970.69790.89980.28970.20260.83180.19340.37840.82160.34120.67210.50280.68220.86000.64490.53410.83810.70950.30280.85370.81800.72710.01960.42890.54170.59360.66020.3093Elapsedtimeis0.000000seconds.l=1.0000000000.23031.000000000.13670.12461.00000000.22910.19770.14381.0000000.26760.26220.14410.21221.000000.18140.15400.09260.12880.11041.0000u=8.18751.88541.11951.87602.19121.485107.80600.97281.54302.04641.2018006.74240.96940.97150.62430007.59941.61230.978900007.64720.8441000006.4954x=1.00001.00001.00001.00001.00001.0000n=90,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n=90r=Columns1through90.83850.01640.41990.27310.85180.68590.86860.51520.19300.56810.19010.75370.62620.75950.67730.62640.60590.90960.37040.58690.79390.536x=1.00001.00001.00001.00001.0000经验证是正确的,太长了只节了部分。
本文标题:gauss在matlab的程序编写
链接地址:https://www.777doc.com/doc-3573963 .html