# 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, everything else becomes node names. So, for example, if you have nodes '1a', '1b', etc., it will work only until you get to '1k', which is interpreted as a resistor of 1 kOhm. 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. Terminal nodes are those where the network connects to the outside world.These nodes are never removed during solving. A valid network must have at least 2 terminals. There are two ways to specify them: (1) they can be listed in the "Terminal nodes" input fields, or (2) annotated in the network iteslf. In the network notation such nodes should be marked by "[0]" anywhere in the node name.

The output of this tool varies slightly depending on how many terminal nodes are specified (via both methods combined). If the network has only 2 terminals, the equivalent resistance is calculated and reported. In case if there are more than 2 terminals, the tool removes all non-terminal nodes, and prints out the resulting network.

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. Currently this visualization is not connected in any meaninfgul way to the solving process, all it does is showing the initial network (as well as final network, if it has more than 2 terminals). Visualization can look messy for complex networks - try dragging the nodes around to make it better.

### FAQ

Q: Isn't it slow?
Q: I entered a 8D hypercube and it did not show anything!
A1: I think it's reasonably fast for what it does. Remember that that it computes the exact answer (not an approximation), and that it uses a rather simple brute force method. Still it can handle 1000-resistor network within seconds.
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?
Q: SPICE simulation solves a much larger network!
A: I am curious to see the exact answer, that's why I made this exact solver. However I would be interested to compare with an approximate solver. I'll appreciate if you let me know about availability of any such tool (free, easy to use, and preferably online).

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.