目的:最近写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=⎣⎡​a11​a21​a31​​a12​a22​a32​​a13​a23​a33​​⎦⎤​

它的伴随矩阵是:

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)=⎣⎡​+∣∣​a22​a32​​a23​a33​​∣∣​−∣∣​a21​a31​​a23​a33​​∣∣​+∣∣​a21​a31​​a22​a32​​∣∣​​−∣∣​a12​a32​​a13​a33​​∣∣​+∣∣​a11​a31​​a13​a33​​∣∣​−∣∣​a11​a31​​a12​a32​​∣∣​​+∣∣​a12​a22​​a13​a23​​∣∣​−∣∣​a11​a21​​a13​a23​​∣∣​+∣∣​a11​a21​​a12​a22​​∣∣​​⎦⎤​

其中
∣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} ∣∣​aim​ajm​​ain​ajn​​∣∣​=det[aim​ajm​​ain​ajn​​]=det∣∣​aim​ajm​​ain​ajn​​∣∣​

从上面公式可以看出,伴随矩阵是余因子矩阵的转置。

伴随矩阵可以用来计算矩阵的逆:
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的矩阵)相关推荐

  1. 抖音seo源码,抖音seo矩阵系统分发源码技术搭建

    抖音seo源码,抖音seo矩阵系统源码技术搭建,抖音seo源码技术开发思路梳理搭建 抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云存储批量视频制作,账号矩阵,视 ...

  2. 抖音seo源码,抖音seo矩阵系统源码技术搭建

    抖音seo源码,抖音seo矩阵系统源码技术搭建 抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云端数字人视频制作,账号矩阵,视频一键分发,站内实现搜索排名,到同城 ...

  3. 抖音seo源码,抖音seo矩阵系统源码搭建技术+二开开源代码

    抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频创意混剪,上传素材批量产出,5个定时投放入口,账号矩阵搭建打造,视频内容优化,搜索引擎实现搜索排名,到同城客户裂变营销智能企业号营销管理4个 ...

  4. c语言旅游系统,C语言计算旅行花费附带源码

    C语言计算旅行花费附带源码 来源:www.xysxzl.com时间:2021-03-01 10:56 旅游程序 国庆节桐桐一家想自驾旅游,目的地有北京.海南.云南等许多好玩的地方可选择,在已知汽车平均 ...

  5. 【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI维达尔之眼计算[含Matlab源码 2545期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【机械仿真】基于matlab GUI直齿圆柱齿轮应力计算【含Matlab源码 2077期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI直齿圆柱齿轮应力计算[含Matlab源码 2077期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  7. 【天体学】基于matlab GUI太阳天顶角计算【含Matlab源码 2229期】

    一.⛄获取代码方式 获取代码方式1: 完整代码已上传我的资源:[天体学]基于matlab GUI太阳天顶角计算[含Matlab源码 2229期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  8. 抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵同步分发

    前言:抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发.抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动化生成霸 ...

  9. 抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发。

    前言:抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发.抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动化生成霸 ...

  10. 抖音账号矩阵系统/抖音seo霸屏系统/抖音矩阵seo系统源码/独立部署

    抖音账号矩阵系统/抖音seo霸屏系统/抖音矩阵seo系统源码/独立部署,技术团队如何围绕抖音矩阵关键词霸屏来做开发?来做到抖音seo优化达到账号排名效果,关键词起到至关重要的作用,依托于抖音平台的正规 ...

最新文章

  1. 二十六、二叉树--查找指定节点
  2. 這個日本味超濃的建築竟然是台灣的小學
  3. fedora,linux mint 命令行(终端)打开目录
  4. 有关缅甸语学习的一些网站
  5. 采用个hook技术对writefile函数进行拦截(2)
  6. gradle下载的依赖包位置 及 修改
  7. 基于OpenCV的摄像头视频录制保存工具【附GIT源码地址】
  8. item-设置可见性
  9. LeetCode 2001. 可互换矩形的组数
  10. JavaSE基础_java简介和环境搭建_2
  11. 一套提取自 Ant Design 的优质图标
  12. 教你几招Mac的省电小技巧
  13. NOAA GSOD数据中 国家与地区缩写对应全称
  14. Lambda拉姆达表达式
  15. 奇葩算法系列——猴子排序
  16. 如何删除Word文档中表格最后一行多出的空白页
  17. 子集生成算法 之 位向量法和增量构造法
  18. 【程序哥】分析 网易一元夺宝是否有作弊空间,真像媒体所说的吗?
  19. Highcharts使用小心得
  20. 使用64位任务管理器转储的32位.NET进程dump,WinDbg如何调试

热门文章

  1. xshell无法显示汉字
  2. 关于CodeBlocks下载后无法编译运行的问题
  3. 排名前5的iOS测试自动化框架
  4. 美赛常用查数据查文献网站
  5. 基于ADS软件的Verilog-A建模
  6. 【Excel】数据处理与查看
  7. 沈阳大学专升本计算机宿舍,沈阳大学宿舍怎么样 住宿条件好不好
  8. 大学生涯规划800字计算机,我的大学生活规划(我的大学生活规划800字作文)
  9. linux 交叉编译ffplay,交叉编译ffmpeg生成ffplay
  10. 华为修改优先级命令_华为交换机配置命令---转