Matlab 之Gauss 消元法解线性方程组
1. Gauss 消元法
function x=DelGauss(a,b)
%Gauss 消去法
[n,m]=size(a);
nb=length(b);
det=1;%存储行列式值
x=zeros(n,1);
for k=1:n-1
for i=k+1:n
if a(k,k)==0
return
end
m=a(i,k)/a(k,k);
for j=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);
for k=n:-1:1%回代求解
for j=k+1:n
b(k)=b(k)-a(k,j)*x(j);
end
x(k)=b(k)/a(k,k);
end
Example:
>>A=[1.0170-0.00920.0095;-0.00920.99030.0136;0.00950.01360.9898];
>>b=[101]';
>>x=DelGauss(A,b)
x =
0.9739
-0.0047
1.0010
2. 列主元Gauss 消去法:
function x=detGauss(a,b)
%Gauss 列主元消去法
[n,m]=size(a);
nb=length(b);
det=1;%存储行列式值
x=zeros(n,1);
for k=1:n-1
amax=0;%选主元
for i=k:n
if abs(a(i,k))>amax
amax=abs(a(i,k));r=i;
end
end
if amax
return;
end
if r>k%交换两行
for j=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;end
for i=k+1:n%进行消元
m=a(i,k)/a(k,k);
for j=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);
for k=n:-1:1%回代求解
for j=k+1:n
b(k)=b(k)-a(k,j)*x(j);
end
x(k)=b(k)/a(k,k);
end
Example:
>>x=detGauss(A,b)
x =
0.9739
-0.00471.0010
Matlab 之Gauss 消元法解线性方程组
1. Gauss 消元法
function x=DelGauss(a,b)
%Gauss 消去法
[n,m]=size(a);
nb=length(b);
det=1;%存储行列式值
x=zeros(n,1);
for k=1:n-1
for i=k+1:n
if a(k,k)==0
return
end
m=a(i,k)/a(k,k);
for j=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);
for k=n:-1:1%回代求解
for j=k+1:n
b(k)=b(k)-a(k,j)*x(j);
end
x(k)=b(k)/a(k,k);
end
Example:
>>A=[1.0170-0.00920.0095;-0.00920.99030.0136;0.00950.01360.9898];
>>b=[101]';
>>x=DelGauss(A,b)
x =
0.9739
-0.0047
1.0010
2. 列主元Gauss 消去法:
function x=detGauss(a,b)
%Gauss 列主元消去法
[n,m]=size(a);
nb=length(b);
det=1;%存储行列式值
x=zeros(n,1);
for k=1:n-1
amax=0;%选主元
for i=k:n
if abs(a(i,k))>amax
amax=abs(a(i,k));r=i;
end
end
if amax
return;
end
if r>k%交换两行
for j=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;end
for i=k+1:n%进行消元
m=a(i,k)/a(k,k);
for j=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);
for k=n:-1:1%回代求解
for j=k+1:n
b(k)=b(k)-a(k,j)*x(j);
end
x(k)=b(k)/a(k,k);
end
Example:
>>x=detGauss(A,b)
x =
0.9739
-0.00471.0010