当电路非常复杂时,如元件数量特别多,或网络结构特别复杂时,我们希望能“用编程的方式”,自动求解各节点处的电势与各支路的电流。
本文设计了一个最简案例,一个仅含电阻的小型网络——

一个仅含电阻的最简电路:3 条支路、2 个独立节点
电路说明:
- 圆圈点表示电势参考点,其电势为 0;
- 电路的输入和输出电流相等,为 I0;
- 电路含有 3 个分支(branch),即 b1、b2、b3;
- 和 2 个独立节点(node),即 n1 和 n2。
1. 原理:基尔霍夫定律 + 欧姆定律
1.1 基尔霍夫电流定律
又称“基尔霍夫第一定律”——
对于某一节点,进入电流之和 = 离开电流之和
换言之,节点只负责传输电流,而无法让电流凭空产生或消失。
分别对于 n1 和 n2 两个节点,如果我们定义“流入为负,流出为正”——
{−1⋅Ib1+1⋅Ib2+1⋅Ib3=00⋅Ib1−1⋅Ib2−1⋅Ib3=I0
为什么要写出 0 和 1 呢,因为,咱们要变成矩阵形式——
(−101−11−1)Ib1Ib2Ib3=(0I0)
即
AIb=If
其中,A 就被称为“关联矩阵”,每行对应节点,每列对应支路。Ib 表示各支路的电流,If 表示整体电路的输入输出电流。
1.2 基尔霍夫电压定律
又称“基尔霍夫第二定律”——
闭合回路所有器件两端的电势差(电压)的代数和等于零
这里间接使用这一定律,即,“不闭合的回路 两端点的电势差 = 其间元件的电压”。
前面我们讲了“关联矩阵”A 中,每行对应节点,每列对应支路。如果我们把 A 转置,让每一列(支路)形成一个电压方程,则为
−1110−1−1(Un1Un2)=Ub1Ub2Ub3
即
ATUn=Ub
其中,Un 表示每个节点的电势,Ub 表示每个支路的电压压降。
1.3 欧姆定律
电压 = 电阻 × 电流
电流 = 电导 × 电压
这里我们要使用电导的形式。电导 S(electrical conductance)等于电阻的倒数。
咱们直接写出矩阵形式吧——
Ib=S⋅Ub
其中
S=S1000S2000S3
1.4 联立化简
至此,我们列出了三个方程——
⎩⎨⎧AIb=IfATUn=UbIb=S⋅Ub
联立,简化,得到
ASATUn=If
这个方程,就是一个线性方程,咱们可以直接求解呀。
2. 求解
我用 MATLAB 写了一段极简代码,就实现了上述方程的求解,其中 S 和 If 可以随意设置——
A = [-1 1 1;
0 -1 -1];
S = diag([1 1 1]);
If = [0 1]';
Un = (A*S*A')\If
Ib = S*(A'*Un)
求解输出为:
Un =
1.0000
1.5000
Ib =
-1.0000
-0.5000
-0.5000
这样,就自动地得到了所有节点的电压与所有支路的电流。
最美妙的是,只要修改一下参数矩阵,就可以求解非常复杂的电路网络了。
本文 2022-09-26 原发表于知乎。