MATLAB 列主元消去法 解方程组

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

你可能感兴趣的:(MATLAB)