《线性代数》随笔:学以致用

线性代数就是把一组数通过线性组合得到另一组数。所谓的线性组合,就像买菜一样,我可以买半斤青菜、两根胡萝卜还有一棵西兰花――都是把每种菜乘上一个常数最后加起来算个总账。我绝不会说我要买青菜乘上萝卜、或者西兰花除以两斤青菜。菜和菜之间的乘除是毫无意义的。所以买菜就是一种线性组合。

我之前说到过,我是因为工作上写程序要用到才去重新学习了线性代数。这其中所涉及的问题其实大家在高中就经常做这类的题目,就是坐标变换。在数学家的眼里,所有的几何图形都是数字或公式。这其中最基本的就是点,而平面上的点就可以用两个数:X坐标和Y坐标表示,空间里的点只要多一个Z坐标就可以精确地表示了。点可以构成线、构成面、构成体,要表示一个物体的,只要给出足够多的关键点的坐标就可以了。

用数来表示点的目的自然是要用数的计算来表示点的关系了,经过总结和分析,刚体的运动都分解成为位移和旋转的组合。

比如小明从家到学校的线路从家里出门开始,可以分解为:

1. 向前100米

2. 左转90度

3. 向前50米

4. 右转90度

5. 向前50米

6. 左转45度

7. 向前200米到达学校

幸运的是,坐标的变换可以表示成为坐标的线性组合。也就是说,从原坐标到新坐标只要乘上一个矩阵就可以了。

二维坐标位移和旋转的基本变换矩阵是现成的:

位移:

旋转:

为什么计算二维坐标要用三阶矩阵呢?那是因为位移变换要给每一个坐标分量都加上一个常数,而在2阶矩阵里每一项最终都会和x或者y相乘,不会有独立的常数存在。解决方法很简单,把二维坐标增加一维,变成(x, y, 1),这样乘出来的结果里就有一个会和1相乘,也就允许常数项存在了。有了基本矩阵,任何复杂的变换就可以写成一系列矩阵相乘了。

现在我们再来看小明到学校的路,如果以小明家的坐标为原点,面向Y轴正方向前进,那学校的坐标就可以表示为:

其中O是原点坐标,Fxxx是前进矩阵,Rxx是右转矩阵,Lxx是左转矩阵。

到了三维空间,以上结论同样成立,只不过矩阵变成了4阶,并且旋转矩阵包含更多信息。因为不同于二维平面只有维一一根转轴,三维空间里任意直线都可以成为转轴,所以三维旋转矩阵里还包含了转轴方向的内容。

三维空间的情况的稍微复杂一些。联想体操和跳水比赛的动作解说,又是向前向后翻腾,又是转体,这其实就是运动员绕不同转轴在旋转。跳水也许不是一个好的例子,因为人体能屈能伸,所以不是刚体。

我们可以想像有一根筷子也想来体验跳水这项运动,它是名符其实的刚体,它选择的动作是向前翻腾3周半,接转体270度,再接向后翻腾2周最后落到地上,那它落地的时候是头朝地还是脚朝地呢?

这个脑洞大开的题目要是用坐标变换去解,只需将筷子初始方向写成一个矩阵,再乘上三个旋转矩阵马上就可以得到答案。

三难空间的坐标变换另一个重要的应用就是计算机三维图形了,这也是我工作涉及的内容以及我学习线性代数的源动力。我们在3D游戏里看到的所有的东西,都是计算机程序将数以万计的基本图形(三角形)通过坐标变换显示在二维屏幕上的,而这些坐标变换无一不是由矩阵相乘来实现。你没看错,坐标变换还可以把三维图形转换成为二维图形。这个变换矩阵称为投影矩阵,它的名称和原理都来自于实现世界中光照到物体上投到地上或墙上的影子,这叫作正投影。另有一种更加常用的投影方式可以在屏幕上投影出近大远小的效果,叫作透视投影。

除了位移、旋转和投影矩阵外,计算机还用到了一个缩放矩阵,把三维图形放大缩小,这样游戏中同样的东西,大小不同就不需要做两份了。三角形和四种基本矩阵一起,构成了我们在屏幕上所看到了纷繁复杂的三维虚拟世界。

如果只是这样,坐标和矩阵乘一乘就好了,纯粹体力活,不会引起我啃数学书的兴趣。真正吸引我的是这个过程的逆向过程。我们已经能接受了屏幕是二维的,计算机只要把三维图形乘上一个由程序员指定的矩阵就可以不费力地显示在屏幕上。可是事情还没完,用户的鼠标输入也是二维的,鼠标在屏幕上点击了一下计算能得到这个屏幕上点的二维坐标,可是怎么才能知道这个二维点对应的是三维世界里的哪一个物体呢?是让程序员再指定一个反向的矩阵么?好像不实现,因为程序员也不知道这个矩阵是什么,就算知道,以我们心性也绝对懒得去做。怎么办?读书去!

于是就有了这个随笔系列,前一篇已经讲了,对于任意一个矩阵乘法:

都可以找到一个M的逆矩阵或者叫倒数,使得:

只要求出所有正向矩阵乘积的逆矩阵就可以。哇,天才啊!




《线性代数》随笔系列首发于微信公众号:龙猫图书馆,这是由猫馆长发起的小资文艺青年聚集之所,欢迎关注。

时间: 2024-11-04 11:00:00

《线性代数》随笔:学以致用的相关文章

《线性代数》随笔:积少成塔

