赞
踩
本文主要内容转载自微信公众号:编程珠玑
原文链接
先谈一谈我为什么要写这篇文章:(不愿意看博主唠叨的读者可跳过)
这几天蒟蒻博主学线性代数学傻了,发现自己好多东西其实没有搞清楚。之前一些东西,一直以为自己是学懂了的,一个偶然的契机却让自己脑子里建立的可怜的线代知识体系直接崩塌。积累起来的问题一个个出现,心态被搞炸了。一个很抽象又很现实问题摆在我眼前:
线性代数,究竟是什么?
在博主还没有意识到问题的时候,脑子里线性代数的知识大概可以罗列如下:
一. 线性方程组
研究对象:线性方程组的解的结构,具体实现为高斯消元法
二. 矩阵
研究对象:
1.加、减(此处不讨论)
2.乘、逆,核心为矩阵乘法的定义(计算方法有亿点点奇怪)
3.行列式 (计算方法也有亿点点奇怪)
4.秩
三. 空间向量
研究对象:
1.向量的旋转
2.向量的点乘
三大部分的关联大致罗列如下(有兴趣的朋友可以做一个mind map)
1.线性方程组与矩阵
1)线性方程组可以简写为矩阵(系数矩阵或增广矩阵),简化高斯消元过 程的书写
2)线性方程组的解的结构可以通过矩阵的行列式或秩来判断
3)线性方程组如果有唯一解,可以利用逆矩阵通过矩阵乘法求解
4)线性方程组如果有唯一解,可以利用行列式直接求解(克拉默法则)
2.矩阵与空间向量
1)矩阵可视为n个n维空间向量的组合
2)可以通过矩阵乘法来实现空间向量的旋转
p.s.事实上,博主的入门书籍《高等代数》(丘维声著)正是通过平面向量的旋转引出的矩阵乘法的定义
3)矩阵的乘法,可以视为向量之间的点乘
3.向量与线性方程组
线性方程组可视为向量的点乘,二者之间的联系均可由上两则关联导出,此处不再讨论。
此时,我的头脑还是“清醒”的,直到某一天,讲了三维空间向量的叉乘。所有潜伏的问题一起被引燃。
若 ab 均为三维向量:a x b 的结果表示一个垂直于 ab 的向量,其长度为 ab 所决定的平行四边形的面积。
而其坐标的算法使我大为震撼:
为什么?为什么用这个酷似行列式的算法,算出来的向量刚好就能很优美地同时具有上面两条性质? 难道仅仅是巧合吗?
另外,突然又想起,之前有听说过:行列式的本质是n维空间下,n个不共线向量决定的图形的有向面积。
一下子,就有一种毛骨悚然脊背发凉的感觉。以前学过的曾以为耦合度很低的几个部分,像是突然就形成了一个闭环一样。分开的时候都认识,做题时毫不含糊,但是当这些一合起来,才发现自己从未真正认识它们。
我相信这不是巧合。花了很多个小时,到处看文章、找博客,CSDN博客园等各大社区都被我翻烂了,然而还是没有找到自己想要的。
难道只有我一个人不懂那些“巧合”背后的逻辑的秘密?我不禁陷入自我怀疑。我把自己的疑惑讲给以为大佬听,大佬也有些震惊,他表示没有想过去把那些知识点串起来,30min的思索后,大佬说他也不知道怎么很好的解释。
现在,我终于知道为什么很多前辈都推荐我去看国外的书籍和MIT等国外高校的公开课了。很多本质的东西,国内的教材根本不去讲。
所幸,功夫不负有心人,终于找到了一篇值得推荐给大家的文章。博主的疑问,终于有一部分能够被解答了。
原作者的一句话深深触动了我,我认为那就是我花十几个小时茶饭不思地去思考上面那些问题的原因
:
证明的本质不在于纯粹的观察其计算结果,而在于深刻理解其背后的实际意义。
正文:
没有任何东西比几何图形更容易印入脑际了,因此用这种方式来表达事物是非常有意义的。
——笛卡尔
证明的本质不在于纯粹的观察其计算结果,而在于深刻理解其背后的实际意义。
——刘亚曦(数学专业的同学请跳过,让我装一下13)
多年以前,当我还坐在大学课堂上听课的时候,曾经有一门课程让我感到非常的困惑,也就是《线性代数》这门课程。我同大多数同学一样,不止一次地怀疑过这门课程到底有什么用处,我也请教过我们的线代老师,但得到的答案却无外乎是锻炼思维,或者工程技术研究之类的回答。我们的教材是同济版的那本,现在回头看看,其实这本教材编的实在是太仓促了,里面几乎所有的概念都介绍的非常笼统,直接给你个定理,然后就开始证明,从来不不告诉你它的来历与用途。导致大多数人习题做的很好,但要问这些内容的本质是什么,他就回答不出来了。所以,正是由于这种困惑,当年我在业余时间曾经花了相当长的一段时间在图书馆研究这门课程,尽管那时候确实有一定深入的了解,但依然停留在只会做题的阶段。
然而直到后来工作后,我工作的内容跟图像处理算法有关,经常要写一些算法,这时候大学学的的线性代数的知识才映入眼帘,更是让我发现了发现线性代数的威力所在。我之所以写这篇文章,目的是想跟大家分享一些我自己对线性代数的理解与应用,尤其是跟那些从事于机器人工程学,计算机视觉等领域的人,同样,还有一部分人就是刚接触线性代数的学生们来说,或者考研人,换一种眼光来看待线性代数,也许你会发现线性代数比你想象的有趣得多。为了更加形象化,我在结尾的部分给出了示例代码。鉴于自己的水平所限,这篇文章权当抛砖引玉,内容难免有错误之处,还望大家的指正。如果你想领取本文的源代码以及素材的话,关注我的公众号,回复“线性代数”四个字即可领取。
现在请仔细回想一下,当初你学习《线性代数》这门课程的时候,是否产生过以下几种疑问:
1)线性代数为什么被称为线性代数,究竟「线」在哪里?
2)行列式的计算法则为什么那么奇怪,究竟是谁「规定」的,行列式的本质又是什么?
3)矩阵乘法规则为什么那样规定,矩阵乘法为什么不满足交换律?
4)克拉默法则求解线性方程组的实际几何意义在哪里?
5)逆矩阵的的「逆」到底「逆」在哪里?奇异矩阵为什么没有逆矩阵?
6)矩阵的Rank为什么不直接翻译成「排名」,而是莫名其妙地被翻译成了「秩」,秩的本质又是什么?满秩矩阵(Full Rank)「满」在哪里?
7)如果P^-1AP=B,那么矩阵A与矩阵B相似,这里相似矩阵到底「相似」在哪里?
8)如果Ax=λx,那么λ被称为矩阵A的特征值,特征向量和特征值到底「特征」在哪里?
如果你也有上面的疑问,那我敢肯定你也没理解线性代数的本质,同时恭喜你中奖了,想必你在大学时期用的也是同济版的线性代数教材,关于同济版教材的缺点我就不多说了,我们更关心的是,线性代数到底有什么用处呢?
首先举个一定令你惊讶的例子,向自己的女神表白。什么,线性代数居然可以表白,逗我呢?你听后一定非常惊讶,但是确实可以这样做,不信你看:
我喜欢你,就像这个行列式,上面是521,中间是125,下面是1314,无论经过多少轮转置,海不清,石不烂,结果亘古不变,永远是520.
哈哈,你没看错,这个行列式堪称为线性代数中最浪漫又最神奇的行列式了,不信你可以计算一下,这是不失理工男的典雅又不缺文艺人的浪漫的撩妹技能,当年我在学校就是用这种方法差点追到数理系的一位妹纸的。哈哈,开个玩笑哈。
想必看到这里,你一定非常惊讶吧,线性代数居然如此之美,为什么之前没有发现呢。生活不缺少美,而是缺少发现美的眼睛,同样适用于数学。当然,线性代数的美,远远不止这些,在这里就不多举例子了,而我们最关心的是,线性代数究竟在那些领域有用处呢?
第一, 机械工程学。嗯,没错,我就是这个专业的,作为机械专业的学子,三大力学(工程力学、材料力学、理论力学)是我们的必修课,一些重要的力学模型都要用矩阵分析,例如组合变形杆件的刚度分析,等等。同样机械专业的ANSYS有限元分析软件,底层的算法也是在求解大量的线性方程组。
第二, 计算机科学。要知道,矩阵相乘的几何含义就是对一个向量进行一次线性变换(下文我会详细说到),所以凡是涉及到图形学,几乎都有线性代数的身影。例如最经典的也算是最简单的平移变换与旋转变换,这种变换与电视广告中产生的文字与动画常常有关。再举个例子,在玩吃鸡、英雄联盟等大型3D游戏的时候,背后的强大的游戏引擎开发也离不开线性代数。
好了,我只举上面两个领域,因为只对上面两个领域有一定了解,但线性代数的应用远远不止这两个领域。抛开这个话题先不说,让我们带着本文最开始的时候,我举的那八个问题,先来深入理解一下线性代数。而线性代数最基本也是最重要的一个问题,就是线性变换,这个概念往往最容易被初学者所忽略,然而它却是最重要的。我写这篇文章的主要目的在于引导你用线性变换的概念去理解线性代数,所以我会用大量的篇幅去介绍这一概念。为了更加直观,下面所有的矩阵我会尽量用二阶矩阵来作为例子进行说明,一旦你理解了线性变化这个概念,我保证,所有生涩难懂的概念例如行列式、逆矩阵、特征值、等等你都将会在你脑海里面迎刃而解。
首先第一个问题,线性代数为什么称为线性(linear)呢?在这里我们先回顾一下初等数学对线性函数的定义,在初等数学上线性可以理解成一阶导数(dy/dx)为常数的函数,也就是说凡是满足
的形式,都可以称为线性函数。而对于线性两个字,基本的定义就两个:可加性与可比性。如果一个函数满足:
那么它就是可加性,如果满足:
那么他就是可比性。而线性代数里面的线性的含义也与初等函数代数的直线方程有类似的性质。那么究竟该如何理解线性代数里面的线性这个词呢?在这里也有多种方法,而我喜欢的方式则是:
把一个空间内做一次有规律的变换,如果这个变换满足以下两个性质:
1),空间内的直线在做变换后依然是一条直线,不能弯曲。
2),空间的原点位置保持不变。
那么我们就称这种变换为线性的。因此,线性代数里面的线性与初等数学里面的线性稍有不同,因为线性代数不研究坐标原点的移动,所以他的形式就没有那个b了。
相比传统生涩难懂的数学公式,我更喜欢用几何的方式去解释线性代数,包括后面几乎所有的定理我都会尽量用几何的语句去解释每一个公式。为了更加清晰理解这个定理,我举一个直观的例子,如果一个二维空间内布满了网格,请把这个空间想象成一块无限大的一块海绵。假如你手上有一块海绵,海绵上面布满了等距等分的网格线,单位长度为1,且互相垂直。为了方便,我选择黄色的那条线为参考线,原始海绵长这样:
这就不是线性的,这是因为海绵网格不等距等分。而最终的结果是让原本是直线的黄线,变成了曲线。
说到这里,你一定已经看出我这种几何解释方法有点不严谨了。对,因为这种说法忽略了对网格的任意刻度的比较,正确的说法应该是让无论在横向还是纵向,无论网格任何一点,伸缩变换后的网格对比伸缩后的网格均有:
其中,x,f(x)分别为海绵网格中任意一点在变化前与变化后的横坐标位置,y,g(y) 分别为海绵网格中任意一点在变化前与变化后的纵坐标位置。这是一个严谨的解释,但是今天我更想抛弃这些繁琐的数学公式,用几何的方法给大家以直观的方式来解释一下线性代数的含义,文中难免出现一些不严谨的地方,还请大家见谅。
为什么线性如此重要呢,这是因为线性问题一般情况下只要我们知道不超过两个已知量,就能通过线性关系计算出其他任何未知量。而更加庆幸的是,即便工程中遇到一些非线性问题,我们依然可以通过一些巧妙的转化(回忆一下微积分中的求曲线的长度问题)来把它转化为线性解决。
那么你可能会问,我举这些例子究竟跟矩阵有什么关系呢?先别急,我们先来看一个三元一线性次方程组:
其中D为系数方阵,D1,D2,D3分别为用结果向量去替换系数矩阵对应某列的列向量得到的方阵,两者对应的行列式相除,便是对应的解。关于克拉默法则的几何意义解释,下文我会详细说到。
因此,聪明的你,你一定大致猜出来矩阵与列向量相乘的几何意义了吧,对,没错,我们这里可以把右边的系数矩阵A看作是对列向量的某种作用法则,未知数与值分别看作三维空间内的一个向量或者一条直线,也就是说,在三维空间内,系数矩阵A将向量(或者说经过坐标原点的直线)X映射(map)成了直线Y,或者说,在求解这个方程组的解的几何意义就是,如何找出一个列向量X,在作用法则A的条件下,变换后恰好与列向量Y重合,够直观吧。这个理解非常重要,它直接能影响到你后矩阵的理解。矩阵就是一种变换,确切地说是空间的一种线性变换。奇怪的是,这么重要的直观理解,在同济版教材里面,竟然很少有提到,貌似只在那旋转矩阵一节提到过一点点,而这却恰恰是矩阵的本质含义,令人匪夷所思。
那么我们该如何理解这种变换呢,也就是说,究竟是如何通过一种变换规则,将输入一个向量,转换成另外一个向量呢?回答这个问题之前,我们先来回想一下中学时代学过的基向量。
为了直观,我们就以二维空间为例,在空间坐标系内,任何一个向量都可以通过两个模为1的基向量i与j来表示,其中
也就是说,一旦确定了基向量i,j,那么,我们就确定了空间内所有的向量,中学时代我们定义的基向量模一定是1,并且两个基向量正交。我们先来看一下,上图那个向量V=(2,3)究竟与其基向量有什么关系:
上面的式子是在原始空间坐标内,用i,j来表示V的,如果我们再回到开头我举的海绵的例子,把这个空间进行等距拉伸分放大一倍,由于是线性关系,所以空间内所有的向量都必将也放大一倍,包括基向量:
被放大的基向量组成了被放大的空间,也是就是新的空间。我们再来看这个向量V如何表示,其中基向量被改变。
因此,我们做一个大胆的假设,任何一个向量被一个矩阵左乘(也即线性变换),实际几何意义就是在这个向量所在的空间的坐标系被进行了更换!新的坐标系中,基向量就是这个矩阵的两个列向量!简单来说,线性变换的意义就是用新的基向量来表示原本向量。在这里,我特别说明一下,矩阵的线性变换是一种对空间的操作,而非对空间内某一对象的操作。举个直观的例子,小明手里面钟表的时针指向原本垂直向上,后来变成了水平向左,我们应该把它理解成是小明把整个钟表逆时针旋转了90度,而非小明把时针逆时针拨了90度,尽管它们两种的操作效果相同。这样理解对你后期理解矩阵的各种性质非常有帮助。
上面我说了,一旦基向量确定后,空间坐标系也就确定了。所以,新的基向量组成了新的坐标系,也就是在新的坐标系下,列向量B的表示方法由(x,y)被左边矩阵映射变成了(ax+cy,bx+dy),
但同时,不要忘记我上面说过的:矩阵的线性变换是一种对空间的操作,而非对空间内某一对象的操作。也就是说,之所以输入向量会变成新的输出向量,并不是因为向量本身变了,而是因为向量所在的空间变化,进而引起输入向量的变化。
为了更加直观,我把上面的代数公式用数字的方法替代,请看下面的图片(图片是我自己直接用CAD绘制的,不好意思,有点粗糙,哈哈):
假如一个列向量
上面说过,矩阵左乘列向量的意义就是把这个列向量做线性变换,输出新的向量。因此,我们可以得出矩阵与矩阵相乘的几何意义就是一个复合变换,这个变换就是左边的矩阵分别与右边矩阵的列向量相继变换,组成一个新的基向量。在这里,我举两个重要又常用的矩阵:旋转矩阵与剪切矩阵,为了更加直观,我先来绘制一下原始坐标系,里面的四边形ABCD作为参照物:
最终的变换结果在两张图像上并不相等,两者结果并不相同,这也说明了矩阵的乘法一般不满足交换律。
那么,矩阵乘法为什么满足结合律,也就是说如何证明(AB)C=A(BC)呢,当然你可以用最传统的方法来证明,也就是直接将他们依次相乘,经过左右两边数值的展开代计算,结果必然相等。但是这种证明方法简直是囫囵吞枣,还是那句话,证明的本质在于深刻理解其含义,而非代数本身。这种方法你除了练习了那么一丁点动手能力,其余的什么也学不到。但是如果我们用线性变换的方法来解释证明,则容易多了:
我们假设AB=M,BC=N那么左边=MC,实际几何意义是先进行C变换,再进行M变换,也就是先进行C变换,再进行B变换,再进行A变换;而右边=AN,也就是先进行N变换,再进行A变换,同样也是先进行C变换,再进行B变换,再进行A变换。证毕
讲到这里,线性变换的概念基本说完了,想必你也一定有所了解了,如果没理解,也没关系,下去可以多花一点时间,多思考一些。
一旦你理解了矩阵的相乘就是线性变换的概念,后面的问题就好解决了。这也是我为什么花大量的篇章来介绍这一概念。
我们再来说行列式。由于前面说过,矩阵的线性变换其实是对线性空间的伸缩,那么这个伸缩量是多少呢?答案就是这个矩阵对应的行列式。说到这里,再次吐槽一下同济版的教材,居然先讲解行列式再讲解矩阵,这好比先给你讲解圆周率再给你讲解什么是圆一样的。这里为了方便,我就用二阶行列式来作为引入对象:
其实,行列式A的实际几何意义也有两种,一种是把行列式对应的矩阵作为基向量,那么它就是对基向量组成的单位正方形做的放大或者缩小比例系数,也即线性空间的缩放倍数;另一种是,对应矩阵的两个列向量围城的平行四边形的面积。我个人推荐第二种,更加直观一些。下面给出证明方法:
我们观察图形,很明显,变换后的两个基向量居然共线了,而这时候它们对应的行列式必定为0.但是,这样造成了一个很不舒服的情况就是,除非结果向量V与基向量i或者基向量j共线,否则无论他它两个怎么组合,都无法表示出那个黄色的结果向量。也就是说,奇异矩阵的几何意义就是讲高维度进行了降维操作,上图就是将二维平面压缩成了一条直线,同样,你永远无法把一条直线寻找一个逆变换再恢复成一个平面,因为过一条直线的平面有无数多个。这与函数的映射概念相违背。因此奇异矩阵没有逆矩阵。
这时候,我们再来看看那八个问题中的矩阵秩(Rank)的概念。实际上,秩的本意是线性变换后空间的维数(再次想吐槽一下同济版的,没给出秩的实际意义,奈何我已无力吐槽)。例如
显然R(A)=2,也就是说它是一个满秩矩阵,因为秩数等于列数。它没有对空间进行压缩,变换后依然是一个二维平面,但是下面:
经过初等行变换后,R(B)=1<2,这个线性变换对空间进行了压缩,将一个平面压缩成了一条直线。我们也可以称它为假二维平面,秩数小于列数,它是一个非满秩矩阵。不能完全表示出它原本应该的面貌。
那么为什么Rank翻译成秩呢,在这里,如果你看一下汉字秩的本意,也许你就会恍然大悟了。哈哈,由于这里不是说文解字,我在这里就不多解释了。但是这里我想再留下一个问题:请用几何的方法去解释下非齐次线性方程组Ax=b有解的充分必要条件是R(A)=R(A,b).
一旦你理解了线性变换,那么克拉默法则的几何意义也就更加直观了。为了几何从集合角度解释这一定理,也更加直观,我还将空间的维度降低,就以二元线性方程组为例来说明:
根据几何关系,这个问题变成了:我们如何寻找两个数x,y,使得xi+jy组成的向量恰好落在(7.5,5)上面呢。我们看上面这张图片,四边形ODHC,OAFD分别是结果向量与两个基向量组成的平行四边形,根据平行四边形的关系,不难看出:
证毕。
可见,方程组的解分别是在基向量基础之上,将平行四边形伸缩的倍数,这就是克拉默法则在二维空间的几何意义。同样,在三维空间内,并扩展到n维空间内,请思考一下克拉默法则代表什么几何意义。
----------------------------------------------------------后文略-----------------------------------------------------------------
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。