首先必须要判断矩阵是不是一个方阵。然后把在矩阵右边放一个单位矩阵,然后再进行行变换,左边变成单位矩阵后吗,右边的矩阵就是逆矩阵。
  举个例子,以下矩阵:
[11112111−1211−3212]\left[\begin{matrix} 1 & 1 & 1 & 1\\ 2 & 1& 1& 1\\ -1 & 2& 1& 1\\ -3& 2& 1& 2\\ \end{matrix}\right] ⎣⎢⎢⎡​12−1−3​1122​1111​1112​⎦⎥⎥⎤​
  右接一个单位矩阵
[1111100021110100−12110010−32120001]\left[\begin{matrix} 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0\\ 2 & 1& 1& 1 & 0 & 1 & 0 & 0\\ -1 & 2& 1& 1 & 0 & 0 & 1 & 0\\ -3& 2& 1& 2 & 0 & 0 & 0 & 1\\ \end{matrix}\right] ⎣⎢⎢⎡​12−1−3​1122​1111​1112​1000​0100​0010​0001​⎦⎥⎥⎤​
  进行行变换
[1111100001112−10000−1−1−53100001−22−11]\left[\begin{matrix} 1& 1 & 1 &1 & 1 & 0 & 0 &0\\ 0& 1 & 1 &1& 2 &-1 & 0& 0\\ 0 &0 &-1 &-1 &-5 &3 &1 &0\\ 0 &0& 0& 1& -2& 2 &-1& 1\\ \end{matrix}\right] ⎣⎢⎢⎡​1000​1100​11−10​11−11​12−5−2​0−132​001−1​0001​⎦⎥⎥⎤​
  单位化,就变成这样了:
[1000−11000100−321000107−50−10001−22−11]\left[\begin{matrix} 1 & 0 & 0 & 0 & -1 & 1 & 0 & 0\\ 0 & 1 & 0 & 0 & -3 & 2 & 1 & 0\\ 0 & 0 & 1 & 0 & 7 & -5 & 0 & -1\\ 0 & 0 & 0 & 1 & -2 & 2 & -1 & 1\\ \end{matrix}\right] ⎣⎢⎢⎡​1000​0100​0010​0001​−1−37−2​12−52​010−1​00−11​⎦⎥⎥⎤​
  Java代码:

public Matrix<T> inverse() {// 必须是个方阵if (this.array.length != this.array[0].length) {throw new IllegalArgumentException("方阵才有双侧逆矩阵");}// 创建一个矩阵,单位矩阵放在右边final T[][] newArray = newArray(this.array.length, this.array.length << 1);for (int i = 0; i < newArray.length; i++) {final T[] line = newArray[i];final T[] thisLine = this.array[i];for (int j = 0; j < thisLine.length; j++) {line[j] = thisLine[j];}for (int j = thisLine.length; j < line.length; j++) {if (j == thisLine.length + i) {line[j] = oneValue();} else {line[j] = zeroValue();}}}return createMatrix(newArray).toUpperTriangular().toLowerTriangle().toUnipotent().subMatrix(0, this.array.length, this.array.length, this.array.length * 2);
}

  python代码:

def __invert__(self):# 首先新建一个单位矩阵size = len(self.__lines)unit = self.unit_matrix(size)new_matrix = self.append(unit)new_matrix.to_upper_triangle()new_matrix.to_lower_triangle()new_matrix.to_unipotent()return new_matrix.sub_matrix(0, size, 0, size)# 创建单位矩阵方法
# 简化后如下:
@staticmethod
def unit_matrix(size):return [[1 if i == j else 0 for j in range(0, size)] for i in range(0, size)]# 拼接矩阵方法
def append(self, matrix):# define an arrayrows = len(self.__lines)columns = len(self.__lines[0]) + len(matrix.__lines[0])unit = [[0 for _ in range(0, columns)] for _ in range(0, rows)]for y in range(0, len(unit)):self_line = self.__lines[y]other_line = matrix.__lines[y]# 0~ this this ~otherfor i in range(0, len(self_line)):unit[y][i] = self_line[i]for i in range(0, len(other_line)):unit[y][i+len(self_line)] = other_line[i]return Matrix(unit)
# 下三角矩阵方法
def to_lower_triangle(self):for i in range(len(self.__lines) - 1, -1, -1):# 循环遍历其前的所有行, 其前所有行进行改变for j in range(0, i):Matrix.row_operate(self.__lines[i], self.__lines[j], self.__lines[j][i], self.__lines[i][i],0, len(self.__lines[i]))# 单位矩阵方法
def to_unipotent(self):for i in range(0, len(self.__lines)):line = self.__lines[i]for j in range(0, len(line)):if i != j and line[i] != 0:line[j] /= line[i]
# 行变换方法
@staticmethod
def __row_operate(line1, line2, coefficient1, coefficient2, start_column, end_column):for i in range(start_column, end_column):line2[i] = line1[i] * coefficient1 - line2[i] * coefficient2

