3.3 高斯法求逆矩阵
首先必须要判断矩阵是不是一个方阵。然后把在矩阵右边放一个单位矩阵,然后再进行行变换,左边变成单位矩阵后吗,右边的矩阵就是逆矩阵。
举个例子,以下矩阵:
[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−3112211111112⎦⎥⎥⎤
右接一个单位矩阵
[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−31122111111121000010000100001⎦⎥⎥⎤
进行行变换
[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] ⎣⎢⎢⎡1000110011−1011−1112−5−20−132001−10001⎦⎥⎥⎤
单位化,就变成这样了:
[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] ⎣⎢⎢⎡1000010000100001−1−37−212−52010−100−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 高斯法求逆矩阵相关推荐
- 用高斯约当法求逆矩阵A-1
原矩阵: 求. 用高斯约当法求逆矩阵. #include<iostream> #include<cstdio> #include<cs ...
- 3.3 伴随矩阵法求逆矩阵
文章目录 逆矩阵定义 伴随矩阵 python实现 逆矩阵定义 逆矩阵指的是另一个矩阵和自己相乘会变成单位矩阵,符号是右上角一个 − 1 -1 −1,就是: A A − 1 = A − 1 A = ...
- 高斯约当法求逆矩阵的算法实现(C++)
#include"iostream.h" #include"math.h" void main() { float a[10][10],A[10][10],b[ ...
- 选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵
选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...
- C语言求矩阵的逆(高斯法)
初等变换法是常用的矩阵求逆方法之一 相对于伴随法,初等行变换法有着较低的时间复杂度,可以进行相对高维的矩阵运算,但同时也会损失一点点精度. 伴随法可参考之前的博客:C语言求矩阵的逆(伴随法) 目录 数 ...
- 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵
选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...
- 湘潭2017 ccpc中南地区邀请赛 Determinant 高斯约当求逆矩阵
链接 http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1260 要求逆矩阵还是第一次见到 题意 给定一个n-1*n的矩阵, ...
- python 高斯约当消元法求逆矩阵
judge函数判断该矩阵该矩阵是否有逆矩阵 calculate计算逆矩阵 import sysclass MatrixInverse:""""求逆矩阵" ...
- 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))
目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...
- 变换例题_用初等变换求逆矩阵的小小解释
在我们学习逆矩阵的过程中,肯定会遇到这样一种求逆矩阵的方法: 若A是一个n阶可逆矩阵, (虚竖线打不出,凑合着看吧!)这一过程中经历了一系列初等行变换,并且我们下结论说: 中的 就是A的逆矩阵! 按逻 ...
最新文章
- java集合中对象某属性比较排序
- 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。
- 从JSON数据中取出相关数据
- 电脑仙人掌机器人作文_神奇的仙人掌作文400字
- 关于MVVM与MVC
- Java开发技巧——并发控制中的乐观锁与悲观锁
- C#网络类智能开关控制板实例
- 【ArcGIS遇上Python】ArcGIS python计算长时间序列多个栅格数据的平均值
- PKU 学生的反馈 2009-1
- USACO-Section1.3 Name That Number (遍历与字符串比较)
- 争分夺秒!制药公司如何用大数据加快药物试验进程?
- 微服务架构的分布式事务解决方案(Dubbo分布式事务处理)
- pip install numpy 安装numpy失败
- java实现wps函数IRR,Excel表格技巧—如何用IRR函数算内部收益率
- RouterPassView – 路由密码查看器
- MFC与Windows编程
- Sneaky Sasquatch Mac(捣蛋大脚怪搞怪冒险游戏)
- 解决winform自定义窗体在扩展显示器最大化不能充满屏幕
- Win2003下安装MSN
- 【大学物理学】狭义相对论
热门文章
- 2018的锅让2019来悲
- 使用Docker容器来搭建LNMP(Nginx+Mysql+php)+Wordpress
- C语言洛谷P1957口算练习题
- Leetcode 20有效的括号、33搜索旋转排序数组、88合并两个有序数组(nums1长度为m+n)、160相交链表、54螺旋矩阵、415字符相加(不能直接转Int)、reverse()函数
- 名字作诗(藏头名字作诗)
- 程序员的高薪是编程语言决定的么?图样图森破啊。
- Android系统优化
- bat脚本从FTP下载文件的方式(下载实践的完整实例):
- 神经计算棒python_神经计算棒-Movidius™ Neural Compute SDK Python API
- golang学习之go方法