从矩阵看电路的耦合

在电路理论里,我们经常会遇到一些听起来很抽象的词:自耦、互耦、自感、互感。初学时很容易把它们理解成一种“物理上靠得很近”的关系:两个线圈绕在同一个铁芯上,所以有耦合;两条支路没有导线相连,所以没有耦合。

这个说法有直觉,但还不够适合数值仿真。

在 EMT 程序里,元件最后都要进入矩阵方程。于是“有没有耦合”就可以换成一个更直接的问题:一个端口的电压或电流,是否会进入另一个端口的方程? 如果会,矩阵里就会出现跨端口的非零项;如果不会,矩阵就可以分成互不影响的块。

所以,今天我们不先从磁场形状、铁芯结构或空间距离去理解耦合,而是从矩阵的角度去看电路里的“耦合”到底长什么样。

两个孤立电阻:没有耦合

先看最简单的情况:两个电阻完全没有连接。R1R_1 接在节点 N1,N2N_1,N_2 之间,R2R_2 接在节点 N3,N4N_3,N_4 之间,中间没有任何共享节点,也没有受控关系、互感关系或变压器关系。

两个完全不连接的电阻
两个完全不连接的电阻。

令:

G1=1R1,G2=1R2 G_1=\frac{1}{R_1},\qquad G_2=\frac{1}{R_2}

R1R_1 来说,支路电流只由它两端电压决定:

i1=G1(uN1uN2) i_1=G_1(u_{N_1}-u_{N_2})

因此它只会把下面这个局部矩阵加到 N1,N2N_1,N_2 对应的行列里。英文资料里常把这个动作叫做 stamp,意思不是抽象地“盖个章”,而是“把某个元件对矩阵的贡献填入全局矩阵的指定位置”:

[G1G1G1G1]\begin{bmatrix}G_1&-G_1\\-G_1&G_1\end{bmatrix}

同理,R2R_2 的局部矩阵只会加到 N3,N4N_3,N_4 对应的行列里:

[G2G2G2G2]\begin{bmatrix}G_2&-G_2\\-G_2&G_2\end{bmatrix}

如果节点顺序取为:

N1, N2, N3, N4 N_1,\ N_2,\ N_3,\ N_4

全局节点方程就是:

[IN1IN2IN3IN4]=[G1G100G1G10000G2G200G2G2][uN1uN2uN3uN4]\begin{bmatrix}I_{N_1}\\I_{N_2}\\I_{N_3}\\I_{N_4}\end{bmatrix}=\begin{bmatrix}G_1&-G_1&0&0\\-G_1&G_1&0&0\\0&0&G_2&-G_2\\0&0&-G_2&G_2\end{bmatrix}\begin{bmatrix}u_{N_1}\\u_{N_2}\\u_{N_3}\\u_{N_4}\end{bmatrix}

这个矩阵最重要的特征是右上角和左下角都是零块

[G(N1,N2)00G(N3,N4)]\begin{bmatrix}\boxed{G_{(N_1,N_2)}}&0\\0&\boxed{G_{(N_3,N_4)}}\end{bmatrix}

这说明 N1,N2N_1,N_2 子电路的电压不会直接进入 N3,N4N_3,N_4 子电路的电流方程,反过来也一样。两个电阻虽然同时出现在一个全局矩阵里,但它们在数学上是两个互不影响的分块。

这就是**“没有耦合”**的矩阵形式。

两绕组变压器:有耦合

现在换成一个两绕组变压器或两端口耦合支路。左侧绕组接在 N1,N2N_1,N_2 之间,右侧绕组接在 N3,N4N_3,N_4 之间。即使这两个绕组在电气上没有直接导线相连,它们仍然会通过磁场耦合。

两绕组变压器耦合示意
两绕组变压器:绕组之间没有直接导线相连,但通过磁场耦合。

为了先抓住矩阵结构,可以把两绕组看成一个线性二端口。定义两个端口电压:

up=uN1uN2 u_p=u_{N_1}-u_{N_2} us=uN3uN4 u_s=u_{N_3}-u_{N_4}

端口电流写成:

