矩阵求逆操作的复杂度分析
逆矩阵的复杂度分析

1 背景

之前写过一篇关于矩阵复杂度分析的文章,没有想到阅读人数那么多。对于IT相关人士来说,从代码层次再结合基本数学知识,就能够很好地理解矩阵的复杂度如何计算得到和分析。其中一位读者提出“矩阵求逆的复杂度如何分析”。今天就来一起共同探讨一下,笔者知道,矩阵求逆有多种方法,这里就来探讨最基本的方式,其他优化方式,读者可以看完本篇博客后,自行分析,因为原理基本上差不是很多。本篇博客仅仅是抛砖引玉。

2 求逆操作分析

2.1 求逆矩阵基本原理

这里很多读者可以容易忽视掉,先复习一下。
(A∣E)=(E∣A−1)(A|E) = (E| A^{-1})(A∣E)=(E∣A−1)
相信大家对这个公式都比较熟悉,即把原矩阵和一个单位矩阵对齐后,进行行列变化,就得到了单位矩阵,右边部分就算逆矩阵。

证明如下:
A−1(A∣E)=(A−1A∣A−1E)A^{-1}(A|E) = (A^{-1}A| A^{-1}E)A−1(A∣E)=(A−1A∣A−1E)
=(E∣A−1)= (E| A^{-1})=(E∣A−1)
思考为什么呢?

因为:
A−1A=EA^{-1}A=EA−1A=E,右乘A−1A^{-1}A−1后:
A−1E=A−1A^{-1}E=A^{-1}A−1E=A−1

故变化的桥梁就是存在A−1A^{-1}A−1

3 逆矩阵复杂度分析-高斯消元法

3.1 代码层次

/*
函数说明:将原矩阵a和一个单位矩阵E作成一个大矩阵(A,E),
用初等变换将大矩阵中的a变成E,则会得到(E,A^{-1})的形式
* */
void inverseMatrix(double arc[d][d], int n, double ans[d][d])//计算矩阵的逆
{/*d = n : 表示维度arc[d][d] : 原始矩阵,dxdans[d][d] :  变化后的结果矩阵,dxd ,一开始初始化为单位矩阵*/int i, j, k;//列double max, tempA, tempB, P;int max_num;double arcCopy[d][d];memcpy(arcCopy, arc, 288);for (i = 0; i < n; i++){ans[i][i] = 1;}for (i = 0; i < n; i++)//第i列{max = fabs(arcCopy[i][i]);max_num = i;for (j = i + 1; j < n; j++)//选出主元{if (fabs(arcCopy[j][i]) > max){max = fabs(arcCopy[j][i]);max_num = j;}}for (k = 0; k < n; k++)//交换行{tempA = arcCopy[i][k];arcCopy[i][k] = arcCopy[max_num][k];arcCopy[max_num][k] = tempA;tempB = ans[i][k];ans[i][k] = ans[max_num][k];ans[max_num][k] = tempB;}for (k = i + 1; k < n; k++){P = arcCopy[k][i] / arcCopy[i][i];for (j = 0; j < n; j++){arcCopy[k][j] = arcCopy[k][j] - arcCopy[i][j] * P;ans[k][j] = ans[k][j] - ans[i][j] * P;}}}for (i = 0; i < n; i++)//行{P = arcCopy[i][i];for (j = i; j < n; j++){arcCopy[i][j] = arcCopy[i][j] / P;}for (j = 0; j < n; j++){ans[i][j] = ans[i][j] / P;}}for (i = n - 1; i > 0; i--){for (j = i - 1; j >= 0; j--){for (k = 0; k < n; k++){ans[j][k] = ans[j][k] - ans[i][k] * arcCopy[j][i];}}}
}

3.2 结果

逆矩阵时间复杂为:O(n^3)

开销代价最大是这里,

 for (i = n - 1; i > 0; i--){for (j = i - 1; j >= 0; j--){for (k = 0; k < n; k++){ans[j][k] = ans[j][k] - ans[i][k] * arcCopy[j][i];}}}

4 逆矩阵复杂度分析-伴随矩阵

这个比较直接:
A−1=A∗/det(A)A^{-1} = A^{*}/det(A)A−1=A∗/det(A)
先计算A的伴随矩阵,再计算A的行列式值。
前者的复杂度为:N∗O(N!)N*O ( N ! ) N∗O(N!)
后者的复杂度为:N2∗O((N−1)!)N^2 ∗O((N−1)!) N2∗O((N−1)!)

故使用伴随矩阵求解方式的复杂度为:
N∗O(N!)+N2∗O((N−1)!)N*O ( N ! ) + N^2 ∗O((N−1)!) N∗O(N!)+N2∗O((N−1)!)

