码迷,mamicode.com
首页 > 编程语言 > 详细

矩阵求逆算法及程序实现(C++)

时间:2014-09-29 00:25:46      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   使用   ar   for   sp   

  在做课题时,遇到了求多项式问题,利用了求逆方法。矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中A可逆:

                bubuko.com,布布扣,其中bubuko.com,布布扣bubuko.com,布布扣伴随矩阵。。

  1.给定一个方阵,非奇异(不是也可,程序有考虑);

  2.由矩阵得到其行列式,求其值如|A|;

  3.求其伴随矩阵bubuko.com,布布扣

  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 }

  这三个函数组成了求逆矩阵的步骤,笔者调用并成功运用,无错,在此共勉。如有问题,请留言。谢谢

  另有其他矩阵求逆好算法及代码请大家共享。

 

矩阵求逆算法及程序实现(C++)

标签:des   style   blog   http   color   使用   ar   for   sp   

原文地址:http://www.cnblogs.com/tianya2543/p/3999118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!