Why Plain Nodal Analysis Needed an Upgrade
Classical nodal analysis works beautifully until a circuit contains an ideal voltage source. The method writes every branch current as conductance times a voltage difference, but an ideal voltage source has no defined resistance — its current is whatever the rest of the circuit demands. Hand analysis patches this with supernodes, but that trick is awkward to automate. A program would have to detect floating sources, restructure the matrix, and special-case each topology. Modified Nodal Analysis (MNA) removes the special cases entirely, which is exactly why SPICE, Lcapy, and essentially every serious circuit simulator are built on it.
The core insight of MNA is simple: when an element's current cannot be expressed in node voltages, promote that current to a new unknown. The system grows by one row and one column per such element, but it stays fully systematic. No human judgment, no supernode bookkeeping — just a mechanical stamping procedure that any solver can run.
The Block Structure of the MNA System
MNA assembles a single linear system . The unknown vector is partitioned into node voltages and the extra source currents . This deliberate enlargement of the unknown set is the entire trick: rather than forcing every current to be a function of voltages, MNA simply admits the troublesome currents as first-class variables and lets the linear solver determine them along with the voltages. The matrix that results has a characteristic four-block form:
Each block has a precise meaning:
- is the conductance matrix built exactly as in ordinary nodal analysis: diagonal entries are the sum of conductances at a node, off-diagonal entries are the negated shared conductances.
- is the incidence matrix linking each voltage source's current to the nodes it touches. Entries are , , or .
- enforces the source constraints. For independent sources it equals , which is why the matrix is symmetric for purely passive networks plus independent voltage sources.
- is normally zero, but becomes nonzero for controlled sources and other elements that couple currents to currents.
On the right, holds independent current-source injections at each node, and holds the values of the independent voltage sources.
The Stamp Approach
MNA never builds the matrix by staring at the whole circuit. Instead it visits each element once and adds — stamps — that element's fixed contribution into the appropriate rows and columns. Because stamps simply accumulate, element order does not matter and the algorithm is trivially parallelizable. A practical consequence worth appreciating is that the same routine that builds a two-node toy circuit scales without modification to an integrated circuit with millions of nodes; only the loop count changes, never the logic. The table below lists the canonical stamps for a resistor between nodes and , an independent current source, an independent voltage source with current index , and a transconductance source.
| Element | Rows / columns touched | Stamp added |
|---|---|---|
| Resistor (p–q) | on diagonals, off-diagonals | |
| Current source (into p) | at , at | |
| Voltage source (+ at p) | , same for , and | |
| VCCS (control x–y) | coupling output nodes to control nodes |
Worked Example: Source, Two Resistors, Three Unknowns
Take a voltage source whose positive terminal is node 1 and whose negative terminal is ground. connects node 1 to node 2, and connects node 2 to ground. The unknowns are the two node voltages plus the source current , for three equations total. Using conductances and , the stamps assemble into:
The top-left block is the matrix; the rightmost column is (the source enters node 1 with ); the bottom row is enforcing . Plugging in numbers:
The bottom row gives immediately. Row 2 then yields , so . Finally row 1 returns the source current . The negative sign reflects the chosen reference direction: the source actually delivers into the network, which matches flowing through . The complete solution is , , .
Reading the Solved System
One feature that makes MNA so practical is that the answer vector hands you more than just node voltages. The current variables that were introduced to handle voltage sources are genuine unknowns in the solution, so the source currents fall out directly — no separate post-processing step is required to find how much current each voltage source delivers. In the worked example the solver returned alongside the node voltages in a single solve. This is a real advantage over plain nodal analysis with supernodes, where the source current has to be recovered afterward by writing an extra KCL equation. In a large simulation, that bookkeeping difference compounds across thousands of elements.
It also explains why MNA matrices are not always symmetric. A network of resistors and independent voltage sources produces a symmetric because . The moment you add a dependent source — the kind that appears in every transistor small-signal model — the controlling relationship populates rows that are no longer the transpose of the corresponding columns, and the symmetry is deliberately broken. Far from being a defect, that asymmetry is how the matrix records the directional nature of controlled sources, where the controlling port and the controlled port play different roles.
Frequency Domain and Why Solvers Love MNA
Replacing conductances with admittances turns the same machinery into an AC or transient solver. A capacitor stamps and an inductor stamps exactly where a resistor would stamp . The matrix entries become functions of , and solving symbolically produces a transfer function. Because the structure never changes — only the stamps' contents do — one code path handles DC, AC, and symbolic analysis. That uniformity, plus the natural sparsity inherited from the circuit graph, is the reason MNA dominates real solver implementations.
Common Mistakes
- Treating the source-current row as a KCL equation. The bottom rows are constraint equations (), not current balances. Confusing them produces a singular matrix.
- Including the ground node in the matrix. The reference node is removed; its row and column are deleted. Keeping it leaves the system rank-deficient.
- Wrong sign in the column. The goes on the source's positive terminal and on the negative. Swapping them flips the computed source current.
- Forgetting that controlled sources fill . A current-controlled source couples one current variable to another, producing nonzero entries and breaking symmetry — that is expected, not an error.
Related Tutorials
- Nodal Analysis Step by Step — the foundation MNA generalizes.
- Mesh Analysis Step by Step — the loop-current alternative.
- Transfer Functions in Circuit Analysis — what MNA produces in the -domain.