ps:本博客只考虑基本的操作,不考虑优化处理

矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)相关推荐

  1. 三维分析之开敞度分析

    三维分析之开敞度分析 功能简介 软件环境 详细步骤 - 桌面篇 - 组件篇 Nec_Eu 功能简介 开敞度分析,是在场景中相对于指定的观测点,基于一定的观测半径,构造出一个"视域半球体&qu ...

  2. 根据词袋模型使用Python实现一个简单的分析句子对相似度的软件

    使用词袋模型实现一个简单的分析句子对相似度的软件 1. 实验内容 本次实验使用词袋(bag of words)技术,利用词袋模型进行编程并计算了不少于10组句子对的相似度,同时设计了图形界面,可以在界 ...

  3. R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等

    R语言caret包构建机器学习回归模型(regression model).使用DALEX包进行模型解释分析.特征重要度.偏依赖分析等 目录

  4. 【转载】关联分析中的支持度、置信度和提升度

    目录 1. 支持度(Support) 2. 置信度 (Confidence) 3. 提升度(Lift) 1. 支持度(Support) 支持度表示项集{X,Y}在总项集里出现的概率.公式为: Supp ...

  5. 关联分析中的支持度、置信度和提升度

    1.支持度(Support) 支持度表示项集{X,Y}在总项集里出现的概率.公式为: Support(X→Y) = P(X,Y) / P(I) = P(X∪Y) / P(I) = num(XUY) / ...

  6. 软件可靠性分析方法有失效模式影响分析法、严酷度分析法、故障树分析法、事件树分析法、潜在线路分析法

    研究 软件可靠性分析方法有失效模式影响分析法.严酷度分析法.故障树分析法.事件树分析法.潜在线路分析法 http://wenku.baidu.com/link?url=_XcuD0fStz39Doo5 ...

  7. 关联分析中的支持度、置信度和提升度 计算

    目录 项集(Itemset) 事务的宽度 支持度.置信度和提升度 定义 例一 例二 项集(Itemset) 包含0个或多个项的集合,如果包含k个项,则称为k-项集. 事务的宽度 事务中出现的项的个数 ...

  8. 数据挖掘关联分析中的支持度、置信度和提升度

    购物篮分析: 利用关联分析的方法可以发现联系如关联规则或频繁项集. 二元表示:每一行对应一个事务,每列对应一个项,项用二元变量表示,项在事务中出现比不出现更重要,因此项是非对称的的二元变量. 项集(I ...

  9. 推荐一个vs自带工具分析代码的复杂度

    VS2012 -> Analyze -> Calculate code metrics feature. 代码度量(Code Metrics)是用来测量专业标准的软件特性. 在某些方面,它 ...

最新文章

  1. c# 大数据量比较时-方案
  2. 高性能服务器开发-iocp
  3. java截取指定字符串中的某段字符
  4. java中p.name_spring如何使用命名空间p简化bean的配置
  5. 38 WM配置-作业-定义库存转储和补充控制
  6. Ubuntu下使用cmake结合CmakeLists.txt生成makefile文件并进行编译
  7. 多目标进化优化_科研一角|论文分享 | 等离子喷焊工艺参数多目标优化
  8. jest单元测试-基础
  9. python按钮代码_Python QPalette.Button方法代码示例
  10. ceph--磁盘和rbd、rados性能测试工具和方法
  11. java 单个session过期_session过期的三种方法
  12. 区块链java开发教程,JAVA区块链项目实战视频课程
  13. 电容和电感(自总结)
  14. Python - 批量修改文件夹名称
  15. 算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介
  16. python曲线拟合预测_数据预测与曲线拟合
  17. 基于nginx-http-flv-module提供摄像头hls flv回放流服务
  18. 半导体功率器件静态参数测试仪系统 能测 IGBT. Mosfet. Diode. BJT......
  19. 如何将PDF转换为PPT?2个免费好用的pdf转ppt工具
  20. 前端开发周报:20190817

热门文章

  1. 爬取正方教务管理系统获取学生信息
  2. Kubernetes在宜信落地实践
  3. [Ahoi2014Jsoi2014]骑士游戏(SPFA)
  4. 教程:MySQL 8安装与配置及注意事项
  5. 此生,依旧是我未看破红尘。
  6. Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制
  7. 3D Touch介绍:电子秤App与快捷操作
  8. python 斯皮尔曼相关系数_使用Python计算非参数的秩相关
  9. 用MATLAB做周期三角波的傅里叶级数,Matlab 周期方波信号傅里叶级数展开
  10. matlab 求留数,用matlab求留数