3.3 高斯法求逆矩阵相关推荐

  1. 用高斯约当法求逆矩阵​​​​​​​​​​​​​​​​​​​​​A-1

    原矩阵:                   求. 用高斯约当法求逆矩阵. #include<iostream> #include<cstdio> #include<cs ...

  2. 3.3 伴随矩阵法求逆矩阵

    文章目录 逆矩阵定义 伴随矩阵 python实现 逆矩阵定义   逆矩阵指的是另一个矩阵和自己相乘会变成单位矩阵,符号是右上角一个 − 1 -1 −1,就是: A A − 1 = A − 1 A = ...

  3. 高斯约当法求逆矩阵的算法实现(C++)

    #include"iostream.h" #include"math.h" void main() { float a[10][10],A[10][10],b[ ...

  4. 选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵

    选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...

  5. C语言求矩阵的逆(高斯法)

    初等变换法是常用的矩阵求逆方法之一 相对于伴随法,初等行变换法有着较低的时间复杂度,可以进行相对高维的矩阵运算,但同时也会损失一点点精度. 伴随法可参考之前的博客:C语言求矩阵的逆(伴随法) 目录 数 ...

  6. 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵

    选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...

  7. 湘潭2017 ccpc中南地区邀请赛 Determinant 高斯约当求逆矩阵

    链接  http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1260 要求逆矩阵还是第一次见到 题意  给定一个n-1*n的矩阵, ...

  8. python 高斯约当消元法求逆矩阵

    judge函数判断该矩阵该矩阵是否有逆矩阵 calculate计算逆矩阵 import sysclass MatrixInverse:""""求逆矩阵" ...

  9. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  10. 变换例题_用初等变换求逆矩阵的小小解释

    在我们学习逆矩阵的过程中,肯定会遇到这样一种求逆矩阵的方法: 若A是一个n阶可逆矩阵, (虚竖线打不出,凑合着看吧!)这一过程中经历了一系列初等行变换,并且我们下结论说: 中的 就是A的逆矩阵! 按逻 ...

最新文章

  1. java集合中对象某属性比较排序
  2. 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。
  3. 从JSON数据中取出相关数据
  4. 电脑仙人掌机器人作文_神奇的仙人掌作文400字
  5. 关于MVVM与MVC
  6. Java开发技巧——并发控制中的乐观锁与悲观锁
  7. C#网络类智能开关控制板实例
  8. 【ArcGIS遇上Python】ArcGIS python计算长时间序列多个栅格数据的平均值
  9. PKU 学生的反馈 2009-1
  10. USACO-Section1.3 Name That Number (遍历与字符串比较)
  11. 争分夺秒!制药公司如何用大数据加快药物试验进程?
  12. 微服务架构的分布式事务解决方案(Dubbo分布式事务处理)
  13. pip install numpy 安装numpy失败
  14. java实现wps函数IRR,Excel表格技巧—如何用IRR函数算内部收益率
  15. RouterPassView – 路由密码查看器
  16. MFC与Windows编程
  17. Sneaky Sasquatch Mac(捣蛋大脚怪搞怪冒险游戏)
  18. 解决winform自定义窗体在扩展显示器最大化不能充满屏幕
  19. Win2003下安装MSN
  20. 【大学物理学】狭义相对论

热门文章

  1. 2018的锅让2019来悲
  2. 使用Docker容器来搭建LNMP(Nginx+Mysql+php)+Wordpress
  3. C语言洛谷P1957口算练习题
  4. Leetcode 20有效的括号、33搜索旋转排序数组、88合并两个有序数组(nums1长度为m+n)、160相交链表、54螺旋矩阵、415字符相加(不能直接转Int)、reverse()函数
  5. 名字作诗(藏头名字作诗)
  6. 程序员的高薪是编程语言决定的么?图样图森破啊。
  7. Android系统优化
  8. bat脚本从FTP下载文件的方式(下载实践的完整实例):
  9. 神经计算棒python_神经计算棒-Movidius™ Neural Compute SDK Python API
  10. golang学习之go方法