Nodal analysis & the Y-bus
The key idea
The whole network fits in one matrix. Write Kirchhoff's current law at every bus in terms of admittances and you get I = Y·V. The rule that builds Y is purely mechanical: each branch adds its admittance to two diagonal entries and subtracts it from two off-diagonal ones. The finished matrix is the network's topology, written in numbers.
The idea
Every network study begins with the same two facts: what connects to what, and how strongly. Nodal analysis packs both into a single object, a matrix, and the rule that assembles it is simple enough to apply with a pencil.
Start with Kirchhoff's current law at one bus: whatever current enters from outside must leave through the branches. The current in a branch is the voltage difference across it times its admittance: for a pure reactance, b = 1/x. So the injection at bus 1 is (V₁ − V₂)·b₁₂ plus (V₁ − V₃)·b₁₃.
Now regroup those terms by voltage instead of by branch. V₁ collects the sum of every admittance touching bus 1; each other voltage collects the negative of the admittance that connects to it. Those coefficients are one row of a matrix. Write the same row for every bus and you have I = Y·V, where Y is the bus admittance matrix — the Y-bus.
The regrouping hands you the assembly rule directly, and it never gets more complicated: a branch between buses i and j adds its admittance to the two diagonal entries for i and j, and subtracts it from the two off-diagonal entries that link them. Take the branches in any order. Parallel branches simply add.
The finished matrix is a picture of the topology. It is symmetric, because a branch conducts the same way in both directions. A zero off-diagonal entry means no branch connects those two buses. An empty row means no branch reaches that bus at all: it is an island, and no solver can do anything with it. And with no shunt elements, every row sums to zero, which is just Kirchhoff restated: hold every bus at the same voltage, and no current flows anywhere.
The Y-bus is not a warm-up exercise before the real work. Every Newton–Raphson iteration reads this matrix: the solver rebuilds its Jacobian from it each round. And because the matrix is mostly zeros, even very large cases stay fast.
On this page every branch is a pure reactance, so each admittance is the ordinary number b = 1/x and the matrix holds ordinary numbers. In a production network the entries are complex, and line charging adds shunt terms to the diagonal, but the assembly rule is exactly the same.
Try it
Take branch 2–3 out of service and watch four entries change. Then take out both branches that reach bus 3 — its entire row goes to zero, and you have built an island.
branches in service: 3 of 3
| Row | Bus 1 | Bus 2 | Bus 3 |
|---|---|---|---|
| Bus 1 | 15.0 | −10.0 | −5.0 |
| Bus 2 | −10.0 | 14.0 | −4.0 |
| Bus 3 | −5.0 | −4.0 | 9.0 |
symmetric · rows sum to 0 · off-diagonal −b of the branch
point at a branch to highlight the four entries that it writes into
The reactances are in per unit, so each branch carries b = 1/x. Add b to both diagonal entries that the branch connects. Subtract b from both off-diagonal entries. That rule is complete, and it is the reason the matrix matches the topology. Pure reactances keep every entry real here. A production Y-bus holds complex admittances with line charging on the diagonal.
Why it matters
- It is the network in the one form a solver can use. No drawing, no coordinates, no symbols — just impedances and connections. Every study downstream reads this matrix, not the diagram.
- The zeros are what make large cases solvable. A bus connects to only a few neighbors, so almost every entry in a real Y-bus is zero. A solver that stores and factorizes only the non-zeros gets through a ten-thousand-bus case in seconds.
- An empty row is the diagnosis. When a solve fails because the network contains an island, the matrix shows the cause directly: a bus with no admittance to anywhere.
- Open a switch, and the matrix changes. One branch out of service changes four entries, and the power flow that follows is solving a genuinely different network.
The math, if you want itOptional — the page reads completely without it
Start from Kirchhoff's current law at bus 1 of a three-bus network, where each branch current is a voltage difference divided by a reactance:
KCL at bus 1
I1 = V1 − V2x12 + V1 − V3x13
Collect the terms by voltage rather than by branch, and the coefficients that appear are one row of the matrix Y:
the same equation, grouped by voltage
I1 = ( 1x12 + 1x13 ) V1 − 1x12 V2 − 1x13 V3
The bracket is Y11; the two negative coefficients are Y12 and Y13. From there the general rule follows: a branch between buses i and j with b = 1/x contributes four entries and nothing else:
assembly rule for one branch
Yii += b · Yjj += b · Yij −= b · Yji −= b
All the rows together are one matrix equation:
the whole network
I = Y · V
In a production network the entries are complex — an off-diagonal is −1/(r + jx) rather than −1/x, and line charging puts a shunt susceptance jB/2 on each diagonal. The power flow equations then use the matrix directly, one equation per bus:
complex power injected at bus i
Si = Vi · ( Σk Yik Vk )*
A solver therefore builds the Y-bus once and then reads it on every iteration.
See it in Phasor
You never type a matrix into Phasor. You draw the network and give the branches their impedances; Phasor assembles the Y-bus from the model, switch states included, and rebuilds it whenever the topology changes. When a study reports an island or a singular matrix, it is describing exactly the row structure this lesson builds by hand.