clear
% creat all input variable
disp('(1)中为A1 (2)中为A2');
A1 = [3.01,6.03,1.99;
1.27,4.16,-1.23;
0.987,-4.81,9.34];
A2 = A1;
A2(1,1) = 3.00;
A2(3,1) = 0.990;
b = [1,1,1]';
% display
disp('MAT A1 is ');
disp(A1);
disp('MAT A2 is ');
disp(A2);
disp('MAT b is ');
disp(b);
disp('detA1 is ');
disp(det(A1));
disp('detA2 is ');
disp(det(A2));
disp('cond(A1,1) is ');
disp(cond(A1,1));
disp('cond(A1,2) is ');
disp(cond(A1,2));
disp('cond(A1,inf) is ');
disp(cond(A1,inf));
%列主元消去法
disp('在(1)中的情况:');
A = A1;
B = [A,b];
n = length(b);
rankA=rank(A);
rankB=rank(B);
if rankB-rankA>0
disp('此方程组无解.\n')
end
if rankA==rankB
if rankA==n
fprintf('rankA=rankB=%d,有唯一解.\n',n)
X=zeros(n,1);
for p=1:n-1
t=find(abs(B(p:end,p))==max(abs(B(p:end,p))))+p-1;
if abs(B(t,p))~=abs(B(p,p))
l=B(t,:);
B(t,:)=B(p,:);
B(p,:)=l;
end %列主元判断
for k=p+1:n
m= B(k,p)/ B(p,p);
B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);
end
end
%把方程组系数矩阵A化为同解的上三角矩阵
b=B(1:n,n+1);
A=B(1:n,1:n);
X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
%从xn至x1逐个求解上三角方程组
else
disp('rankA=rankB0
disp('此方程组无解.\n')
end
if rankA==rankB
if rankA==n
fprintf('rankA=rankB=%d,有唯一解.\n',n)
X=zeros(n,1);
for p=1:n-1
t=find(abs(B(p:end,p))==max(abs(B(p:end,p))))+p-1;
if abs(B(t,p))~=abs(B(p,p))
l=B(t,:);
B(t,:)=B(p,:);
B(p,:)=l;
end %列主元判断
for k=p+1:n
m= B(k,p)/ B(p,p);
B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);
end
end
%把方程组系数矩阵A化为同解的上三角矩阵
b=B(1:n,n+1);
A=B(1:n,1:n);
X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
%从xn至x1逐个求解上三角方程组
else
disp('rankA=rankB
结果
>> Untitled
(1)中为A1 (2)中为A2
MAT A1 is
3.0100 6.0300 1.9900
1.2700 4.1600 -1.2300
0.9870 -4.8100 9.3400
MAT A2 is
3.0000 6.0300 1.9900
1.2700 4.1600 -1.2300
0.9900 -4.8100 9.3400
MAT b is
1
1
1
detA1 is
-0.0305
detA2 is
-0.4070
cond(A1,1) is
5.5228e+04
cond(A1,2) is
3.0697e+04
cond(A1,inf) is
5.6751e+04
在(1)中的情况:
rankA=rankB=3,有唯一解.
方程组的解为:
1.0e+03 *
1.5926
-0.6319
-0.4936
在(2)中的情况:
rankA=rankB=3,有唯一解.
方程组的解为:
56.3415
-22.1547
-17.3024