LU分解完成利用节点电压法的简易电路求解程序(一)

前两篇博文我们从纯理论角度给出了下三角矩阵的求解,并对一个对角线非零的方阵进行LU分解,得到上三角矩阵U与下三角矩阵L。我们从数学角度推导了LU分解的可行性,但没有给出具体的实现程序。在这篇博文里,我们将给出一个具体的实例:利用LU分解对一个仅包含纯电路与电流源的电路进行计算。


1.回顾

开篇我们回顾一下LU分解的实现
对于线性方程

Ax=b A x = b
如果我们矩阵 A A 进行 LU L U 分解,即
A=LU A = L U
我们可以得到
LUx=b L U x = b
再令 Ux=y U x = y ,我们有
Ly=b L y = b
现在我们矩阵转化为两个三角系统的求解,第一步先求解 Ly=b L y = b 得到向量 y y ,继而第二步求解 Ux=y U x = y 可以得到梦寐以求的 x x ,由于这两步都是对三角系统进行求解,故可以在 Θ(n2) Θ ( n 2 ) 时间内完成,而对A进行LU分解会在 Θ(n3) Θ ( n 3 ) 时间内完成,比起高斯消元法,LU分解利用三角系统求解降低了时间复杂度。实际上,利用LU分解的可并行性,我们能够在FPGA或GPU或多处理器计算机上面高效率完成,更大缩短运算时间。
以上是对LU分解的简单回顾。

2.从电路到矩阵

对一个直流电路进行求解,我们需要将电路参数转化为一组线性方程,这组线性方程包含了我们求解电路各要素的必备条件。一般而言,为了对电路进行求解,我们可以从基本定律出发(欧姆定律、基尔霍夫定律)或利用更高级的分析技巧(节点分析法、网孔分析法),这里我们选择从后者出发。由于网孔分析法仅适用于平面电路,我们选择更具有普适性的节点分析法。
节点分析法要求我们利用电路中相关参数,联立线性方程组求出各节点电压,这个过程大致包含以下步骤:


1.选择一个参考节点:这节点电压为零,即接地;
2.对剩余 (n1) ( n − 1 ) 个非参考节点,利用KCL(基尔霍夫电流定律),节点电流方程
3.联立方程,求解电压


实际上,得到每一个节点的方程是较为困难的,为了简化问题的规模,在这片博文里我们仅考虑问题的一个特殊情况:一个仅包含电流源的电阻网络

我们从一个较为简单的电路开始研究
LU分解完成利用节点电压法的简易电路求解程序(一)_第1张图片
(这个电路很简单吧^_^只有三个电阻两个电流源哦)
在这附图中,我们有3个节点,其中一个节点(节点0)设置为参考节点接地。我们尝试利用节点电压法来对其进行分析:
对于节点1,我们利用KCL可以得到

I1=I12+I10+I2 I 1 = I 1 → 2 + I 1 → 0 + I 2

对于节点2,我们利用KCL可以得到

I2+I12=I20 I 2 + I 1 → 2 = I 2 → 0

这里小箭头表示电流的流向,利用欧姆定律,将节点电压带入可以得到

{v1(1R3+1R1)v2.1R1=I1I2v11R1+v2(1R2+1R1)=I2 { v 1 ( 1 R 3 + 1 R 1 ) − v 2 . 1 R 1 = I 1 − I 2 − v 1 1 R 1 + v 2 ( 1 R 2 + 1 R 1 ) = I 2

这里出现了电阻分之一,看起来很不舒服,故全部换为电导代替之

{v1(G3+G1)v2.G1=I1I2v1G1+v2(G2+G1)=I2 { v 1 ( G 3 + G 1 ) − v 2 . G 1 = I 1 − I 2 − v 1 G 1 + v 2 ( G 2 + G 1 ) = I 2

此一换顺心舒畅,一来看起来非常简洁,二来电阻并联的电导只需计算电导之和,此处妙不可言。

对于上式,我们将其写作矩阵形式

[G3+G1G1G1G2+G1][v1v2]=[I1I2I2] [ G 3 + G 1 − G 1 − G 1 G 2 + G 1 ] [ v 1 v 2 ] = [ I 1 − I 2 I 2 ]

这样,我们便完成了电路到矩阵的转化,但这仅仅是一个简单的小电路,对于包含几十个电阻电流源的电路我们如何处理?
我们观察上面的电导矩阵,我们试着从形式上来欣赏这个矩阵:

对角线上的项为电导之和,非对角线的项为电导的负数。回到电路图中一看,这些电导之和恰恰是节点连接的电导之和,复数的那个电导又是两个节点之间的电导

我们大胆断言

电导矩阵中的对角线项为节点相连的电导之和,非对角线项等于两个节点之间电导的相反数
观察电流向量,我们又可以得到
电流项为独立电流源流入节点与流出节点电流代数和,其中流入节点电路符号为正,流出节点符号为负

(Q:如何证明断言成立?)

你可能感兴趣的:(算法)