图论解油瓶分油问题_直流电阻网络的图论/线性代数解法

G.Strang 的 《Introduction to Linear Algebra》第 8 章第 2 节讲线性代数在图论上的应用。前一阵为了美赛,把这部分学了一下,发现正好解决了我的一个构想——编程求解直流电阻网的问题。高中物竞学这部分时,只知道用基尔霍夫方程组可以列出来一堆线性方程,然后用高斯消去法去解,但是如何让计算机去对每一条回路列方程却是有些困难的。现在学到了这个基于一点点图论的方法,便可以在给定电阻网络(以图的形式)的情况下很方便地求解了。

对于一个有 n 个节点、m 条边的有向图,各节点(Node)依次编为

equation?tex=N_1%2C+N_2%2C...%2CN_n ,各边(Edge)编为
equation?tex=E_1%2CE_2%2C...%2CE_n ,可以定义其关联矩阵(Incidence Matrix):
equation?tex=A%3D%28a_%7Bij%7D%29_%7Bm%5Ctimes+n%7D ,其中,
equation?tex=a_%7Bij%7D%3D%5Cbegin%7Bcases%7D++-1+%26+e_i+%E4%BB%8E+n_j+%E5%87%BA%E5%8F%91+%5C%5C++1+%26+e_i+%E6%8C%87%E5%90%91+n_j++%5C%5C++0+%26+%E5%85%B6%E4%BB%96+%5Cend%7Bcases%7D .

书中给的例子:

0412b8a9278083e5e4fe2c9de9de8a87.png

有趣的是,对矩阵 A 做行约化,得到的行最简型矩阵恰对应原图的一个生成树(因为线性相关的行对应了图中的一个 Loop)。由于最小生成树的边数为 n-1,可知矩阵 A 的秩

equation?tex=r%3Dn-1 .

一个直流电阻网,在指定各边的正向后,可以直接看作一个连通有向图。那么电阻网的性质和关联矩阵 A 有什么关系呢?我们来看看 A 作用在某个向量 x 上的结果:

9d750f2000bc95aff15c293f0de33e23.png

矩阵乘法要求 x 必须有 n=4 个元,那么我们很自然地认为 x 对应于 n 个节点上的值。我们发现,Ax 给出了m 条边的两端点值之差。这启发我们,如果把 n 维列向量 x 记作

equation?tex=u_N ,代表各节点的电势,那么
m 维列向量
equation?tex=u_E%3DAu_N 就给出了各边上的电压(电势差)

接下来,我们看看

equation?tex=A%5ETy 代表什么(书里在考察 A 的四个子空间的性质时自然地引到这个问题,我们没有太关注子空间,所以这里未必那么自然)。

equation?tex=A%5ETy%3D+%5Cleft%28+%5Cbegin%7Barray%7D%7Bcccccc%7D++-1+%26+-1+%26+0+%26+-1+%26+0+%26+0+%5C%5C++1+%26+0+%26+-1+%26+0+%26+-1+%26+0+%5C%5C++0+%26+1+%26+1+%26+0+%26+0+%26+-1+%5C%5C++0+%26+0+%26+0+%26+1+%26+1+%26+1+%5C%5C+%5Cend%7Barray%7D++%5Cright%29+%5Cleft%28+%5Cbegin%7Barray%7D%7Bc%7D++y_1+%5C%5C++y_2+%5C%5C++y_3+%5C%5C++y_4+%5C%5C++y_5+%5C%5C++y_6+%5C%5C+%5Cend%7Barray%7D+%5Cright%29%3D%5Cleft%28+%5Cbegin%7Barray%7D%7Bc%7D++-y_1-y_2-y_4+%5C%5C++y_1-y_3-y_5+%5C%5C++y_2%2By_3-y_6+%5C%5C++y_4%2By_5%2By_6+%5C%5C+%5Cend%7Barray%7D+%5Cright%29

类似地,矩阵乘法要求 y 必须有 m=6 个元,那么我们很自然地认为 y 对应于 m 条边上的值。观察

equation?tex=A%5ETy ,不难发现这其实给出了每个节点上的「净流出」量(负数代表流入)。这启发我们,
如果把 m 维列向量 y 记作
equation?tex=i_E ,代表各边上的电流(正方向沿边的定向),那么
n 维列向量
equation?tex=i_N%3D-A%5ETi_E 就给出了流入各节点的电流

为了把电流和电压联系起来,我们还缺一个方程——欧姆定律。欧姆定律指出,

equation?tex=I%3D%5Cfrac%7BU%7D%7BR%7D%3DCU ,R 为电阻,C 为电导。用上述向量表达,就是
equation?tex=+i_E%3D-Cu_E ,这里
equation?tex=C%3Ddiag%28C_1%2CC_2%2C...%2CC_m%29 是将各边电导排成的对角阵,负号表示电流沿电势下降的方向。

综合上述三式,得到:

equation?tex=u_E%3DAu_N+%5C%5C++i_E%3D-Cu_E+%5C%5C+i_N%3D-A%5ETi_E

一般情况下,我们的物理问题总是给定各个节点上的电压或注入的电流,因此,将上三式合并,得到:

equation?tex=%5C%5Ci_N%3DA%5ETCAu_N

这就是求解电阻网问题的核心方程了。注意到矩阵

equation?tex=A%5ETCA 是个 n 阶方阵,而其秩为 n-1 ,所以这个方程的解其实有一个自由度,即 A 的零空间。可以证明,A 的零空间的基底是
equation?tex=%281%2C1%2C...%2C1%29%5ET ,所以这个自由度实际上对应了各节点的电压升高 or 降低同一数值,也即电势基准点的任意选取,这也是符合物理的。

后面还有关于已知量的讨论和求解的代码,过一阵再放上来吧……

头一次用知乎记笔记,若有疏漏请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值