矩阵的初等变换这个概念可能在很多人听来有些陌生,但其实我们早在初中的解多元方程组的时候就用过它。只不过在课本当中,这种方法叫做消元法。我们先来看一个课本里的例子:

假设我们要解这个方程,怎么做呢?

首先,我们把(1)式加到(2)式,把(4)式加到(3)式,把(1)式乘6加到(4)式可以得到:

我们再把(4)式减去(2)式乘5,可以解出x4=−3:

我们把x4=−3带入,可以解出

因为消元之后,方程组的数量少于变量的数量,我们无法解出所有的变量。其中的可以取任何值。

上面这个计算的方法我们都非常熟悉,如果我们用一个矩阵来表示所有的次数,那么这个矩阵D可以写成:

那么,我们刚才消元的过程,其实就是对这个矩阵做初等变换。我们把这个过程总结一下,矩阵的初等变换操作包含以下三种:

对调两行

以数k,k≠0乘上某行的所有元素

以数k,k≠0乘上某行所有元素并加到另一行

以上的三种都是针对行为单位的,因此上面的三种变换也称为“行变换”。同样我们也可以对列做如上的三种操作,称为“列变换”。行变换和列变换结合就是矩阵的初等变换。

同样,我们可以对D这个矩阵使用刚才我们上述的初等变换操作,将它变成如下这个结果:

它就对应方程组:

Dt矩阵是经过初等行变换的结果,我们还可以再对它进行列变换,将它变得更简单,我们只要交换第三和第三列,之后就可以通过初等列变换把第五列消除,之后它就变成了下面这个样子:

我们用数据归纳法可以很容易证明,所有的m*n的矩阵经过一系列初等变换,都可以变成如下的形式:

r就是最简矩阵当中非零行的行数,它也被称为矩阵的秩。我们把A矩阵的秩记作: R(A)

之前我们在介绍行列式的时候说过,行列式还存在多种性质。其中之一就是一个矩阵经过初等变换,它的行列式保持不变。我们又知道,如果行列式当中存在某一行或者某一列全部为0,那么它的行列式为0。

所以,我们可以得到,对于n阶矩阵A而言,如果它的秩R(A)

再根据我们前文当中有关可逆矩阵的定义,可以得到,可逆矩阵的秩就等于矩阵的阶数,不可逆矩阵的秩小于矩阵的阶数。所以,可逆矩阵又称为满秩矩阵,不可逆矩阵(奇异矩阵)又称为降秩矩阵。

之前我们在复习行列式以及逆矩阵的时候,总觉得少了些什么,现在有了矩阵的秩的概念之后,这些知识就能串起来了。

代码计算

同样,numpy当中也继承了计算矩阵秩的工具。我们可以很轻松的用一行代码算出矩阵的秩,这样我们在判断矩阵是否可逆的时候,就不需要通过行列式来判断了。因为矩阵秩的计算要比行列式的计算快得多。

import numpy as npnp.linalg.matrix_rank(a)

有了矩阵秩的概念之后,我们后续的很多内容介绍起来都方便了许多,它也是矩阵领域当中非常重要的概念之一。

线性方程组的解

我们理解了矩阵的秩的概念之后,我们现学现用,看看它在线性方程组上的应用。

我们之前在介绍行列式的时候,曾经介绍过n元n个等式的方程组的解,可以用行列式表示。但是现实当中我们遇见的方程组并不一定是n元n等式的,我们推广到一般的情况来看。假设当下有一个n元m个等式的方程组:

我们可以将它写成矩阵相乘的形式:

我们利用系数矩阵A和增广矩阵B=(A,b)的秩,可以和方便地看出线性方程组是否有解。我们先来看结论:

当R(A) < R(B)时无解

当R(A) = R(B) = n时,有唯一解

当R(A) = R(B) < n时,有无数解

证明的过程也很简单,主要就是利用矩阵秩和最简矩阵的定义。

我们假设R(A)=r,并将B矩阵化简成最简形式,假设得到的结果是:

(1)显然,当R(A) < R(B)时,那么矩阵中的,那么第r + 1行对应的方程0 = 1矛盾,所以方程无解。

(2)如果R(A) = R(B) = r = n,那么矩阵中的,并且都不出现,所以我们可以直接写出方程组的解:

此时,方程组有唯一解

(3)如果R(A) = R(B) = r < n,则B中的

,我们写出对应的解:

由于参数

可以取任意值,所以方程有无数解。上面写出的解的形式即是线性方程组的通解。

齐次线性方程组

如果我们将上面的线性方程组的常数项都置为0,就称为齐次线性方程组,如下:

齐次方程组最大的特点就是当

时一定有解,称为方程组的零解。我们还通过增广矩阵来判断,写出来其实还是刚才一样的形式:

和非齐次线性方程组不同的是,我们可以断定

,如此一来就不存在无解的情况。这个时候我们要判断的就是方程组是否存在非零解,我们一样通过矩阵的秩来判断,判断的条件也很简单,如果R(A) = n,则不存在非零解,如果R(A) < n,则存在无数组非零解。我们先写出R(A) = n的情况,这时候的矩阵Bf为:

也就是说:

当R(A) < n时方程组和非齐次方程组类似,唯一不同的是可以确定

,我们直接带入之前的通项公式,可以得到:

