逆矩陣算法三

# include "stdio.h" 
# define M  3 




void main (  ) 


 { 
  float MAT[M][2*M]; 
  float MAT1[M][M]; 
  float t; 
  int i,j,k,l; 


/***********************************************/ 


   /*對矩陣進行初始化*/ 
  for(i=0;i<M;i++) 
    for(j=0;j<2*M;j++) 
      MAT1[i][j]='\0'; 
  
  for(i=0;i<M;i++) 
     for(j=0;j<2*M;j++) 
     MAT[i][j]='\0'; 


    /*對MAT1矩陣賦初值  */ 
  for(i=0;i<M;i++) 
    for (j=0;j<M;j++) 
      scanf("%f",&MAT1[i][j]); 




  /*打印目標矩陣?*/ 
  printf("原矩陣爲:\n"); 
  for (i=0;i<M;i++) 
    { 
     for (j=0;j<M;j++)   
printf("%5.2f",MAT1[i][j]); 
     printf("\n"); 
     } 


/********************************************/ 


    /*對MAT1矩陣進行擴展,MAT1矩陣添加單位陣,由M*M變成2M*2M矩陣  */ 
  for(i=0;i<M;i++) 
    for(j=0;j<2*M;j++) 
      if (j<M)  MAT[i][j]=MAT1[i][j]; 
     else if (j==M+i)  MAT[i][j]=1; 
   else MAT[i][j]=0; 




    /*對M矩陣進行變換,使得前半部分矩陣成爲單位陣,則  */ 
    /*後半部分矩陣即爲所求矩陣逆陣  */ 
  for(i=0;i<M;i++) 
   { 
    /*對第i行進行歸一化    */ 
     for (j=0;j<2*M;j++) 
     for(k=i+1;k<M;k++) 
MAT[i][j]=MAT[i][j]+MAT[k][j]; 
     t=MAT[i][i]; 
     for(j=i;j<2*M;j++) 
MAT[i][j]=MAT[i][j]/t; 


     /*對矩陣進行行變換,使得第i 列只有一個元素不爲零,且爲1*/ 
     for(k=0;k<M;k++) 
if(k!=i) 
  { 
   t=MAT[i][k]; 
   for (l=i;l<2*M;l++) 
   MAT[k][l]=MAT[k][l]-MAT[i][l]*t; 
  } 
     } 




 /*將後半部分矩陣即所求矩陣逆陣存入MAT2矩陣。*/ 
  for(i=0;i<M;i++) 
   { 
  
    for(j=0;j<M;j++) 
      MAT1[i][j]=MAT[i][j+M]; 
    printf("\n"); 
      
   } 




/*********************************************/ 


   /*輸出所求的逆陣*/ 
   printf("逆陣爲:\n"); 
   for(i=0;i<M;i++) 
   { 
    
     for(j=0;j<M;j++) 
     printf("%5.2f",MAT1[i][j]); 
     printf("\n"); 
   } 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章