// 求4x4 矩阵的逆矩阵——macrobright
int matrixInverse44(double matrix_base[], double matrix_inv[]) {
    double det =
        matrix_base[0] * (matrix_base[5] * (matrix_base[10] * matrix_base[15] - matrix_base[11] * matrix_base[14]) -
                          matrix_base[6] * (matrix_base[9] * matrix_base[15] - matrix_base[11] * matrix_base[13]) +
                          matrix_base[7] * (matrix_base[9] * matrix_base[14] - matrix_base[10] * matrix_base[13])) -
        matrix_base[1] * (matrix_base[4] * (matrix_base[10] * matrix_base[15] - matrix_base[11] * matrix_base[14]) -
                          matrix_base[6] * (matrix_base[8] * matrix_base[15] - matrix_base[11] * matrix_base[12]) +
                          matrix_base[7] * (matrix_base[8] * matrix_base[14] - matrix_base[10] * matrix_base[12])) +
        matrix_base[2] * (matrix_base[4] * (matrix_base[9] * matrix_base[15] - matrix_base[11] * matrix_base[13]) -
                          matrix_base[5] * (matrix_base[8] * matrix_base[15] - matrix_base[11] * matrix_base[12]) +
                          matrix_base[7] * (matrix_base[8] * matrix_base[13] - matrix_base[9] * matrix_base[12])) -
        matrix_base[3] * (matrix_base[4] * (matrix_base[9] * matrix_base[14] - matrix_base[10] * matrix_base[13]) -
                          matrix_base[5] * (matrix_base[8] * matrix_base[14] - matrix_base[10] * matrix_base[12]) +
                          matrix_base[6] * (matrix_base[8] * matrix_base[13] - matrix_base[9] * matrix_base[12]));

if (abs(det) < 1E-9) {
        printf("行列式为0 ,奇异矩阵,不能计算逆矩阵。\n");
        return 0;
    }

double det_inv = 1.0 / det;

matrix_inv[0] =
        det_inv * (matrix_base[5] * (matrix_base[10] * matrix_base[15] - matrix_base[11] * matrix_base[14]) -
                   matrix_base[6] * (matrix_base[9] * matrix_base[15] - matrix_base[11] * matrix_base[13]) +
                   matrix_base[7] * (matrix_base[9] * matrix_base[14] - matrix_base[10] * matrix_base[13]));
    matrix_inv[1] =
        -det_inv * (matrix_base[4] * (matrix_base[10] * matrix_base[15] - matrix_base[11] * matrix_base[14]) -
                    matrix_base[6] * (matrix_base[8] * matrix_base[15] - matrix_base[11] * matrix_base[12]) +
                    matrix_base[7] * (matrix_base[8] * matrix_base[14] - matrix_base[10] * matrix_base[12]));
    matrix_inv[2] = det_inv * (matrix_base[4] * (matrix_base[9] * matrix_base[15] - matrix_base[11] * matrix_base[13]) -
                               matrix_base[5] * (matrix_base[8] * matrix_base[15] - matrix_base[11] * matrix_base[12]) +
                               matrix_base[7] * (matrix_base[8] * matrix_base[13] - matrix_base[9] * matrix_base[12]));
    matrix_inv[3] =
        -det_inv * (matrix_base[4] * (matrix_base[9] * matrix_base[14] - matrix_base[10] * matrix_base[13]) -
                    matrix_base[5] * (matrix_base[8] * matrix_base[14] - matrix_base[10] * matrix_base[12]) +
                    matrix_base[6] * (matrix_base[8] * matrix_base[13] - matrix_base[9] * matrix_base[12]));

matrix_inv[4] =
        -det_inv * (matrix_base[1] * (matrix_base[10] * matrix_base[15] - matrix_base[11] * matrix_base[14]) -
                    matrix_base[2] * (matrix_base[9] * matrix_base[15] - matrix_base[11] * matrix_base[13]) +
                    matrix_base[3] * (matrix_base[9] * matrix_base[14] - matrix_base[10] * matrix_base[13]));
    matrix_inv[5] =
        det_inv * (matrix_base[0] * (matrix_base[10] * matrix_base[15] - matrix_base[11] * matrix_base[14]) -
                   matrix_base[2] * (matrix_base[8] * matrix_base[15] - matrix_base[11] * matrix_base[12]) +
                   matrix_base[3] * (matrix_base[8] * matrix_base[14] - matrix_base[10] * matrix_base[12]));
    matrix_inv[6] =
        -det_inv * (matrix_base[0] * (matrix_base[9] * matrix_base[15] - matrix_base[11] * matrix_base[13]) -
                    matrix_base[1] * (matrix_base[8] * matrix_base[15] - matrix_base[11] * matrix_base[12]) +
                    matrix_base[3] * (matrix_base[8] * matrix_base[13] - matrix_base[9] * matrix_base[12]));
    matrix_inv[7] = det_inv * (matrix_base[0] * (matrix_base[9] * matrix_base[14] - matrix_base[10] * matrix_base[13]) -
                               matrix_base[1] * (matrix_base[8] * matrix_base[14] - matrix_base[10] * matrix_base[12]) +
                               matrix_base[2] * (matrix_base[8] * matrix_base[13] - matrix_base[9] * matrix_base[12]));

matrix_inv[8] = det_inv * (matrix_base[1] * (matrix_base[6] * matrix_base[15] - matrix_base[7] * matrix_base[14]) -
                               matrix_base[2] * (matrix_base[5] * matrix_base[15] - matrix_base[7] * matrix_base[13]) +
                               matrix_base[3] * (matrix_base[5] * matrix_base[14] - matrix_base[6] * matrix_base[13]));
    matrix_inv[9] = -det_inv * (matrix_base[0] * (matrix_base[6] * matrix_base[15] - matrix_base[7] * matrix_base[14]) -
                                matrix_base[2] * (matrix_base[4] * matrix_base[15] - matrix_base[7] * matrix_base[12]) +
                                matrix_base[3] * (matrix_base[4] * matrix_base[14] - matrix_base[6] * matrix_base[12]));
    matrix_inv[10] = det_inv * (matrix_base[0] * (matrix_base[5] * matrix_base[15] - matrix_base[7] * matrix_base[13]) -
                                matrix_base[1] * (matrix_base[4] * matrix_base[15] - matrix_base[7] * matrix_base[12]) +
                                matrix_base[3] * (matrix_base[4] * matrix_base[13] - matrix_base[5] * matrix_base[12]));
    matrix_inv[11] =
        -det_inv * (matrix_base[0] * (matrix_base[5] * matrix_base[14] - matrix_base[6] * matrix_base[13]) -
                    matrix_base[1] * (matrix_base[4] * matrix_base[14] - matrix_base[6] * matrix_base[12]) +
                    matrix_base[2] * (matrix_base[4] * matrix_base[13] - matrix_base[5] * matrix_base[12]));

matrix_inv[12] =
        -det_inv * (matrix_base[1] * (matrix_base[6] * matrix_base[11] - matrix_base[7] * matrix_base[10]) -
                    matrix_base[2] * (matrix_base[5] * matrix_base[11] - matrix_base[7] * matrix_base[9]) +
                    matrix_base[3] * (matrix_base[5] * matrix_base[10] - matrix_base[6] * matrix_base[9]));
    matrix_inv[13] = det_inv * (matrix_base[0] * (matrix_base[6] * matrix_base[11] - matrix_base[7] * matrix_base[10]) -
                                matrix_base[2] * (matrix_base[4] * matrix_base[11] - matrix_base[7] * matrix_base[8]) +
                                matrix_base[3] * (matrix_base[4] * matrix_base[10] - matrix_base[6] * matrix_base[8]));
    matrix_inv[14] = -det_inv * (matrix_base[0] * (matrix_base[5] * matrix_base[11] - matrix_base[7] * matrix_base[9]) -
                                 matrix_base[1] * (matrix_base[4] * matrix_base[11] - matrix_base[7] * matrix_base[8]) +
                                 matrix_base[3] * (matrix_base[4] * matrix_base[9] - matrix_base[5] * matrix_base[8]));
    matrix_inv[15] = det_inv * (matrix_base[0] * (matrix_base[5] * matrix_base[10] - matrix_base[6] * matrix_base[9]) -
                                matrix_base[1] * (matrix_base[4] * matrix_base[10] - matrix_base[6] * matrix_base[8]) +
                                matrix_base[2] * (matrix_base[4] * matrix_base[9] - matrix_base[5] * matrix_base[8]));

return 1;
}

