如何从阻力网络中移除循环

How to remove cycles from a resistance network

本文关键字:循环 网络      更新时间:2023-10-16

我有一个由无向图表示的电阻网络,其边缘表示电阻值。某些节点称为驱动程序,某些节点称为接收器,其他节点是内部节点。目标是计算每个驱动器到每个灌电流的有效电阻。图形可以有周期,星三角洲网络。因此,可以使用以下公式来计算有效电阻。

维基文章

请注意,如果图形没有任何周期,则简单的DFS遍历将为每个灌电流提供驱动器有效电阻。但如果它有周期,那么必须删除周期。一种方法是将图形复制到临时图形中,然后使用上述公式从临时图形中删除除驱动程序和接收器之外的所有节点。对所有驱动程序接收器对执行此操作,但此方法对于大型密集图非常耗时。我通过将图形存储在 tcl 哈希表或 std::tr1::unordered_map 中来获得如此长的运行时间。

您对计算每个

驱动器到每个灌电流电阻的有效方法有什么想法吗?

我有一个低效的解决方案,即对于每个接收器的每个驱动程序 将原始图形复制到临时图形中 然后使用我上面提到的 wiki 文章从临时图形中删除除该源和接收器之外的所有节点。 最终的临时图将给出该源和该汇之间的有效阻力。对于大型输入数据,此解决方案的运行时间是不可接受的,因此我需要更好的解决方案。

要计算每个驱动器到每个接收器的有效电阻,您无需执行图形转换。相反,您可以

  1. 对于每对驱动器和接收器,将驱动器节点分配为 1V,将接收器节点指定为 0
  2. 执行节点分析,这只需要线性方程公式。您可以获得从驱动器到接收器的电流I
  3. 根据定义,有效电阻R = V / I = 1 / I .