[ipis]=[G11G12G12G22][upus]+[Ihis,pIhis,s]\begin{bmatrix}i_p\\i_s\end{bmatrix}=\begin{bmatrix}G_{11}&G_{12}\\G_{12}&G_{22}\end{bmatrix}\begin{bmatrix}u_p\\u_s\end{bmatrix}+\begin{bmatrix}I_{\mathrm{his},p}\\I_{\mathrm{his},s}\end{bmatrix}

其中 G11G_{11} 描述一次侧自身电压对一次侧电流的影响,G22G_{22} 描述二次侧自身电压对二次侧电流的影响。真正代表耦合的是 G12G_{12}

ip=G11up+G12us+Ihis,p i_p=G_{11}u_p+G_{12}u_s+I_{\mathrm{his},p} is=G12up+G22us+Ihis,s i_s=G_{12}u_p+G_{22}u_s+I_{\mathrm{his},s}

只要 G120G_{12}\neq 0一次侧电流方程里就含有二次侧电压,二次侧电流方程里也含有一次侧电压。这就是耦合。

把这个端口方程加到节点 N1,N2,N3,N4N_1,N_2,N_3,N_4 对应的全局矩阵位置上,会得到类似下面的结构:

[IN1IN2IN3IN4]=[G11G11G12G12G11G11G12G12G12G12G22G22G12G12G22G22][uN1uN2uN3uN4]+[Ihis,pIhis,pIhis,sIhis,s]\begin{bmatrix}I_{N_1}\\I_{N_2}\\I_{N_3}\\I_{N_4}\end{bmatrix}=\begin{bmatrix}G_{11}&-G_{11}&G_{12}&-G_{12}\\-G_{11}&G_{11}&-G_{12}&G_{12}\\G_{12}&-G_{12}&G_{22}&-G_{22}\\-G_{12}&G_{12}&-G_{22}&G_{22}\end{bmatrix}\begin{bmatrix}u_{N_1}\\u_{N_2}\\u_{N_3}\\u_{N_4}\end{bmatrix}+\begin{bmatrix}I_{\mathrm{his},p}\\-I_{\mathrm{his},p}\\I_{\mathrm{his},s}\\-I_{\mathrm{his},s}\end{bmatrix}

和前面的两个孤立电阻相比,区别非常明显:矩阵的右上角和左下角不再是零块,而是出现了 G12G_{12} 相关项。

从这个角度看,耦合不是“图上画得近”或者“看起来像一个元件”,而是矩阵结构发生了变化:

[G11G12G12G22]\begin{bmatrix}\boxed{G_{11}}&\boxed{G_{12}}\\\boxed{G_{12}}&\boxed{G_{22}}\end{bmatrix}

非对角块 G12G_{12} 把两个端口连接成了一个整体。求解器不能把它们拆成两个互不影响的支路来处理。

更复杂的例子:三支路互阻互感

再看一个更复杂但很常见的结构:三条支路并排,从 k1,k2,k3k_1,k_2,k_3 指向 m1,m2,m3m_1,m_2,m_3。每条支路有自己的电阻和电感,同时支路之间存在互阻和互感。

三支路互阻互感耦合示意
三支路互阻互感:每一条支路的电流变化都可能影响其他支路的电压。

令支路电压、电流为:

u=[uk1m1uk2m2uk3m3],i=[ik1m1ik2m2ik3m3]\mathbf u=\begin{bmatrix}u_{k_1m_1}\\u_{k_2m_2}\\u_{k_3m_3}\end{bmatrix},\qquad \mathbf i=\begin{bmatrix}i_{k_1m_1}\\i_{k_2m_2}\\i_{k_3m_3}\end{bmatrix}

如果三条支路完全独立,那么可以写成:

u=[R11000R22000R33]i+[L11000L22000L33]didt\mathbf u=\begin{bmatrix}R_{11}&0&0\\0&R_{22}&0\\0&0&R_{33}\end{bmatrix}\mathbf i+\begin{bmatrix}L_{11}&0&0\\0&L_{22}&0\\0&0&L_{33}\end{bmatrix}\frac{d\mathbf i}{dt}

但如果存在互阻、互感,就会变成:

u=Ri+Ldidt \mathbf u=\mathbf R\mathbf i+\mathbf L\frac{d\mathbf i}{dt}