线性方程组的解的公式和计算本身其实并不重要。因为在实际的算法领域,用到的也不多。但是理解线性方程组对于理解后面的向量以及线性空间非常有帮助,文中的公式看着恐怖,但冷静下来真的去试着理解一下,会发现也就那么回事。

java 矩阵求秩_线性代数精华3——矩阵的初等变换与矩阵的秩相关推荐

  1. numpy求逆矩阵_线性代数精华2——逆矩阵的推导过程

    点击上方蓝字,和我一起学技术. 上一讲当中我们复习了行列式的内容,行列式只是开胃小菜,线性代数的大头还是矩阵. 矩阵的定义很简单,就是若干个数按照顺序排列在一起的数表.比如m * n个数,排成一个m ...

  2. matlab非同秩矩阵相乘_线性代数精华——讲透矩阵的初等变换与矩阵的秩

    这篇文章和大家聊聊矩阵的初等变换和矩阵的秩. 矩阵的初等变换这个概念可能在很多人听来有些陌生,但其实我们早在初中的解多元方程组的时候就用过它.只不过在课本当中,这种方法叫做消元法.我们先来看一个课本里 ...

  3. java求秩_张量分解浅谈(二 CP NMF 张量秩)

    欢迎大家来到这一期的张量分解博客学习,本期博客的主要内容就是标题,难度会加大,本人也有写的错误的地方,烦请大家不吝赐教! 一. CANDECOMP/PARAFAC分解法 CANDECOMP(canon ...

  4. 【机器学习】线性回归之Normal Equation(矩阵求导与线性代数视角)

    Normal Equation 之前我们用梯度下降来求解线性回归问题的最优参数,除此之外我们还可以用正规方程法(Normal Equation)来求解其最优参数. Normal Equation方法的 ...

  5. 矩阵的奇异值分解_线性代数31——奇异值分解

    奇异值分解(Singular value decomposition)简称SVD,是将矩阵分解为特征值和特征向量的另一种方法.奇异值分解可以将一个比较复杂的矩阵用更小更简单的几个子矩阵相乘来表示,这些 ...

  6. 如何将一个向量投影到一个平面上_线性代数19——投影矩阵和最小二乘

    一维空间的投影矩阵 先来看一维空间内向量的投影: 向量p是b在a上的投影,也称为b在a上的分量,可以用b乘以a方向的单位向量来计算,现在,我们打算尝试用更"贴近"线性代数的方式表达 ...

  7. 二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧

    本文是我在阅读Erik Learned-Miller的<Vector, Matrix, and Tensor Derivatives>时的记录,点此下载. 本文的主要内容是帮助你学习如何进 ...

  8. 【机器学习中的矩阵求导】(七)矩阵向量化复习

    学习总结 (1)矩阵乘法. Vec⁡(ABC⁡)=(C⊤⊗A)Vec⁡(B)\operatorname{Vec}(\operatorname{ABC})=\left(\mathbf{C}^{\top} ...

  9. c语言矩阵求伪逆算法pinv,pinv--求矩阵的伪逆矩阵

    pinv--求矩阵的伪逆矩阵 [功能简介]用于求矩阵的伪逆矩阵. [语法格式] 1.B=pinv(A) 函数返回矩阵A的伪逆矩阵.如果矩阵A是可逆(非奇异)的,那么pinv(A)与inv(A)的结果是 ...

最新文章

  1. 为什么很难训练深度神经网络?
  2. Wireshark如何选择多行
  3. VTK:隐式球体用法实战
  4. 自考计算机英语答题技巧,自考英语题型答题技巧-自考英语写作
  5. Andorid中使用Jsoup解析库解析XML、HTML、Dom节点---第三方库学习笔记(三)
  6. scala Ordering
  7. 隐马尔科夫模型(Hidden Markov Models) 系列之四
  8. 那些属于我自己的牢骚
  9. 如何在 Pr 2020中使用音轨混合器?
  10. 外部类与嵌套类的区别
  11. 57. 局域网控制者:Proxy 服务器
  12. selenium自动化测试之鼠标模拟操作
  13. Android 使用图片缓存,避免OOM(实现照片墙)
  14. 测试键盘是否灵敏的软件,u盘启动大师pe检测键盘灵敏度图文教程
  15. java 大小写_java中如何进行大小写字母转换?
  16. Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码
  17. laravel学习笔记------使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理
  18. p9官方root,p9官方包198网盘分享
  19. 关闭 Gatekeeper
  20. Docker学习--Docker镜像的管理操作

热门文章

  1. Ubuntu16.04安装MATLAB2018a并进行破解
  2. 使用CMake编译Caffe的项目
  3. java编程实现删除一个文件夹_Java实现文件夹删除方式总结详解
  4. springboot实现简单的注册登录功能
  5. Grasshopper 二次开发 (C#) Part 3 - Write Simple Plug-in for Grasshopper in Visual Studio
  6. android应用窗口模式,教程:让你的安卓像Windows一样实现程序窗口化运行
  7. 浙大概率论与数理统计第4版答案
  8. Redis 复制、Sentinel的搭建和原理说明(转)
  9. 大数据技术原理与应用(第二章 大数据处理架构Hadoop)
  10. Wio Terminal 读取 AHT10 传感器