图(Graph)是最常见和最强大的描绘客观世界的工具之一。这里的图不是指图片,也不是指函数曲线图,而是由节点(node)和边(edge)构成的,有时候我们也把它叫做网络(Network)。数学中有个分支叫组合学(计算机科学中的离散数学),这门学科有个重要的部分叫图论,图论就是研究和图相关问题的。
上面这个图包含
个节点和
条边,它的边是有方向的,所以这个图是
有向图(Directed Graph)。图中两个节点之间最多只有一条边,并且也不存在起点和终点是同一节点的那种像个小环状的边,所以这是个
简单图。图中任何两个节点之间都存在“路线”可以互通,所以这是个
连通图。
试想一下,如果任意两个节点之间都有一条边,那么这个图最多可以包含
条边。另一个极端,要保证这
个节点连通的最少边数是
条边。不管这
条边是采用何种形态将这
个点连在一起的,或许是“一条线”,或许有某个节点在“中心”(事实上,把图化简为树也叫
生成树spanning tree),这个图一定不包含
“环”(loop),我们把这种不包含环的图叫
树(tree)。相应的,每增加一条边就会产生一个环。比如上图中的边比树多了
条,相应的就有由边2-3-4和4-5-6构成的两个环。(我们只数小环,而不重复计算大环,因此,边2-3-5-6虽然也是环,但它不是我们关注的小环。后面我们将会看到,小环意味着独立,大环可以由小环“相加”构成。)
图和矩阵有天然的关联。与图有关的矩阵有很多种,比如在之前的文章《【2.3】正式谈谈矩阵的乘法和矩阵的逆》文末的例子中,我们就遇到了有向图的邻接矩阵(Adjacency Matrix)。邻接矩阵的行和列都代表节点,元素
代表节点
和
之间的边数。
关于图的邻接矩阵最重要的结论就是:有向图由节点
经过
步到节点
的路径有
条。
现在我们介绍与图相关的另一种矩阵:关联矩阵(Incidence Matrix),它是本文的主角。关联矩阵的行代表边,列代表节点,更清楚一些我们也可以叫它边-节点关联矩阵(Edge-node incidence matrix)。如果边
从节点
流入节点
,关联矩阵
就包含元素
,
。也就是说,关联矩阵的每行都包含一个
和一个
,其余元素都是
。“关联矩阵”和“邻接矩阵”这两个名字听起来有些混淆。
邻接指的是两个节点是否相邻,它代表节点之间的关系;而
关联指的是某个节点和某条边是不是有关联,它代表的是节点和边之间的关系。这里稍作解释,希望可以帮助读者记忆。
我们现在根据关联矩阵的定义,写出上面例子中图的关联矩阵
,行和列与图中边和节点的编号相对应。可以看出,这个矩阵是由
,
,
组成的绝大部分都是0的
稀疏(sparse)矩阵。
我们通过高斯消元将关联矩阵变为行阶梯矩阵
,我们发现消元之后剩下
条边将原图中
个节点连成树,原图中所有的环都消失了。事实上,环会破坏线性独立,组成环的边在关联矩阵中对应的行不独立,每个小环消元后都会产生一个全零行。
消元法将图变为树!
中独立的
个非零行组成树,全零行来自
个环!将关联矩阵
通过消元变成行阶梯矩阵
的过程就是我们之前学过的矩阵
分解:
,其中
和
都是只包含
的矩阵,
的四个基本空间:行空间
,列空间
,零空间
,左零空间
的基都可以由只包含
的矢量组成(零空间也不例外,
的列相加是
矢量;其它三个空间的基都包含在
中)。
本文的主要目的是用图建模一个电路,然后通过关联矩阵示例数学中的线性代数基本定理就是电路中的柯希霍夫电流定律和电压定律(Kirchhoff's Law)。
我们之前学习了矩阵的四个基本空间:列空间
和零空间
来自于
;行空间
和左零空间
来自于
。列空间
和左零空间
是
中的子空间,行空间
和零空间
是
中的子空间。这四个空间的维度和正交关系构成了
线性代数基本定理。
线性代数基本定理:行空间
和零空间
正交,它们的维度和为
:
。列空间
和左零空间
正交,它们的维度和为
:
。列空间
和行空间
有相同的维度
,它等于矩阵
的秩。
线性代数基本定理中四个空间的维度关系,我们已经在前几篇文章中学过了,它是线性代数基本定理的第一部分。四个空间两两的正交关系,它是线性代数基本定理的第二部分。两个矢量空间“正交”的意思是一个空间中的任意矢量都和另一个空间中的任意矢量垂直,也就是它们的点乘为
。由
不难证明行空间和零空间中的矢量垂直。同样,由
也不难得出列空间和左零空间中的矢量垂直,
的行,就是
的列。线性代数基本定理的第二部分,我们会在接下来的章节中仔细讨论。
下面我们来看一个电路图模型的例子,它的关联矩阵
。我们关心这个电路四个节点上的电压
和六条边上有电流
。 我们将看到
关联矩阵和电路特性紧密关联:
,
关联矩阵给出了每条边上的电压差;
,
关联矩阵的转置给出了流入各个节点的电流。电压差和净电流的矩阵互为转置,这是大自然的巧妙。
我们接下来研究
的四个基本空间:零空间
,行空间
,列空间
和左零空间
,我们将会进一步看到数学理论在电路理论中的体现。
使得
的矢量
构成了
的零空间。关联矩阵
每行只有一个
,一个
,其余都是
,所以这个矩阵所有列相加会得到
矢量,用矩阵的语言也就是
,所有
都在
的零空间
中。事实上
就构成了整个零空间,零空间的维度是
。我们可以通过消元法得到这个结论,
消元之后得到的行阶梯矩阵
不为
的行构成了一个树,
个节点的树有
条边,也就是
中有
个不为
的行,所以
的秩
。再由线性代数基本定理可知,零空间的维度是
,所有
构成了
的零空间
。
现在我们从电路的角度思考零空间的意义:
,差分矩阵
作用在节点电压上得到的
是每条边的电压差,
的零空间就意味着我们要找到四个节点的电压,使得每条边的电压差都是
。我们可以很直接的得到结论:各个节点电压都必须相等,这就是说
构成了
的零空间,我们得到了和线性代数理论一致的结论。
由线性代数基本定理可知:矩阵的行空间
的维度等于矩阵的秩
,行空间
和零空间
正交,而且它们的维度相加等于
。我们刚刚讨论过矩阵的秩为
,也就是行空间的维度为
,那些
条属于树的边构成了行空间的基,额外增加边就会构成环而破坏独立。线性代数基本定理还告诉我们行空间
和零空间
正交,行空间中的所有矢量都和
垂直,也就是行空间中的矢量各个元素的和都为
。不难验证,图的关联矩阵每行都由一个
,一个
和多个
构成,每行元素和为
,它们张成的行空间中所有矢量都依然保持这个性质。
行空间包含了
所有行的线性组合,从电路的角度看,
,行空间中的矢量
代表了流入每个节点的电流值。因为每条边上的电流都是从一个节点流出的同时也流入另一个节点,所以不管每条边上电流
如何分配,没有外接电源的情况下总的流入各个节点的电流和必须为
,也就是行空间中的矢量
各个元素相加为
,整个电路不产生电流也不损失电流,这是物理世界中的守恒。 可以验证本例中
的各个元素相加
。只有外接电流源
满足元素相加为
这个条件,电路
才有解。
列空间
和行空间一样,它的维度也等于矩阵的秩
。关联矩阵
中任意
列都是独立的,可以作为列空间的一组基。
什么样的向量
在列空间中呢?从电路的角度看,
,列空间中的向量
实际上代表了每条边的电压差。
柯希霍夫电压定律(Kirchhoff's Voltage Law KVL)要求环路上的电压降之和为
。例如,
所在环路三边上的电压差分别为
,那么环路上电压降之和
,其中
前面的减号是为了修正箭头方向以保持环路方向一致。只有满足每个环路上电压降之和为
这个条件的
才在列空间中,相应的电路
才有解!可以验证,
的任意一列作为电压降的值都满足KVL。
根据线性代数基本定理,左零空间
的维度是
,并且左零空间中的矢量和列空间中的矢量垂直。
从电路的观点看,求解左零空间就是要找到每条边上的电流
如何分配,使得流入每个节点的电流都是
:
我们可以用如下策略找到
:选择任何一个环,让环上每条边的电流大小为
,方向同向(同为顺时针或逆时针),环未流经的边上的电流为
,这样的
都满足流入每个节点的电流为
。例如:选择
所在环路,按照上面的规则得到的矢量为
,可以验证
满足流入每个节点的电流都为
。而图中独立的环有
个,我们可以得到
个独立的
,如本例中除了通过
所在环路得到的
之外,还可以通过
得到
和通过
得到
,这三个独立的向量构成了左零空间
的一组基。
值得注意
也构成了一个环,这个环是一个大环,我们可以根据这个环得到另一个矢量
,它也满足流入每个节点的电流为
。然而这个矢量可以通过三个小环线性组合得到:
,它不能加入之前得到的基中,这也是我们为什么只关注小环的原因。
左零空间
对电路至关重要,
正是
柯希霍夫电流定律(Kirchhoff's Current Law KCL):每个节点流入的电流等于流出的电流,它代表了“守恒”“连续”和“平衡”。节点不储存电荷,有多少电流流入就有多少电流流出。
至此,我们总结一下有
条边和
个顶点的连通图关联矩阵的四个基本空间的性质。列空间
和行空间
的维度等于矩阵的秩
。列空间的向量满足柯希霍夫电压定律KVL。任意一组来自树的
条边构成行空间的一组基。零空间
是
,它的维度是
。左零空间
满足柯希霍夫电流定律KCL,它的维度是
,一组和
个独立环相关的矢量
可以作为它的基。
特别说明一下,只有联通图的关联矩阵秩才等于
。如果图包含两个分别联通的部分,它的关联矩阵就会分块表示为
,它的秩就是
。
实际电路的边上存在电阻,电压差
和电流
遵循欧姆定律(Ohm's Law):
。我们可以借助对角阵
来表达欧姆定律:
,字母
是电导conductivity的首字母。简单起见,本例中令所有电阻等于
,
就变成
,
。
我们现在在节点
和节点
之间外接电流源
来驱动电路。电流流入节点
而后经过网络流回节点
,一部分电流直接从
流回,还有一部分电流分别经过
和
流回。根据整个电路的对称性,我们断定
的电流为
。接下来我们就求解
,并验证我们关于
的结论。
我们把这个外接电流源表示为
。有外接电流源时柯希霍夫电流定律KCL表达为
,依然是流入各个节点的电流和为
,网络内部的电流平衡外接电流源。联立
我们得到平衡方程
。
我们用流程图来梳理一下电压,电流,欧姆定律以及KCL的关系。节点电压的差
和边上元件的导电性
通过欧姆定律产生了各个边上的电流
,这个电流满足电路中的平衡方程:柯希霍夫电流定律KCL,
是网络中流入各个节点的电流,它必须平衡外接电流源以保持平衡,也就是
,联立得到关于节点电压的方程
。
回到电路的例子,为了求解
,我们先来计算
,
叫做图的拉普拉斯矩阵(Graph Laplacian Matrix)(这是除邻接矩阵,关联矩阵外我们遇到的第三个与图相关的矩阵)。拉普拉斯矩阵不可逆,它的列相加为
,我们在之前的文章中也提到过,事实上
和
有相同的零空间。
不可逆就意味着
的解不唯一,例子中的电路各节点的电压不能确定。
这是合理的。我们之前讨论过,满足条件的一组
同时改变常数
依然满足条件,只有电压的相对大小影响电流,电压的绝对大小是可以改变的。在电路中,我们的做法是把其中一个节点接地,令
,未知的电压变量就减少为
。
将
接地后, 电阻上的电压差的方程就变为
。我们得到了一个新的矩阵
,它相当于去掉
的最后一列。
我们再来看关于电流的
方程:
。矩阵表示为
可以看到这组方程的最后一个可以由前三个相加组合得到,也就是消元法可以将
的最后一行变为
,这个线性系统实际上只有前三个方程有用,最后一个方程是“假的”。因此,我们只需要求解
, 其中
。
这样我们就把
变为了
。
的列是线性独立的,因此
是可逆矩阵,
就唯一确定了。
现在我们来具体计算一下例子中的
,它就是
去掉最后一行和最后一列,
,由
可得:
,进而得出
。再通过
解得
。电流源中的电流一半从
流回
,剩下的一半又平均分配经过
和
流回,因为对称性
,这和我们之前预料的一致。
一般来说,我们不能直接通过
解得
,我们知道
是个
的矩阵,电路中的边数
通常多于节点数
,从线性代数的角度看就是未知数的个数大于方程的个数,
的解不唯一。另一方面,
的情况恰恰相反,方程的个数多于未知数的个数,大概率没有解。然而,这两个单独都无法确定的线性系统通过平衡方程最终得到方阵
,
个方程
个未知数,整个系统就确定了。
是应用数学中一再出现的模式(pattern)和框架(framework)。
或
是应用数学中最重要的矩阵之一,它遍布电路,经典力学,统计,流体力学,信号处理等领域;它既出现在离散方程组中(之前电路的例子),也会在连续问题的微分方程近似求解中遇到;它可以由平衡方程得到,也可以通过最小化原则得到。我们再举几个例子说明以上观点。
例:这是一个经典力学中的老问题:四个弹簧两端固定,中间连着三个小球,如果没有重力,比如我们把它们平放在桌上,弹簧不会产生形变,我们假设这时小球的位置为初始位置。现在我们把它竖起来,由于重力的作用,小球会下坠。当弹簧的力和重力平衡时,三个小球就静止在平衡状态了。我们希望求得每个小球和初始位置相比的位移
。
我们不难列出平衡方程:假设三个小球向下的位移分别为
,那么这四个弹簧的拉伸
分别为:
,也就是
,这里字母
是拉伸的英文elongation的首字母;拉伸会产生弹力
,
,其中
这是著名的胡克定律(Hooke's Law)。最后我们得到平衡方程每个小球上弹簧的弹力都和它的重力
大小相等方向相反:
,也就是
;至此,我们得到了小球的位移
和重力
的关系:
。
仔细观察一下,这又是我们熟悉的形式:
,这里的
叫做
刚度矩阵(stiffness matrix)。我们首先借助差分矩阵
从小球的位移得到弹簧的形变,这和之前电路的例子类似,在电路中我们通过差分矩阵将电压变为电压降。接下来,我们通过胡克定律把弹簧形变转换为弹力
,在电路中我们遵循的是欧姆定律。最后,我们得到弹力和重力相等的平衡方程
,在电路中平衡表现为KCL。
和
总是成对出现是值得我们注意的关键。
除了来自平衡方程,它还会在最小化原则中出现,自然界的稳态是能量最低的状态
。弹簧的例子中,整个系统的能量
,平衡状态的
使得整个系统的能量
最小,这是自然的法则。现在我们需要一些微积分的知识来求使得
取极值的
,它出现在
一阶导数为
时,也就是
,即
,我们得到了和之前从平衡方程出发相同的公式。(这里用到了两个矢量求导公式:
,
,你只要把矢量形式展开成你熟悉的多变量函数的形式就可以验证公式的正确性。)
我们再来看一个最小化原则中出现
的例子。在统计学中有个基本的问题,叫做
线性回归(linear regression),简单的说就是用直线拟合样本。例如我们在
时刻分别观测到一辆车的行驶距离
。我们想得到一个距离和时间的线性关系
,也就是线性回归。这个直线方程中,
和
是我们要求的未知数。
按道理,两点确定一条直线,我们只要知道两个观测点
就可以得到准确的直线。可是现在我们有
个观测点(实际问题中更多):
。用矩阵表示为:
,方程的个数多于未知数的个数,大概率无解。我们从线性代数的角度来解释:矩阵的秩为
,列空间是
中的
维子空间,它相对于
是很“薄”的,
很可能没有落在矩阵的列空间中,也就是方程无解。
我们退而求其次,得到“近似”解,只要这个解能最小化错误,它就是我们在线性回归中盼望的最优解。也就是说,只要
能使得平方误差
最小(最小二乘法 least square),我们就用
来拟合观测点。平方误差的矢量表达为:
,本例中
,
,
。展开表达式
,转化为求
的极小值。由
到
有两步:1,
中第四项
是常数,它不影响
取到最小值,可以移除。2,
中第二项和第三项是数,它们是相等的。我把它们分别写出来方便不熟悉矢量运算的读者理解:
,
,
所以至此我们可以把
简化为
。最后除以
是为了求导之后的形式简洁优雅。
我们依然是通过
求得使得平方误差最小的
:
,即
。到这里,我们就完成了举这个例子的任务,我们又见到了熟悉的
,这一次它来自统计学中的线性回归。我们的起点依然是矩形矩阵
,但当我们引入最小化原则(这里是最小化平方误差)后,我们又得到了
这个我们熟悉的框架。
同样令人惊叹的是
这个框架在连续系统中依然适用。
离散系统中有限个未知变量组成的矢量(如弹簧例子中每个小球的位移)在连续系统中变为函数(每个点都有位移),离散系统中的差分变为连续系统中的微分,矩阵方程变为微分方程(differential equations),然而,你会发现用差分近似求解微分方程仍然落入
框架中。
之前弹簧和小球的例子中,我们关注的未知变量是
个小球的位移,由矢量
表示。现在我们关注一个长度为
的弹性材料棒,由于重力作用,除了两端固定外它内部每点都有向下的位移,我们的未知量因此变为了函数
,它表示
位置弹性材料的下移。在连续系统中,位移引起的拉伸
,进而由拉伸产生内部的应力
。内部应力和重力
平衡:
,也就是
,这是个二阶常微分方程(Ordinary differential equations ODE ),由于两端固定,边界条件
。
为了数值求解这个微分方程,我们要把问题离散化。我们首先选
,这样长度为
的弹性棒就有
个点:
,其中
,实际上在本例的边界条件下
,真正的未知数只有
。
接下来,我们用差分近似微分,这是重要且基本的方法。回忆一下我们学微积分时是如何定义导数就不难得到微分的三种差分近似:
,分别是前向差分,后向差分和中间差分。例如,用前向差分近似
处的一阶导数
;用后向差分近似
处的一阶导数
。
现在我们要用前向-后向的二阶差分来近似本例中的二阶微分方程。我们首先算
的前向差分(
前面没有点了,所以它没有前向差分,幸运的是,没有它也可以计算二阶差分):
,又由边界条件
,前向差分被化简为
,它的矩阵表示为
;我们再由后向差分求
处差分的差分(矩阵表达的求法和前向差分过程一样,读者可自行练习),最终我们得到
;相应的,二阶常微分平衡方程
,
的二阶差分近似为:
,其中
。看出来了吗?这又是
,我们在连续问题中再次遇到了这个框架。