计算矩阵的逆源码(使用伴随矩阵,3×3的矩阵)
目的:最近写C++代码,遇到求矩阵的逆。Eigen库有方法计算。但是因为再求导过程中,需要求逆的具体方式。因此自己实现了求矩阵的逆。具体代码如下,对于公式部分后续再补,更新。
//更新公式部分
维基百科的定义:
在线性代数中,一个方形矩阵的伴随矩阵(英语:adjugate matrix)是一个类似于逆矩阵的概念。如果矩阵可逆,那么它的逆矩阵和它的伴随矩阵之间只差一个系数。然而,伴随矩阵对不可逆的矩阵也有定义,并且不需要用到除法。
假设A\bm{A}A的伴随矩阵记作adj(A)adj(\bm{A})adj(A)或者A∗\bm{A}^*A∗
因为在项目中通常需要3×33\times 33×3的矩阵,它可以定义为:
A=[a11a12a13a21a22a23a31a32a33]\bm{A}=\begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix} A=⎣⎡a11a21a31a12a22a32a13a23a33⎦⎤
它的伴随矩阵是:
adj(A)=[+∣a22a23a32a33∣−∣a12a13a32a33∣+∣a12a13a22a23∣−∣a21a23a31a33∣+∣a11a13a31a33∣−∣a11a13a21a23∣+∣a21a22a31a32∣−∣a11a12a31a32∣+∣a11a12a21a22∣]adj(\bm{A})=\begin{bmatrix} +\begin{vmatrix} a_{22} & a_{23} \\ a_{32} & a_{33} \end{vmatrix} & -\begin{vmatrix} a_{12} & a_{13} \\ a_{32} & a_{33} \end{vmatrix} & +\begin{vmatrix} a_{12} & a_{13} \\ a_{22} & a_{23} \end{vmatrix} \\ \\ -\begin{vmatrix} a_{21} & a_{23} \\ a_{31} & a_{33} \end{vmatrix} & +\begin{vmatrix} a_{11} & a_{13} \\ a_{31} & a_{33} \end{vmatrix} & -\begin{vmatrix} a_{11} & a_{13} \\ a_{21} & a_{23} \end{vmatrix} \\ \\ +\begin{vmatrix} a_{21} & a_{22} \\ a_{31} & a_{32} \end{vmatrix} & -\begin{vmatrix} a_{11} & a_{12} \\ a_{31} & a_{32} \end{vmatrix} & +\begin{vmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{vmatrix} \end{bmatrix} adj(A)=⎣⎡+∣∣a22a32a23a33∣∣−∣∣a21a31a23a33∣∣+∣∣a21a31a22a32∣∣−∣∣a12a32a13a33∣∣+∣∣a11a31a13a33∣∣−∣∣a11a31a12a32∣∣+∣∣a12a22a13a23∣∣−∣∣a11a21a13a23∣∣+∣∣a11a21a12a22∣∣⎦⎤
其中
∣aimainajmajn∣=det[aimainajmajn]=det∣aimainajmajn∣\begin{vmatrix} a_{im} & a_{in} \\ a_{jm} & a_{jn} \end{vmatrix} =det \begin{bmatrix} a_{im} & a_{in} \\ a_{jm} & a_{jn} \end{bmatrix}=det \begin{vmatrix} a_{im} & a_{in} \\ a_{jm} & a_{jn} \end{vmatrix} ∣∣aimajmainajn∣∣=det[aimajmainajn]=det∣∣aimajmainajn∣∣
从上面公式可以看出,伴随矩阵是余因子矩阵的转置。
伴随矩阵可以用来计算矩阵的逆:
A−1=adj(A)det(A)=A∗∣A∣\bm{A}^{-1}=\cfrac{adj(\bm{A})}{det(\bm{A})}=\cfrac{\bm{A}^*}{|\bm{A}|} A−1=det(A)adj(A)=∣A∣A∗
其中A∗\bm{A}^*A∗为伴随矩阵;∣A∣|\bm{A}|∣A∣为矩阵的行列式。
其中行列式计算可以参考我的blog
https://blog.csdn.net/weixin_43851636/article/details/125999210?spm=1001.2014.3001.5502
下面是通过伴随矩阵计算矩阵的逆的C++代码,它和Eigen库中的求逆一样。
c++代码
#include<Eigen/Eigen>
#include<iostream>
#include<vector>
#include<string>/*
m=[n1,n2,n3]
*/
Eigen::Matrix3f ConstructMatrix3fFromVectors(Eigen::Vector3f& n1, Eigen::Vector3f& n2, Eigen::Vector3f& n3)
{Eigen::Matrix3f m;m.block<1, 3>(0, 0) = n1;m.block<1, 3>(1, 0) = n2;m.block<1, 3>(2, 0) = n3;return m;
}Eigen::Matrix3f ConstructAdjugateMatrix3f(Eigen::Matrix3f& m)
{Eigen::Matrix3f adju_m;adju_m(0, 0) = m(1, 1)*m(2, 2) - m(2, 1)*m(1, 2);adju_m(0, 1) = -(m(0, 1)*m(2, 2) - m(2, 1)*m(0, 2));adju_m(0, 2) = m(0, 1)*m(1, 2) - m(1, 1)*m(0, 2);adju_m(1, 0) = -(m(1, 0)*m(2, 2) - m(2, 0)*m(1, 2));adju_m(1, 1) = m(0, 0)*m(2, 2) - m(2, 0)*m(0, 2);adju_m(1, 2) = -(m(0, 0)*m(1, 2) - m(1, 0)*m(0, 2));adju_m(2, 0) = m(1, 0)*m(2, 1) - m(2, 0)*m(1, 1);adju_m(2, 1) = -(m(0, 0)*m(2, 1) - m(2, 0)*m(0, 1));adju_m(2, 2) = m(0, 0)*m(1, 1) - m(1, 0)*m(0, 1);return adju_m;
}Eigen::Vector3f ComputeKVector(Eigen::Matrix3f& adjm, Eigen::Vector3f& b)
{Eigen::Vector3f k;k = adjm*b;return k;
}//test adjugate matrixint main(int argc, char** argv)
{Eigen::Vector3f n1 = Eigen::Vector3f(1, 2, 3);Eigen::Vector3f n2 = Eigen::Vector3f(2, 1, 3);Eigen::Vector3f n3 = Eigen::Vector3f(2, 2, 1);Eigen::Matrix3f m = ConstructMatrix3fFromVectors(n1, n2, n3);Eigen::Matrix3f m_i = m.inverse();std::cerr << "m_i: \n" << m_i << std::endl;Eigen::Matrix3f adju_m = ConstructAdjugateMatrix3f(m);float det = m.determinant();Eigen::Matrix3f m_i_my = adju_m/det;std::cerr << "m_i_my: \n" << m_i_my << std::endl;std::cerr<<"end test..."<<std::endl;return 0;
}
运行的结果如下:它和eigen计算一样的。
贴上维基百科的超链接为:
https://zh.m.wikipedia.org/zh-sg/%E4%BC%B4%E9%9A%8F%E7%9F%A9%E9%98%B5
计算矩阵的逆源码(使用伴随矩阵,3×3的矩阵)相关推荐
- 抖音seo源码,抖音seo矩阵系统分发源码技术搭建
抖音seo源码,抖音seo矩阵系统源码技术搭建,抖音seo源码技术开发思路梳理搭建 抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云存储批量视频制作,账号矩阵,视 ...
- 抖音seo源码,抖音seo矩阵系统源码技术搭建
抖音seo源码,抖音seo矩阵系统源码技术搭建 抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云端数字人视频制作,账号矩阵,视频一键分发,站内实现搜索排名,到同城 ...
- 抖音seo源码,抖音seo矩阵系统源码搭建技术+二开开源代码
抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频创意混剪,上传素材批量产出,5个定时投放入口,账号矩阵搭建打造,视频内容优化,搜索引擎实现搜索排名,到同城客户裂变营销智能企业号营销管理4个 ...
- c语言旅游系统,C语言计算旅行花费附带源码
C语言计算旅行花费附带源码 来源:www.xysxzl.com时间:2021-03-01 10:56 旅游程序 国庆节桐桐一家想自驾旅游,目的地有北京.海南.云南等许多好玩的地方可选择,在已知汽车平均 ...
- 【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI维达尔之眼计算[含Matlab源码 2545期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...
- 【机械仿真】基于matlab GUI直齿圆柱齿轮应力计算【含Matlab源码 2077期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI直齿圆柱齿轮应力计算[含Matlab源码 2077期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...
- 【天体学】基于matlab GUI太阳天顶角计算【含Matlab源码 2229期】
一.⛄获取代码方式 获取代码方式1: 完整代码已上传我的资源:[天体学]基于matlab GUI太阳天顶角计算[含Matlab源码 2229期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...
- 抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵同步分发
前言:抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发.抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动化生成霸 ...
- 抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发。
前言:抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发.抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动化生成霸 ...
- 抖音账号矩阵系统/抖音seo霸屏系统/抖音矩阵seo系统源码/独立部署
抖音账号矩阵系统/抖音seo霸屏系统/抖音矩阵seo系统源码/独立部署,技术团队如何围绕抖音矩阵关键词霸屏来做开发?来做到抖音seo优化达到账号排名效果,关键词起到至关重要的作用,依托于抖音平台的正规 ...
最新文章
- 二十六、二叉树--查找指定节点
- 這個日本味超濃的建築竟然是台灣的小學
- fedora,linux mint 命令行(终端)打开目录
- 有关缅甸语学习的一些网站
- 采用个hook技术对writefile函数进行拦截(2)
- gradle下载的依赖包位置 及 修改
- 基于OpenCV的摄像头视频录制保存工具【附GIT源码地址】
- item-设置可见性
- LeetCode 2001. 可互换矩形的组数
- JavaSE基础_java简介和环境搭建_2
- 一套提取自 Ant Design 的优质图标
- 教你几招Mac的省电小技巧
- NOAA GSOD数据中 国家与地区缩写对应全称
- Lambda拉姆达表达式
- 奇葩算法系列——猴子排序
- 如何删除Word文档中表格最后一行多出的空白页
- 子集生成算法 之 位向量法和增量构造法
- 【程序哥】分析 网易一元夺宝是否有作弊空间,真像媒体所说的吗?
- Highcharts使用小心得
- 使用64位任务管理器转储的32位.NET进程dump,WinDbg如何调试