# Resistor Network Solver

## Help

### 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.

**Examples:**

- Two resistors of 100 Ohm in series: a 100 b 100 c
- Two resistor in parallel: a 1 b a 1 b
- Bridge: a 2 b 1 d a 1 c 2 d b 1 c
- More examples

### Options

**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.

### FAQ

**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.

Made in 2016 by Kirill Kryukov This page is placed in public domain using CC0 |