矩阵求逆算法及程序实现(C++)
2024-10-12 01:05:52
在做课题时,遇到了求多项式问题,利用了求逆方法。矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中A可逆:
,其中是的伴随矩阵。。
1.给定一个方阵,非奇异(不是也可,程序有考虑);
2.由矩阵得到其行列式,求其值如|A|;
3.求其伴随矩阵;
4.得到其逆矩阵。
主要函数如下:
//得到给定矩阵src的逆矩阵保存到des中。
bool GetMatrixInverse(double src[N][N],int n,double des[N][N])
{
double flag=getA(src,n);
double t[N][N];
if(flag==)
{
return false;
}
else
{
getAStart(src,n,t);
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
des[i][j]=t[i][j]/flag;
} }
} return true; }
计算|A|:
//按第一行展开计算|A|
double getA(double arcs[N][N],int n)
{
if(n==)
{
return arcs[][];
}
double ans = ;
double temp[N][N]={0.0};
int i,j,k;
for(i=;i<n;i++)
{
for(j=;j<n-;j++)
{
for(k=;k<n-;k++)
{
temp[j][k] = arcs[j+][(k>=i)?k+:k]; }
}
double t = getA(temp,n-);
if(i%==)
{
ans += arcs[][i]*t;
}
else
{
ans -= arcs[][i]*t;
}
}
return ans;
}
计算伴随矩阵:
//计算每一行每一列的每个元素所对应的余子式,组成A*
void getAStart(double arcs[N][N],int n,double ans[N][N])
{
if(n==)
{
ans[][] = ;
return;
}
int i,j,k,t;
double temp[N][N];
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
for(k=;k<n-;k++)
{
for(t=;t<n-;t++)
{
temp[k][t] = arcs[k>=i?k+:k][t>=j?t+:t];
}
} ans[j][i] = getA(temp,n-);
if((i+j)% == )
{
ans[j][i] = - ans[j][i];
}
}
}
}
这三个函数组成了求逆矩阵的步骤,笔者调用并成功运用,无错,在此共勉。如有问题,请留言。谢谢
另有其他矩阵求逆好算法及代码请大家共享。
最新文章
- nginx+lua
- python 中的高级函数map()
- Windows进程通信 -- 共享内存(1)
- [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同
- 利用nginx泛域名解析配置二级域名和多域名
- iis 5.1 连接 sql 2005
- Android开发_后台任务task管理_allowTaskReparenting alwaysRetainTaskState clearTaskOn
- xml--小结②XML的基本语法
- 关于java中强制转换
- Python的lambda
- 二阶环路滤波器的matlab 设计
- Varnish http缓存服务器
- centos7常用命令
- Laravel 5.2+ 使用url()全局函数返回前一个页面的地址
- Date Calendar
- SCLAlertView-Swift
- 1483: [HNOI2009]梦幻布丁
- 容器启动报iptables错误
- OSX:不同OSX版本号的标记可能不兼容-续
- InnoDB索引概述,二分查找法,平衡二叉树
热门文章
- a标签加入单击事件 屏蔽href跳转页面
- 记录git多人协作开发常用的流程,供新手参考
- centos7 ssh 设置key认证
- MS SQL Server2014链接MS SQL Server 2000
- Storm系列(三):创建Maven项目打包提交wordcount到Storm集群
- oracle学习笔记系列------oracle操作例子的专用表
- ReactNative之坑爹的在线安装
- A coroutine example: Streaming XML parsing using xml_parser
- Redhat Linux 修改主机名(HOSTNAME)
- 创建Windows Azure内部负载均衡器