设为首页 加入收藏

TOP

矩阵求逆算法及程序实现(C++)
2015-07-20 17:35:58 来源: 作者: 【 】 浏览:1
Tags:矩阵 算法 程序 实现
 在做课题时,遇到了求多项式问题,利用了求逆方法。矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中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
14 ? ? ? ? {
15 ? ? ? ? ? ? for(int j=0;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
12 ? ? {
13 ? ? ? ? for(j=0;j
14 ? ? ? ? {
15 ? ? ? ? ? ? for(k=0;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
12 ? ? {
13 ? ? ? ? for(j=0;j
14 ? ? ? ? {
15 ? ? ? ? ? ? for(k=0;k
16 ? ? ? ? ? ? {
17 ? ? ? ? ? ? ? ? for(t=0;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 }
复制代码
  这三个函数组成了求逆矩阵的步骤,笔者调用并成功运用,无错,在此共勉。如有问题,请留言。谢谢
?
  另有其他矩阵求逆好算法及代码请大家共享。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU - 5045 Contest(DP+状压) 下一篇hdu 1220 Cube (组合数学)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)