Resistor Network Solver


Specifying network

The network is specified as a text containing node names and resistances, separated by spaces. Whenever a resistance appears between two node names, it's interpreted as a resistor connecting these nodes. The network must start and end with a node name. It's OK to list two or more node names in a row - such nodes are simply added to the network without any resistors connecting them. However the network should not include any sequence of two or more resistances in a row.

Node names. Node names may include only latin letters, digits, '-' and '_', '[', and ']'. Anything that looks like resistance is interpreted as a resistor, the rest becomes node names. So, for example, if you have nodes '1a', '1b', etc., it will work only until you get to '1g', which is interpreted as a resistor of 1 GOhm. Node names are case-sensitive.

'[' and ']' have a special meaning: If a node name contains a number enclosed in brackets, such number specifies the order in which the nodes will be removed. Nodes with larger number will be removed earlier, those with smaller number - later. A '[0]' in the node name marks a terminal node - a node that is never removed. Only the first bracket pair in a node name is used for this. Any additional or unmatched brackets are OK and have no effect.

Resistors. Each resistor is specified as its resistance in Ohms, a non-negative number of any length, with or without a decimal point. Optionally it can have a suffix 'R', 'k', 'M', 'G' or 'T' (case-insensitive). In the middle of the number such letter is interpreted as a decimal point (e.g., '2k2' is OK and identical to '2.2k'). It can also be a ratio of two such numbers (e.g. '2k2/3'). The unit character applies separately to numerator and denominator: "1/2k" = "0.0005" and not "500", but "1k/2" = "500".

Resistances can be 0 Ohm (such jumpers can be helpful for solving some networks). Resistances can't be negative - any negative resistance is interpreted as a node name without giving any error. Resistances should not include 'Ohm' or 'Ω'. Resistances should not contain spaces: '390 k' becomes a resistor of 390 Ohm, and a node named 'k'.

Terminal nodes are nodes where the network connects to the outside world. They are never removed during solving. At least 2 terminals are required. Terminal nodes are those that have "[0]" anywhere in their name as well as those listed in the "Terminal nodes" input field.

If a network has exactly 2 terminals, solver computes the equivalent resistance between them. If more than 2 terminals are specified, solver removes all non-terminal nodes and shows the resulting network.



Explain each step - Explains what is being done at each transformation step. Since it can generate a huge wall of text, a good idea is to keep it off with large networks.

Visualize the network - Tries to create a visualization of the network. It can freeze your browser, so with large networks it's better to keep it off. Visualization can look messy for complex networks - try dragging the nodes around to make it better.


Q: Is the source open?
A: No, but I plan to open it sometime in the future.

Q: Is it fast?
A: I think it's reasonably fast, considering that it computes exact answer, while using the simpleset possible method. It solves 1000-resistor network in seconds. If you have an interesting network to use as benchmark, I'd be curious to try it.
A2: The online version will give up if it can't complete the solution in about a minute. If you want to experiment with larger network, contact me and we'll try it offline.

Q: Why not use some faster numerical approach or a SPICE simulation?
A: I needed exact answer, though I'd be curious to compare it with an approximate solvers.

Q: Why not use method based on matrix inversion?
A: The current approach based on progressive node elimination is simpler, and I was curious to explore it in detail. However I am also interested to see the performance of matrix based approaches. If you know of any such tool available, please let me know.

Q: What about symmetry?
A: This tool does not detect symmetry automatically. However you can include symmetry information into the network by yourself. For example, you can merge symmetrical nodes under same name or add 0 Ohm jumpers connecting such nodes. This should be done whenever possible, as it usually greatly reduces solving time.