您的当前位置:首页正文

MATLAB之GAUSS消元法解线性方程组

来源:化拓教育网
Matlab之Gauss消元法解线性方程组

1.Gauss消元法

functionx=DelGauss(a,b)%Gauss消去法[n,m]=size(a);nb=length(b);

det=1;%存储行列式值x=zeros(n,1);fork=1:n-1

fori=k+1:n

ifa(k,k)==0

returnendm=a(i,k)/a(k,k);forj=k+1:n

a(i,j)=a(i,j)-m*a(k,j);end

b(i)=b(i)-m*b(k);end

det=det*a(k,k);%计算行列式end

det=det*a(n,n);

fork=n:-1:1%回代求解

forj=k+1:n

b(k)=b(k)-a(k,j)*x(j);end

x(k)=b(k)/a(k,k);

endExample:

>>A=[1.0170-0.00920.0095;-0.00920.99030.0136;0.00950.01360.9898];>>b=[101]';>>x=DelGauss(A,b)x=

0.9739-0.00471.0010

2.列主元Gauss消去法:functionx=detGauss(a,b)%Gauss列主元消去法[n,m]=size(a);nb=length(b);

det=1;%存储行列式值x=zeros(n,1);fork=1:n-1

amax=0;%选主元fori=k:n

ifabs(a(i,k))>amax

amax=abs(a(i,k));r=i;endend

ifamax<1e-10return;

end

ifr>k%交换两行

forj=k:n

z=a(k,j);a(k,j)=a(r,j);a(r,j)=z;end

z=b(k);b(k)=b(r);b(r)=z;det=-det;endfori=k+1:n

%进行消元

m=a(i,k)/a(k,k);forj=k+1:n

a(i,j)=a(i,j)-m*a(k,j);end

b(i)=b(i)-m*b(k);end

det=det*a(k,k);end

det=det*a(n,n);

fork=n:-1:1%回代求解

forj=k+1:n

b(k)=b(k)-a(k,j)*x(j);end

x(k)=b(k)/a(k,k);endExample:

>>x=detGauss(A,b)x=

0.9739

-0.00471.0010

因篇幅问题不能全部显示,请点此查看更多更全内容