求4x4 矩阵的逆矩阵相关推荐

  1. 线性代数让我想想:快速求三阶矩阵的逆矩阵

    快速求三阶矩阵的逆矩阵 前言 一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示) A−1=1[][−[]−[]−[]−[]]=A−1=1[][M11−[M12]M13−[M21]M2 ...

  2. 求一个矩阵的逆矩阵(用伴随矩阵求)

    题目:noyj774 用代数余子式求逆矩阵方法: 若现有矩阵A,要求其逆矩阵: 若|A|==0,则其不存在逆矩阵: 若|A|!=0,其逆矩阵A^-1==*A/|A|:其中*A为其伴随矩阵: 伴随矩阵的 ...

  3. c语言矩阵的逆的程序,C语言求矩阵的逆矩阵

    <C语言求矩阵的逆矩阵>由会员分享,可在线阅读,更多相关<C语言求矩阵的逆矩阵(12页珍藏版)>请在人人文库网上搜索. 1.C语言求矩阵的逆矩阵班级: 自动化1604小组成员: ...

  4. java求矩阵的逆矩阵_java n*n矩阵求值及求逆矩阵

    展开全部 import java.math.*; import java.util.*; import java.text.*; public class matrix { static int ma ...

  5. 使用SVD求取矩阵的伪逆

    ➤01 矩阵的SVD分解 对于矩阵A∈Rn×mA \in R_{n \times m}A∈Rn×m​,可以通过奇异值分解(Singular Vector Decomposite)分解成如下形式:A=U ...

  6. java 伴随矩阵_C#计算矩阵的逆矩阵方法实例分析

    本文实例讲述了C#计算矩阵的逆矩阵方法.分享给大家供大家参考.具体如下: 1.代码思路 1)对矩阵进行合法性检查:矩阵必须为方阵 2)计算矩阵行列式的值(Determinant函数) 3)只有满秩矩阵 ...

  7. MATLAB:矩阵 矩阵的秩,矩阵的逆矩阵,矩阵的转置,矩阵每个元素减一,矩阵元素变换

    1.矩阵 A=[1,2,3;4,5,6;7,8,9]/A=[1 2 3;4 5 6;7 8 9](分号与空格用于区分每行之间的元素,分号区分行) 2.矩阵每个元素减一 B=A-1 3.矩阵元素变换 需 ...

  8. python求向量函数的雅可比矩阵_在python Numpy中求向量和矩阵的范数实例

    np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=np.linalg.norm(x, ord=None, ...

  9. Boost:使用行列式函数和transform()算法计算许多4x4矩阵的行列式

    Boost:使用行列式函数和transform()算法计算许多4x4矩阵的行列式 实现功能 C++实现代码 实现功能 使用行列式函数和transform()算法计算许多4x4矩阵的行列式 C++实现代 ...

最新文章

  1. 小米数据管理与应用实践
  2. Spring Boot中如何扩展XML请求和响应的支持
  3. 排序算法学习——冒泡排序
  4. tensorflow编程入门笔记之一
  5. 用CMake编译运行在网上下载的源文件src
  6. 移动端适配常用解决方案
  7. 栅格布局一般怎么用_建筑混凝土色差大怎么办?用这种方法处理,一般都看不出来...
  8. 磁盘 I/O 性能监控指标和调优方法
  9. python 结巴分词(jieba)学习
  10. oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额
  11. mysql innodb 报错_mysql报错1286 Unknown storage engine 'InnoDB'
  12. 数据科学和人工智能技术笔记 十六、朴素贝叶斯
  13. 最新优秀的通用Android应用架构:从建项目开始
  14. SQLServer分页查询
  15. oracle的ora01504,Oracle中的ORA-01548: active rollback segment '_SYSSMU1$' found
  16. python数据分析与展示 嵩天_【学习笔记】PYTHON数据分析与展示(北理工 嵩天)
  17. 移动端开发H5页面点击按钮后出现闪烁或黑色背景的解决办法
  18. 四分位数算法记录(含java代码实现)
  19. vue 读取地址栏参数
  20. 微诺“新婚”一年:相濡以沫 前路未知

热门文章

  1. android dhcp 服务器,android 获取当前手机的 DHCP 信息ip,server 等操作实例教程
  2. 黑苹果适合什么用途?_黑鲨六大配件:用途各不同,苹果安卓都能用
  3. Python命令行搭建文件下载服务器
  4. 物联网工程实践日报表6
  5. vue项目中更换tinymce版本踩坑
  6. iOS 项目couldn't load project
  7. mysql数据库日志存储位置_MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置...
  8. 设计模式学习笔记(四)单例模式的实现方式和使用场景
  9. PHP如何实现字符串反转_php反转字符串方法
  10. 在Ubuntu下安装Wine QQ教程(本人亲测)