计算纯电阻网络的等效电阻
计算纯电阻网络的等效电阻,与计算烷烃的同分异构体数量,是许多学习 OI 的高中生想要解决的问题。不过相比于计算烷烃的同分异构体数量而言,这个问题简单很多。本文将介绍一种简单的等效电阻计算方法,并给出一个计算所有接入电路方案的等效电阻的算法。
基本概念
上图是电阻网络的一个示意图。其中矩形表示纯电阻,上面可能会标注它的阻值。粗线表示导线,导线的交点通常会是接线柱之类的东西,称之为节点,可以连入外部电路。我们的目标是,给出这个网络的结构、每个电阻的阻值以及接入外电路的两个节点(一个是电流流入的位置,另一个是电流流出的位置,如上图中的左边和右边两个不闭合的导线),计算出它的等效电阻,即电流经过电阻网络时的电压
为了方便表示,这里将电阻网络转为图论的模型。图中一共有
接入电路后,每个电阻上都会通有电流,记为
为了方便,我们称外部电流流入网络的节点为源点
计算一个点对
首先我们需要知道比较直观的基尔霍夫定律:
基尔霍夫电流定律:所有进入某节点的电流的总和等于所有离开该节点的电流的总和。
基尔霍夫电压定律:沿着闭合回路所有元件两端的电压的代数和等于零。
根据这两点,如何求出等效电阻呢?首先可以假定流入的电流为
如果存在不重合的部分,我们对这个部分进行调整,在电压不变的情况下,将一条路径变为另外一条路径。如上图,设左边的分岔点为
为了求出电压,我们可以考虑求出每个电阻上的电流的情况。根据电流定律,对于每个节点,我们可以列出
得到了
我使用 Python 实现了上面所说的过程。不过偷了懒,是用 SymPy 解的方程......所以算的不是很快。具体的代码可以查看这里。
计算所有点对
想到可以计算所有点对等效电阻的初衷是由于计算不同点对时的列出方程组其实没有多大差别,只有源点和汇点列出的电流方程存在着一个常数。根据这一点,我们不妨多写几个变量
现在来指定源点
我的 C++ 实现可以在这里查看。