接着线性代数学习之线性相关,线性无关与生成空间继续往下学习,在上一次中学习了线性系统以及它的求解,在之前线性代数学习之矩阵的应用和更多矩阵相关的高级话题的学习矩阵的逆时遗留了一个问题,回忆一下:
由于已经学习了线性系统的求解了,所以此时就可以来解答这么一个遗留的问题了,先来回忆一下什么是矩阵的逆:
注意:只有方阵才有逆矩阵哦,那假设矩阵A有逆矩阵,比如这样的矩阵:
那如何求得该矩阵的逆矩阵呢?根据逆矩阵的特性,可以有如下变换:
其中I是单位矩阵,由于A是二行二列的方阵,它对应的单位矩阵很显然就是等号最后的这个了,而根据矩阵的乘法规则,此时就可以得知A的逆矩阵一定也是2x2的矩阵,所以此时可以直接假设:
所以此时的式子就可以变为:
此时的目标就是来求解x11、x12、x21、x22了,下面来看一下,此时它又可以拆成:
而根据矩阵x向量的定义,再一次将其拆解:
而此时就可以列一个线性方程组了,如下:
那是不是对于求解矩阵的逆可以归到上次咱们学习的对于线性系统的求解上来呢?答案是的。如果此线性系统有唯一解那么咱们的逆矩阵也就有答案了;而如果无解那说明此矩阵是没有逆矩阵的;而如果有无数解说明啥呢这个之后再说,因为此式子应该不存在无数解的情况。对于上面合成了一个有四个方程2个未知数的方程组其实可以不合,可以分别化作2个小的线程系统分别进行求解,如下:
而对于图中的*其实就对应我们想要求解矩阵的逆矩阵的未知数,所以又可以表示为:
而既然这俩增广矩阵的系数矩阵是一模一样的,那其实可以将这俩增广矩阵对应的结果向量合到一起来,不用分开进行求解,啥意思?
此时关键的来了,对于此时就可以找到一个比较好求解矩阵逆的方式了,对于上面合起来的增广矩阵其实又可以得到下面这个式子:
目前咱们举例是一个方阵的情况,其实对于非方阵此式子也满足,通过这么一个等式就可以发现:对于一个矩阵的求逆过程其实就是将它化成最简形式之后其结果所构成的矩阵,所以下面很快就可以求得矩阵A的逆矩阵了,如下:
对于增广矩阵的求解不是还有可能是无解,无数解的情况么?那下面针对它再来进行一个讨论,其实目前咱们的这个增广矩阵是不可能有无数解的,用抽象的思维来看:
因为化为最简形式之后的非零行是2,而刚好等于未知数的个数,并没有一个全0行,当然也就不存在无数解喽。另外也有可能是无解,因为最后一行如果c,d都取0那就产生矛盾了,目前只是针对2x2的方阵对于无解的描述是这样的,那如果是nxn的方阵呢?此时对于无解的定义就可以抽象为:“当系统矩阵化为行最简形式时有0行既说明无解,也就说明矩阵不存在逆。”
最后,这里还有一个小问题需要提示一下,目前咱们只求了矩阵的右逆:
而根据矩阵逆的概念同时也要求它的左逆相乘也为单位矩阵才行,其实对于这块是有一个结论的:“如果一个方阵A有右逆B,则B也是A的左逆,既B是A的逆。”,关于这个性质目前所学的知识还不足以证明,在之后再来研究。
实现求解矩阵的逆:接下来则用python来实现一下求解矩阵的逆,还是对于咱们之前的LinearSystem类进行一下改造。
增广矩阵支持结果矩阵:由于在求解矩阵的逆时用的增广矩阵其结果不再是一个向量了,而是一个矩阵,所以需要在构造中增加对于矩阵的逻辑判断,如下:
inv():接下来定义求解逆矩阵的函数,这里将其设计成自由函数,如下:
关于为啥要将它设计成这样一个有别于其它函数的原因这里不深究,待未来有时间系统学习python时再来寻找答案,下面继续:
当经过消元之后有解,接下来则就可以根据结果矩阵来取出逆矩阵了,如下:
测试:接下来调用一下:
由于精度的问题可能看着跟预期有些误差,其实它跟我们之前理论描述的结果是一样的,如下:
为了验证此矩阵就是A的逆矩阵,下面可以再如下打印一下:
当然对于A的左逆的计算目前还没能证明,之后会证明的。
初等矩阵:对于上面利用线性系统求解原理来求解了矩阵的逆,而在之后的学习中还会继续深入的分析可逆性,而为了深入的研究可逆的性质,此时需要理解一下新的概念---初等矩阵。
先来回忆一下对于线性系统求解的过程:
上面很显然是一个高斯消元的过程,而上面变换的核心用文字总结的话就是:
1、矩阵的某一行乘以一个常数;
2、矩阵的一行加(减)另一行;
3、交换矩阵的两行;
而对于上面其实是矩阵跟某一个元素进行操作,也就是矩阵的内部进行元素级别的操作,但是!!!在之前