其中:

R=[R11R12R13R12R22R23R13R23R33]\mathbf R=\begin{bmatrix}R_{11}&R_{12}&R_{13}\\R_{12}&R_{22}&R_{23}\\R_{13}&R_{23}&R_{33}\end{bmatrix}L=[L11L12L13L12L22L23L13L23L33]\mathbf L=\begin{bmatrix}L_{11}&L_{12}&L_{13}\\L_{12}&L_{22}&L_{23}\\L_{13}&L_{23}&L_{33}\end{bmatrix}

这里的下角标 11,22,3311,22,33 表示自身项,12,13,2312,13,23 表示支路之间的互相影响。例如 L11L_{11} 是第一条支路自己的电感,L12L_{12} 是第一条支路和第二条支路之间的互感。

有些资料也会用 ssmm 来强调这两类项:ss 来自英文 self,表示“自身”;mm 来自英文 mutual,表示“相互”。如果三条支路的自身参数相同、互耦参数也相同,上面的矩阵可以简写成:

R=[RsRmRmRmRsRmRmRmRs],L=[LsLmLmLmLsLmLmLmLs]\mathbf R=\begin{bmatrix}R_s&R_m&R_m\\R_m&R_s&R_m\\R_m&R_m&R_s\end{bmatrix},\qquad \mathbf L=\begin{bmatrix}L_s&L_m&L_m\\L_m&L_s&L_m\\L_m&L_m&L_s\end{bmatrix}

所以可以这样记:对角线上的项是 self,也就是自阻、自感;非对角线上的项是 mutual,也就是互阻、互感。

比如第一条支路的电压方程为:

uk1m1=R11ik1m1+R12ik2m2+R13ik3m3+L11dik1m1dt+L12dik2m2dt+L13dik3m3dt u_{k_1m_1} =R_{11}i_{k_1m_1} +R_{12}i_{k_2m_2} +R_{13}i_{k_3m_3} +L_{11}\frac{di_{k_1m_1}}{dt} +L_{12}\frac{di_{k_2m_2}}{dt} +L_{13}\frac{di_{k_3m_3}}{dt}

这句话的物理意思是:第一条支路的电压不仅由第一条支路自己的电流决定,也会受到第二、第三条支路电流及其变化率的影响。

解耦的意义

理解了“耦合在矩阵里表现为非对角项”,就很容易理解“解耦”为什么重要。

从矩阵角度看,如果一个全局矩阵可以写成分块对角形式:

[A00B]\begin{bmatrix}\mathbf A&0\\0&\mathbf B\end{bmatrix}

那么 A\mathbf A 对应的子网络和 B\mathbf B 对应的子网络,在当前这个代数方程里就是相互独立的。求 A\mathbf A 这部分未知量时,不需要同时知道 B\mathbf B 那部分未知量;反过来也一样。

从数学求解角度看,这意味着一个大问题可以拆成两个小问题:

Ax1=b1,Bx2=b2\mathbf A\mathbf x_1=\mathbf b_1,\qquad \mathbf B\mathbf x_2=\mathbf b_2

这件事很有工程价值。第一,小矩阵通常比大矩阵更容易求解;第二,不同子网络可以并行计算;第三,在实时仿真里,不同 CPU 线程、不同计算核,甚至不同仿真节点可以分别处理不同的网络分区。

所以,解耦的意义不是说物理系统真的完全没有联系,而是说在某种建模或求解安排下,原来必须放在同一个矩阵里同时求的变量,被拆成了可以分别求解的子问题。

工程上确实有一些办法会利用这种思想,把原本强耦合的电路网络拆开处理。例如传输线方法会利用传播延时,把线路两端在同一个时间步内的直接代数耦合隔开;也有一些分区求解、接口等效、延时接口或迭代接口方法,用边界量交换来连接两个子网络。

这些方法的细节本文先不展开。这里先抓住一个朴素判断:如果矩阵里的跨分区非对角块被消掉、延后处理,或者变成边界接口量,那么两个网络就更容易被分开计算。


相关内容

Buy me a coffee~
RLC侠 支付宝支付宝
RLC侠 微信微信