高斯约旦求矩阵的逆

 

 
 
  1. #include<iostream>  
  2. using namespace std;  
  3.  
  4. #define n 3  
  5. int main()  
  6. {  
  7.     int i,j,k;  
  8.     double m;  
  9.     double a[n][n],E[n][n];  
  10.       
  11.     //单位矩阵E[n][n]  
  12.     for(i=0;i<n;i++)  
  13.     {  
  14.         for(j=0;j<n;j++)  
  15.         {  
  16.             if(i==j)  
  17.                 E[i][j]=1;  
  18.             else 
  19.                 E[i][j]=0;  
  20.         }  
  21.     }  
  22.       
  23.     //输入矩阵a[n][n]  
  24.     cout<<"输入矩阵:"<<endl;  
  25.     for(i=0;i<n;i++)  
  26.     {  
  27.         for(j=0;j<n;j++)  
  28.         {  
  29.             cin>>a[i][j];  
  30.         }     
  31.     }  
  32.     //上三角变换  
  33.     for(k=0;k<n-1;k++)  
  34.     {  
  35.         for(i=k+1;i<n;i++)  
  36.         {  
  37.             m=a[i][k]/a[k][k];  
  38.             for(j=0;j<n;j++)  
  39.             {  
  40.                 a[i][j]=a[i][j]-m*a[k][j];  
  41.                 E[i][j]=E[i][j]-m*E[k][j];  
  42.             }  
  43.         }  
  44.     }  
  45.     //下三角变换  
  46.     for(k=n-1;k>0;k--)  
  47.     {  
  48.         for(i=k-1;i>=0;i--)  
  49.         {  
  50.             m=a[i][k]/a[k][k];  
  51.             for(j=0;j<n;j++)  
  52.             {  
  53.                 a[i][j]=a[i][j]-m*a[k][j];  
  54.                 E[i][j]=E[i][j]-m*E[k][j];  
  55.             }  
  56.         }  
  57.     }  
  58.     //单位矩阵……  
  59.     for(i=0;i<n;i++)  
  60.     {  
  61.         for(j=0;j<n;j++)  
  62.         {  
  63.             E[i][j]=E[i][j]/a[i][i];  
  64.         }  
  65.     }  
  66.     //输出矩阵的逆  
  67.     cout<<"矩阵的逆是:"<<endl;  
  68.     for(i=0;i<n;i++)  
  69.     {  
  70.         for(j=0,k=0;j<n;j++)  
  71.         {  
  72.             cout<<E[i][j]<<"\t";k++;  
  73.             if(k==n)  
  74.                 cout<<endl;  
  75.         }  
  76.     }  
  77. }  
  78.  
  79.  

 

点赞