朝花夕拾 勿忘初心 学以致用 青出于蓝 积沙成塔 上一篇说过,本篇我会给大家介绍传说中的“傅立叶变换”.首先要回答的就是什么是傅立叶变换?傅立叶变换在21世纪的今天我们每个人每天都在使用:手机信号从3G开始,到现在的4G.将来的5G所用的CDMA协议的核心就是对电磁波信号进行傅立叶变换.傅立变换的作用就是把杂乱无章的信号分解成一系列有规律的信号相加.打个通俗点的比喻,就像是烧菜.一锅东北乱炖烧好后,往锅里一看,乱七八糟什么都有.但是仔细查看,可以发现里面有5个豆角.2个土豆.10片西红柿.聪明的

《线性代数》随笔:朝花夕拾

朝花夕拾 勿忘初心 学以致用 青出于蓝 积沙成塔 线性代数是理科生大学里必修的一门课,我要很惭愧的说,我完全没学会,整个学期的所有课里我都在想一件事情:这个东西好复杂,学了能用来干什么呢?回想我从小到大上过的数学课: 小学里最早学的是加减乘除,解决了数数的问题:后来有了负数.小数和分数,不再受自然数的限制,可以随心所欲对任何数进行计算:进而可以进入几何,常见形状的面积计算不在话下:此时方程开始乱入,它的神奇可以让我们知道结果再去探究原因. 进入初中后,开始接触函数,明明还不知道自己写下的公式的具

《线性代数》随笔:勿忘初心

朝花夕拾 勿忘初心 学以致用 青出于蓝 积沙成塔 线性代数有多久神奇?问小学数学去.小学二年级的时候有一类题目让我记忆犹新,说是学校里买了4张桌子和6把椅子一共48块钱,如果买2张桌子和10把椅子一共要52块钱,问桌子多少钱一张,椅子多少钱一把?当时的解法想法讨巧,不知道现在的爸爸妈妈们还记不记得? 小学四年级,学了二元一次方程组,原来这道考试的附加题难道便下降为了普通计算题: 二元一次方程有一些标准的解法,比如代入法.消元法.它使我们可以完全只关心数字而不用再管它们的具体意义.问题的解决有了流

《线性代数》随笔:青出于蓝

朝花夕拾 勿忘初心 学以致用 青出于蓝 积沙成塔 通常,我们衡量两个点是否接近是用两点间的距离作为标准.一根直尺上的两点的距离只要简单把两个点所在刻度的值相减即可.如果到了二维平面上的两个点的距离,比如说一个边长为1的正方形的对角线的距离,我们就会用到勾股定理: 现进一步到了三维空间上的两个点的距离,比如一个边长为1的立方体的对角线的距离,可以将勾股定理进行扩展: 几何上的距离到此为止,代数很谦虚地从几何中学习了这个概念.对于一个向量坐标X=(x1, x2, x3... xn)定义了内积运算:

Caffe入门随笔

Caffe入门随笔 分享一下自己入门机器学习的一些资料:(1)课程,最推荐Coursera上的Andrew NG的Machine Learning,最好注册课程,然后跟下来.其次是华盛顿大学的Machine Learning系列课程,一共有6门,包括毕业设计(2)书籍: 机器学习(周志华西瓜书).机器学习实战.统计学习方法(李航).集体智慧编程.数学之美(吴军)(3)微博@余凯_西二旗民工:@老师木:@梁斌penny:@张栋_机器学习:@邓侃:@大数据皮东:@djvu9:@陈天奇怪(4)知乎@贾

[随笔] 老谢与Google的一次正面"交锋"

[随笔] 老谢与Google的一次正面"交锋" 一.废话 话说智能电视,国内液晶电视厂商确实引领着时代潮流.而从全球来看,继几年前Google I/O大会之后,也渐渐掀起一股智能电视热潮.Google Android开放系统在智能电视中的应用也开始崭露头角.Google和MediaTek在智能电视方向的绑定式发展也必将再次将Android智能电视的发展推向另外一个高度. 老谢有幸加入了Andriod大流,最近处理了一题,想和大家分享分享.与其说这次是老谢与Google的一次正面交锋,不

深度学习(deeplearing)(5月完成)共三部分 第一部分应用数学与机器学习(5.1-5.10)线性代数

第一章:线性代数: 学习一个新东西,首先要从概念开始,抓住其核心点 机器学习相关问题中,数据集多是以矩阵的形式存在,而模型的参数如W也是以矩阵或向量的形式存在,所以一个模型从数学的角度来说,就是矩阵间的运算,而运算中矩阵相乘的运算又是最常用的运算.本章后半部分讲解了在机器学习中会用到的一些矩阵运算的概念,如范数.行列式. 特征分解.奇异值分解等 一.基本单元:标量.向量.矩阵.张量 二.

机械随笔(y一)

过去最巧秒的机械往往是机械对机械自身的控制,然而现在往往只要一块电路板就行了(有点无奈). 可爱可畏的机电一体化. 人类社会第一个巨大进步,效率生产力的极大提高,人口的井喷来自工业革命,来自对钢铁肌肉的力量的首次挖掘利用.而今全球互联网的沟通促成的信息无限交流并未最大限度地提升人类生产力(更不用说某些的商业方面的模式创新).信息的交流是为生产力的提升打下坚实基础,当然强大的云计算也应该是未来生产变革中不可或缺的一环.最终的发展仍然要落实到制造的本体上,毕竟现在的人不可能靠数据流生活,很长很长一段

C#博客随笔之六:数据绑定

这一篇随笔记录的是在完成程序中遇到的一些情况 首先要讲的是MVVM 所谓MVVM就是Model,View,ViewModel 下面是MVVM的优点(引用自百度百科): MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点1. 低耦合.视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变.2. 可重用性.你可以把一些视图