程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 矩陣求逆算法及程序實現(C++)

矩陣求逆算法及程序實現(C++)

編輯:C++入門知識

矩陣求逆算法及程序實現(C++)


 在做課題時,遇到了求多項式問題,利用了求逆方法。矩陣求逆一般使用簡單的算法,還有快速算法 如全選主元高斯-約旦消元法,但本文程序主要寫了簡單的矩陣求逆算法定義法之伴隨矩陣求逆公式如下,其中A可逆:                   A^{-1}=\frac{A^*}{|A|},其中A^*是A的伴隨矩陣。。     1.給定一個方陣,非奇異(不是也可,程序有考慮);     2.由矩陣得到其行列式,求其值如|A|;     3.求其伴隨矩陣A^*;     4.得到其逆矩陣。   主要函數如下:   復制代碼  1 //得到給定矩陣src的逆矩陣保存到des中。  2 bool GetMatrixInverse(double src[N][N],int n,double des[N][N])  3 {  4     double flag=getA(src,n);  5     double t[N][N];  6     if(flag==0)  7     {  8         return false;  9     } 10     else 11     { 12         getAStart(src,n,t); 13         for(int i=0;i<n;i++) 14         { 15             for(int j=0;j<n;j++) 16             { 17                 des[i][j]=t[i][j]/flag; 18             } 19  20         } 21     } 22  23  24     return true; 25  26 } 復制代碼 計算|A|:   復制代碼  1 //按第一行展開計算|A|  2 double getA(double arcs[N][N],int n)  3 {  4     if(n==1)  5     {  6         return arcs[0][0];  7     }  8     double ans = 0;  9     double temp[N][N]={0.0}; 10     int i,j,k; 11     for(i=0;i<n;i++) 12     { 13         for(j=0;j<n-1;j++) 14         { 15             for(k=0;k<n-1;k++) 16             { 17                 temp[j][k] = arcs[j+1][(k>=i)?k+1:k]; 18  19             } 20         } 21         double t = getA(temp,n-1); 22         if(i%2==0) 23         { 24             ans += arcs[0][i]*t; 25         } 26         else 27         { 28             ans -=  arcs[0][i]*t; 29         } 30     } 31     return ans; 32 } 復制代碼 計算伴隨矩陣:   復制代碼  1 //計算每一行每一列的每個元素所對應的余子式,組成A*  2 void  getAStart(double arcs[N][N],int n,double ans[N][N])  3 {  4     if(n==1)  5     {  6         ans[0][0] = 1;  7         return;  8     }  9     int i,j,k,t; 10     double temp[N][N]; 11     for(i=0;i<n;i++) 12     { 13         for(j=0;j<n;j++) 14         { 15             for(k=0;k<n-1;k++) 16             { 17                 for(t=0;t<n-1;t++) 18                 { 19                     temp[k][t] = arcs[k>=i?k+1:k][t>=j?t+1:t]; 20                 } 21             } 22  23  24             ans[j][i]  =  getA(temp,n-1); 25             if((i+j)%2 == 1) 26             { 27                 ans[j][i] = - ans[j][i]; 28             } 29         } 30     } 31 } 復制代碼   這三個函數組成了求逆矩陣的步驟,筆者調用並成功運用,無錯,在此共勉。如有問題,請留言。謝謝     另有其他矩陣求逆好算法及代碼請大家共享。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved