漫谈线性组合

柏舟   新冠3年 11-18

漫谈线性组合

若存在不全为0的ki,则alpha之间线性相关,否则线性无关。

线性组合、线性无关是线性代数里面最基础的概念。但是,线性组合不仅只是一个数学概念,更是一个认识论。

级数

很多数学概念都与线性代数有关。比如:Taylor级数,傅立叶级数。

这就意味着,适用于欧式空间的性质可以扩展到傅立叶空间,或者说频域。也许内积的计算方式不同,但是只要满足内积空间的定义,那么内积空间的性质就能共用。

微分方程和数列

数列的递推公式有特征根,线性微分方程也有特征根,本质上他们都可以化成一阶线性微分方程组,通过求矩阵的特征根获得。而自动控制原理,无非是对微分方程的分析,传统的方法是从时域和频域分析,现代的方法是分析一阶线性微分方程组;还有计算机控制原理,本质上微分离散化,以及相关的分析方法。可以很容易的写出向前差分,向后差分的矩阵算子,无非是前项减后项除以时间,之后进行矩阵运算。线性微分方程离散化的结果就是一个数列的公式,其中的系数与采样时间有关,这也是数列有特征根的原因。

数学推理本身

线性组合的思考方式当然不仅仅局限在发现这些概念的共通之处,而是在于它们共通这件事本身。就如同欧式几何的五大公理,可以导出很多性质,导出的过程本身就是将公理作为基,性质就是基的线性表出。同样的,解题过程就是将题目的条件和公理作为基,解题的答案就是它们的线性表出。

力学

力学分析的思路无非是运动学和牛顿力学,或是能量和动量。它们之间各是一组线性无关的基,可以相互转换。而实际对物理建模,无非是引入运动学和牛顿力学作为基,或能量和动量作为基,然后引入对应的自由度,导出结果。那么,如何对模型进行更加精确的建模呢?无非是导入更多自由度,或者说新的基。比如:引入转动或动量矩,引入材料的形变或者应变能。 在物理世界中,引入的基越多,那么就能够对模型进行更加精确的建模,但是基之间一定得是线性无关的。

软件

代码逻辑本质上是if-else和数学计算的线性组合,但是,显然不仅于此。因为,任何的软件都是有副作用的,或者说,有输出的,否则软件使用者就无法获得任何结果。所以,编程语言不仅有if-else基和数学计算基,还可以导入其他模块作为基,比如:文件系统基,网络基。当然了,当年的plan9将网络接口、进程等等都视作文件,无非是使用文件的基础操作作为基,对对应领域的对象进行“线性”表出罢了。

从软件设计角度出发,可以通过线性组合得出一组设计原则。首先,将对用户提供的接口视为一组基,那么接口之间一定要保证无关。这是因为从基中取出任意一组子基,它们一定线性无关。用户将要实现的功能一定是用到一组接口的子基,而如果接口之间线性相关,那么用户可以使用的接口子基数量不唯一,这将给用户或者开发人员带来不必要的困惑,导致后期很难维护。所以,面向对象编程中,结构体一定不要存中间变量,结构体元素之间一定保证线性无关,如果一定需要保存中间结果,那么应该新建一个结构体将中间变量和线性相关的变量封装起来,保证对外的方法线性无关。

其次,不一定要暴露所有的基。领域驱动建模中,最终需要提供给开发人员或者客户一个简明的能够满足需求的模型。这就要求,我们需要对基进行裁剪,选择其中最核心的部分(对应矩阵运算就是SVD),进行线性组合,最后使接口之间正交。

所以,从线性相关的角度对系统架构设计,其实与单一职责原则,开闭原则等说的是一回事。

认识论

上面的都是从基的角度分析的,线性代数还有空间的概念,我对空间的理解是,空间中有一组基,和一组运算,使用基和运算可以表出一个值域,这个值域就是空间。

可以注意到,现实生活中,任意一点的信息是无限的,从微观到宏观,从过去到未来。不仅如此,世界上并不存在什么数字1,力,运动什么的。所有的一切的一切,都是人臆想出来的,臆想并不是说物质的存在取决于人的想象,而是说,物质的信息是无穷的,但是物质的性质是由人意识中使用的基表出的。人描述数量,就可以使用数学空间,现实中存在一支笔,但是不存在“1”本身;描述力,就可以使用力学空间,现实中存在钻木取火,但是不存在摩擦力本身。

你可以发现,哲学上有很多类似的说法,比如维特根斯坦的图像,经验哲学等等,这些认识论,本身就是一个空间,只要它本身的维度有限,那么它一定是没有办法描述世界的全貌。所以,至少目前来看,还没有一个理论可以描述一切。你还可以发现,以上表述本身也是一种表述,那么表述本身能够自洽吗?语言本身的基又是什么?人有极限吗?语言限制了人的极限还是人限制了语言的极限?