Set 19 — Gauss–Seidel Load Flow
Twenty worked problems on the load flow. The specification is in power rather than current, so \(\mathbf{I} = \mathbf{S}^{*}/\mathbf{V}^{*}\) and the system is quadratic in the unknown voltages — no rearrangement solves it in one step. Gauss–Seidel takes the nodal equation, solves each row for its own voltage, and sweeps until nothing moves. It is the simplest method that works, it converges slowly and predictably, and the five-bus system of Set 16 solves in 43 sweeps from a flat start — or 17 with the right acceleration factor.
The problem. \(S_i = V_i I_i^{*}\) with \(\mathbf{I} = \mathbf{Y}\mathbf{V}\) gives \(S_i^{*} = V_i^{*}\sum_j Y_{ij}V_j\) — quadratic in the voltages, and there is no closed-form solution for more than two buses.
Three bus types. Slack: \(|V|\) and \(\delta\) given, \(P\) and \(Q\) unknown. PV: \(P\) and \(|V|\) given. PQ: \(P\) and \(Q\) given. Two quantities known and two unknown at every bus.
The iteration. \(V_i^{(k+1)} = \dfrac{1}{Y_{ii}}\left[\dfrac{S_i^{*}}{(V_i^{(k)})^{*}} - \sum_{j\ne i}Y_{ij}V_j\right]\), using the newest value of every \(V_j\) as soon as it is available — that immediacy is what distinguishes Seidel from Jacobi.
Convergence is linear with a ratio near 0.78 on this network, so the error falls by about a quarter per sweep and 43 sweeps are needed for six figures. Newton's method, in Set 20, is quadratic.
Acceleration. \(V^{\text{acc}} = V^{(k)} + \alpha\left(V^{(k+1)}-V^{(k)}\right)\) with \(\alpha \approx 1.4\) cuts the count from 43 to 17. Too large a factor diverges: \(\alpha = 1.8\) takes 69.
A PV bus needs \(Q\) computed each sweep from \(Q_i = -\operatorname{Im}\left[V_i^{*}\sum_j Y_{ij}V_j\right]\), then the updated voltage rescaled to the specified magnitude.
Reactive limits convert the bus type. If the required \(Q\) falls outside the machine's capability, \(Q\) is fixed at the limit and the bus becomes PQ — its voltage then falls below the target.
State the load-flow problem precisely, show why it cannot be solved by inverting a matrix, and identify the single feature that makes it nonlinear.
What is known and what is wanted. A network's \(\mathbf{Y}_{\text{bus}}\) is known; the generation and load at each bus are known as powers; the bus voltages are wanted.
If the injections were currents. They are not.
The conjugate is the whole difficulty. Power and current are related by
So the injected current depends on the unknown voltage. Substituting:
Quadratic in the voltages — a product of \(V^{*}\) and \(V\) — and therefore not solvable by any linear method. For \(n\) buses it is a system of \(2(n-1)\) real quadratic equations.
Worse: it is not even analytic. The conjugate \(V^{*}\) is not a differentiable function of \(V\) in the complex sense, so complex Newton methods do not apply directly. Every practical algorithm works in real variables — magnitude and angle, or real and imaginary parts — which is why the Jacobian of Set 20 is a real \(2n\times2n\) matrix rather than a complex \(n\times n\) one.
The number of solutions. A quadratic system in \(2(n-1)\) unknowns has multiple roots:
The two-bus case of Set 15 had two real roots that merged at the nose; a five-bus case can have many. Iterative methods find the one nearest the starting point, which is why the flat start of Problem 4 is chosen to be near the operating solution.
What the specification actually is. Nothing about the problem is a matter of choice except which quantities are specified where — and that is the bus classification of the next problem. Once it is fixed, the equations are determined and only the method of solution remains open.
Classify the buses of the five-bus system, state what is known and unknown at each, and count the equations and unknowns.
Every bus has four associated quantities — \(P\), \(Q\), \(|V|\), \(\delta\) — of which exactly two are specified:
Why one bus must be slack. The total generation must equal the total load plus the losses, and the losses are not known until the solution is. One bus must therefore be left free to absorb the difference:
Specifying \(P\) at every bus would over-determine the problem. The slack bus also fixes the angle reference, since only angle differences affect anything.
The five-bus system, taking all four non-slack buses as PQ:
On a 100 MVA base. The sign convention is injection-positive, so a load is a negative injection.
The count. Four PQ buses, two unknowns each:
In general \(2(n-1) - n_{PV}\) unknowns for \(n\) buses of which \(n_{PV}\) are voltage-controlled. The system is square, as it must be.
The choice of slack matters. It should be the largest machine, or the point of connection to a larger system, for two reasons: it must be able to absorb the loss without an implausible output, and the numerical conditioning is best when the reference is the stiffest bus. Choosing bus 5 as slack here would still give the correct answer, but with worse convergence.
And bus 2 is a modelling decision. A real 40 MW machine would regulate its terminal voltage and be a PV bus; treating it as PQ says its excitation is fixed. Problem 11 solves the same network with bus 2 as PV and gets a different answer — 1.045 pu instead of 1.047, with 0.15 pu of reactive output instead of the specified 0.20.
Derive the Gauss–Seidel iteration formula for a PQ bus, and state what distinguishes it from the Gauss (Jacobi) method.
Start from row \(i\) of the nodal equation, with the injection written as a power:
Solve for the diagonal term's voltage:
A fixed-point iteration: put a voltage in, get a voltage out, repeat. Each bus's equation is solved for its own voltage, treating the others as known.
The Seidel refinement. The sum \(\sum_{j\ne i}Y_{ij}V_j\) runs over buses both before and after \(i\) in the sweep. Two choices:
Seidel uses each new value the moment it exists. It converges roughly twice as fast for the same work, and needs only one voltage vector in memory rather than two.
Written out for bus 2 of the five-bus system:
With \(Y_{22} = 10.8333-j32.4150\). Bus 1 is the slack and never updates; buses 3, 4 and 5 use whatever values are current.
The order of the sweep matters, though not the answer. Sweeping 2, 3, 4, 5 propagates the slack's influence outward along the network in one pass; sweeping 5, 4, 3, 2 propagates it against the flow of the network and converges more slowly. Bus ordering is a second-order effect but a real one.
The convergence test. Two are in use, and they are not equivalent:
The first is cheaper and is used here; the second is what actually matters and is the standard in production programs, because a slowly-converging iteration can have a small voltage change and a large power mismatch.
Explain the flat start, justify it, and state when it is a poor choice.
The definition. Every unknown voltage is set to \(1.0\angle0^\circ\) pu:
The slack keeps its specified value; every other bus starts at nominal magnitude and zero angle.
The justification is empirical and strong. A transmission network in normal operation has:
In this case the true solution is 1.018 to 1.047 pu in magnitude and 0 to \(-6.15^\circ\) in angle. The flat start is within 5% and 6° — a good initial guess by any standard.
It also selects the right root. The load-flow equations have multiple solutions, and an iterative method converges to whichever one it starts nearest. The flat start is close to the high-voltage operating solution and far from the low-voltage ones, so it finds the physical answer.
When it is a poor choice, and there are four cases:
The last is not a failure of the flat start but a missed opportunity: a contingency study solving a thousand near-identical cases should start each from the base-case solution, which typically halves the iteration count.
The alternative for hard cases is the DC power flow of Set 17. Solving \(\mathbf{P} = \mathbf{B}\boldsymbol{\theta}\) costs one factorisation, always converges, and gives angles typically within 1° of the AC answer. Starting the AC iteration from those angles with flat magnitudes is standard practice for difficult cases and is sometimes called a "DC start".
What the flat start is not. It is not a claim that the voltages are 1.0; it is a starting point for an iteration whose fixed point is the answer. If the method converges, the starting point affects only how long it took — and, when there are multiple roots, which one was found.
Carry out the first Gauss–Seidel sweep on the five-bus system by hand, working bus 2 in full detail.
Bus 2, in full. The row of \(\mathbf{Y}_{\text{bus}}\) is
The injection term, with \(S_2 = 0.20+j0.20\) and \(V_2^{(0)} = 1.0\):
The neighbour sum, with \(V_1 = 1.06\) and \(V_3 = V_4 = V_5 = 1.0\):
The update:
A rise of nearly 4% at the first touch, and a small positive angle — bus 2 is net-exporting 0.20 pu, so it leads.
Buses 3, 4 and 5 follow, each using the values updated so far in this same sweep:
Note that bus 3's sum already contains the new \(V_2 = 1.03753\angle0.159^\circ\), not the flat 1.0 — that is Seidel at work.
What the first sweep has achieved. All four angles have moved in the right direction and are ordered correctly by distance from the slack. The magnitudes are close to their final values at bus 2 (1.0375 against 1.0474) and much less so at bus 5 (1.0073 against 1.0179). The information has travelled outward one bus per sweep, and bus 5 is furthest out.
Carry out the second sweep, working bus 2 in full, and compare the movement with the first.
The injection term has changed, because \(V_2\) is no longer 1.0:
Dividing by a larger voltage reduces the current, as it must for fixed power. This term is the only place the nonlinearity enters.
The neighbour sum, now using the first sweep's values:
Against \(-11.13333+j33.40000\) before — a change of about 4% in the real part.
The update:
The full sweep:
The pattern of movement. The magnitude changes have collapsed — from 4% in the first sweep to 0.5% in the second — while the angle changes are almost unchanged, about \(-0.9^\circ\) per bus per sweep. That asymmetry persists throughout:
Angle is a global quantity — bus 5's angle depends on every bus between it and the slack — and information travels one bus per sweep.
Bus 2's angle has crossed zero, from \(+0.159^\circ\) to \(-0.702^\circ\), on its way to \(-2.806^\circ\). The first sweep saw bus 2 exporting into a network still at zero angle and put it ahead; the second sweep, with the load buses now behind, corrects it. An intermediate iterate is not an approximate answer — it is a point on the path, and it may be on the wrong side of the target.
Give the converged solution and check that it satisfies the specified injections.
After 43 sweeps at a tolerance of \(10^{-6}\):
The check. Compute the injections back from the solution, \(S_i = V_i(\mathbf{Y}\mathbf{V})_i^{*}\):
Exact to five decimals at every specified bus. That is the only verification a load flow admits, and it must be done — a converged iteration proves the fixed point was reached, not that the fixed point is the right one.
Reading the profile. The voltages fall monotonically with distance from the slack:
A total drop of 4% across the network, comfortably inside a \(\pm5\%\) band. Buses 3 and 4 are within 0.06% of each other — the stiff \(0.01+j0.03\) tie again, and the same near-identity the impedance matrix of Set 18 showed.
And the angles spread over 6.15°, the largest branch difference being \(2.81^\circ\) across line 1–2. Every angle difference is well inside the range where \(\sin\delta \approx \delta\) holds to 1%, which is why the DC flow of Set 17 did as well as it did.
Bus 2 is the highest non-slack bus despite being nearest to the loads, because it is the only other bus with generation. Its \(+0.20\) pu of reactive injection holds it up; without it the voltage there would fall below bus 3's.
Tabulate the largest voltage change at each sweep, establish the order of convergence, and estimate the number of sweeps needed for a given tolerance.
The convergence history:
The order. Take the ratio of successive errors after the transient dies:
A constant ratio near 0.78 — the signature of linear (first-order) convergence: \(e_{k+1} = \mu e_k\) with \(\mu \approx 0.78\). Each sweep removes 22% of the error.
The sweep count follows directly. To reduce the error by a factor \(F\):
Each extra decimal place costs about nine more sweeps, forever. There is no acceleration in the tail.
Where \(\mu\) comes from. It is the spectral radius of the iteration matrix, and for a load flow it is governed by how strongly the diagonal of \(\mathbf{Y}_{\text{bus}}\) dominates the rest of its row. Set 16 found that dominance to be marginal — equality without charging, slight deficiency with it. A ratio of 0.78 is exactly what a barely-dominant matrix produces.
And \(\mu\) grows with system size. Information travels one bus per sweep, so a network of diameter \(d\) needs at least \(d\) sweeps for the slack's influence to reach the far end:
The count grows roughly with \(n\), and the cost per sweep also grows with \(n\) — so the total cost is \(O(n^{2})\) against Newton's \(O(n^{1.4})\). That is the whole argument for Set 20.
Apply an acceleration factor of 1.4 and compare the convergence with the unaccelerated case. Explain why the technique works.
The modification is one line. Compute the update as usual, then over-shoot it:
With \(\alpha = 1\) this is the plain iteration. With \(\alpha > 1\) the correction is exaggerated; with \(\alpha < 1\) it is damped.
The comparison:
Seventeen sweeps against 43 — a factor of 2.5 for one extra multiplication per bus per sweep.
The first three sweeps are worse. Accelerating a bad estimate overshoots, so the early error is larger. The benefit appears from sweep 4 onward and grows: by sweep 10 the accelerated error is twenty times smaller.
Why it works. Gauss–Seidel's error decays as \(\mu^{k}\) with \(\mu\) real and positive, which means every correction points the same way. The iteration is consistently under-shooting:
Each sweep moves only 22% of the remaining distance. Multiplying the step by \(\alpha\) moves \(0.22\alpha\) of it instead, and the ideal \(\alpha\) would be \(1/0.22 = 4.5\) — if the error decayed uniformly in every component, which it does not.
The reason 4.5 fails. The error has several components decaying at different rates, and the acceleration factor that suits the slowest over-corrects the fastest, driving them unstable. The usable \(\alpha\) is set by the fastest-decaying component rather than the slowest, which is why the practical range is 1.4 to 1.7 rather than 4.5.
The method's proper name is successive over-relaxation, and it applies to any linear stationary iteration. For symmetric positive-definite systems there is a formula for the optimal \(\alpha\) in terms of the Jacobi spectral radius; for the nonlinear load flow there is not, and \(\alpha\) is found by trial — the subject of the next problem.
Find the acceleration factor that minimises the sweep count for this network, and explain the shape of the curve.
Scanning \(\alpha\):
A minimum near 1.4, with a sharp penalty beyond 1.6.
The shape of the curve is characteristic of over-relaxation and asymmetric:
The penalty for undershooting is mild and the penalty for overshooting is severe, so the practical choice is deliberately conservative — 1.4 to 1.5 rather than the true optimum.
Why the optimum is not universal. It depends on the network's electrical structure through the spectral radius:
The last case is the surprise: a negative reactance in the network can make the iteration oscillatory, and then damping rather than acceleration is required.
Practical strategies, in order of sophistication:
The third is the most useful in practice: \(\mu\) is measurable from the ratio of consecutive errors, and \(\alpha\) can be reset every few sweeps.
And the diminishing returns. Acceleration takes 43 sweeps to 17 — a factor of 2.5. Newton–Raphson takes the same problem to four iterations, a factor of ten. Tuning \(\alpha\) is optimising the wrong thing once a Newton solver is available, and the historical interest in acceleration factors dates from the years when it was not.
Re-classify bus 2 as a voltage-controlled bus holding \(|V_2| = 1.045\) pu with \(P_2 = 0.20\). Set out the modified iteration and give the solution.
The difficulty. The iteration formula needs \(S_i\), and at a PV bus \(Q_i\) is unknown. It must be computed afresh each sweep from the current voltage estimate:
Using the newest available value of every voltage, exactly as the main iteration does.
The three-step sweep at a PV bus:
Step 3 is what makes it a PV bus. The update gives a voltage of the wrong magnitude but the right angle, and the angle is the quantity actually being solved for.
The solution, after 34 sweeps at \(\alpha = 1.4\):
Comparison with the PQ case of Problem 7:
Every bus is slightly lower, because holding bus 2 at 1.045 rather than letting it rise to 1.047 requires 0.151 pu of reactive support instead of 0.200 — and the 0.05 pu difference is felt across the network.
The convergence is slower — 34 sweeps against 17 — because the rescaling of step 3 throws away part of each correction. A PV bus converges in angle only, and the magnitude information computed at every sweep is discarded.
Which classification is right depends on the machine's control. A generator on automatic voltage regulation holds its terminal voltage and is PV; a machine on constant excitation, or an equivalent representing a fixed reactive injection, is PQ. The two models of the same 40 MW machine give voltages differing by 0.2% — small here, and much larger in a system where the machine is a substantial part of the reactive supply.
The machine at bus 2 can supply between 0 and 0.10 pu of reactive power. Repeat the previous problem with that limit enforced.
The test, applied every sweep:
A bus that hits a limit stops controlling its voltage and becomes an ordinary load bus with a fixed reactive injection.
Here the limit binds. Problem 11 found that holding 1.045 pu requires \(Q_2 = 0.1507\), which exceeds the 0.10 available. So bus 2 becomes PQ with \(S_2 = 0.20+j0.10\):
The three cases side by side:
Every 0.05 pu of reactive support withdrawn from bus 2 costs about 0.0025 pu on every bus in the system.
The behaviour to watch for is limit oscillation. If the bus is PQ at the limit its voltage falls; at the lower voltage the required \(Q\) may drop back inside the limit, so it reverts to PV; then the required \(Q\) rises again and it re-limits. The iteration flips between the two and does not converge.
Three standard remedies:
The third is the crudest and the most common. It can give a slightly wrong answer if a bus limits transiently on the way to the solution, which is why production programs use the first two together.
The engineering significance is larger than the arithmetic. A generator on its reactive limit has lost voltage control, and the network has lost a support point. In a stressed system this is the sequence that leads to collapse: one machine limits, voltages fall, the next machine limits to compensate, and so on. Every large voltage-collapse blackout has this cascade in its timeline, and the load flow shows the first step of it.
Compute the slack bus power from the converged solution, and check it against the generation and load totals.
The calculation is one row of the nodal equation, done once at the end:
The slack's injection is never used during the iteration — it is an output, not an input.
Evaluating with the converged voltages:
The slack machine generates 129.6 MW and absorbs 7.4 MVAr — it is running under-excited, because the network's charging is producing more vars than the load requires.
The real power balance:
4.59 MW of loss on 145 MW of load — 3.2%. That is high for a transmission system, reflecting this test network's \(x/r = 3\); a real 220 kV network would lose 1–2%.
The reactive balance:
Negative, meaning the network itself generates 17.4 MVAr net — its charging exceeds its \(I^{2}X\) absorption, so the system is operating below its surge impedance loading. Set 15's language, appearing in a load flow.
Why the slack must be able to take it. The slack absorbs whatever the rest of the system does not supply, and here that is 129.6 MW — 89% of the total load. If bus 1's machine cannot produce that, the case is infeasible however well it converges. A converged load flow with an implausible slack output is a wrong case, not a wrong answer.
And the sensitivity to the choice of slack. Choosing bus 5 as slack instead would give the same voltages relative to each other but a different loss allocation and a different set of generator outputs — because the loss depends on the flow pattern, which depends on which bus is free. Loss allocation between market participants is contentious for exactly this reason.
Compute the complex power flow at each end of every line, and verify the power balance at two buses.
The line current includes the local half-charging:
And \(S_{ji}\) is computed the same way from the other end. The two are not negatives of each other — their sum is the loss in that line.
All seven lines, in per unit:
Balance at bus 1:
Exactly the slack injection of Problem 13. The two calculations are independent — one from the nodal equation and one from the line flows — so the agreement confirms both.
Balance at bus 4, which has a load of \(0.40+j0.05\):
The load, exactly.
Reading the flows. The largest is 88.9 MW on line 1–2, and the smallest is 6.3 MW on 4–5 — the same ranking the DC flow of Set 17 gave. Power leaves the slack on both its circuits and distributes through bus 2, which handles 107.5 MW of throughput across its three outgoing lines.
The reactive flows tell a different story. Several are negative at the sending end and positive at the receiving — line 3–4 sends \(-0.052\) and receives \(+0.032\). That is charging: the line is generating more vars than it consumes, so vars flow out of it at both ends. Every lightly loaded line in this system does the same, which is why the network is a net var source.
Compute the loss in every line, verify the total against the slack calculation, and identify where the loss is concentrated.
The loss in a line is the sum of the two end flows:
Not the difference. Both are defined as flowing into the line from their respective buses, so what remains is what the line consumed.
Line by line:
Matching the slack calculation of Problem 13 exactly.
Three lines carry 81% of the loss. Lines 1–2, 1–3 and 2–5 are the heavily loaded ones, and loss goes as the square of the current:
Line 1–2 carries 0.889 pu and loses 0.0141; line 4–5 carries 0.063 and loses 0.0003. A factor of 14 in flow gives a factor of 45 in loss — close to the square, the discrepancy being the different resistances.
The reactive column is negative almost throughout, meaning those lines generate rather than absorb. The single exception is 2–5, the only line loaded above its own surge impedance loading:
Line 4–5's \(-0.051\) is the extreme case: it carries almost nothing and is nearly pure charging.
The 3.2% loss is high, and the cause is the network rather than the operation. Every line here has \(x/r = 3\), against 8–15 for real transmission conductors. Scaling all seven resistances down by a factor of three would bring the loss to about 1.1%, which is a realistic transmission figure.
What reduces losses, in order of effectiveness on this network:
Account for every megavar in the converged solution: what is generated, what is absorbed, and by what.
The two mechanisms, computed from the converged voltages and currents:
Matching the sum of the line-by-line reactive losses in Problem 15 exactly, and confirming that both were computed correctly. The network generates 17.4 MVAr more than it consumes.
The same calculation for real power, as a check on the method:
Exactly the figure obtained from the slack injection in Problem 13, by a completely different route. Two independent calculations of the loss agreeing to five decimals is the strongest available check on a converged solution.
The whole reactive account:
All in per unit. The slack machine runs under-excited, taking 7.4 MVAr out of the network — and the account closes to the last digit.
The balance equation closes:
What the negative slack reactive means operationally. A machine absorbing vars is under-excited, and under-excitation is the region its capability curve most restricts — the limit is set by end-region heating in the stator core rather than by field or armature current. A network that is lightly loaded relative to its charging pushes its machines into that region, which is exactly the condition Set 14's shunt reactors were installed to relieve.
And it identifies the operating regime. The network as a whole is generating vars, so it is running below its surge impedance loading — the same conclusion Set 15 reached from the sign of \(Q_S\). At heavy load the sign would reverse, the machines would go over-excited, and shunt capacitors rather than reactors would be needed.
Compare the converged AC solution with the DC power flow of Set 17, branch by branch and angle by angle, and say where the DC model's errors come from.
The angles:
The DC model overstates every angle by 0.13 to 0.48°, and the error grows with distance from the slack.
The branch flows:
Every DC flow is low, by 0.07% to 3.9%. The errors are systematic, not random.
Why every error has the same sign. The DC model has no losses, so the total generation it computes is 1.25 pu against the AC's 1.296. The missing 0.046 pu has to come from somewhere, and it comes out of the flows on the circuits that carry it — which are the ones nearest the slack. That is why 1–2 has the largest error and 3–4 the smallest.
The two error sources, separated:
The third approximation contributes almost nothing at these angles. Nearly all of the error is the loss.
The verdict. Under 4% on every flow, and correct ranking throughout — the DC model identified the same three heavily loaded lines and the same lightly loaded ones. For a contingency screen that is entirely adequate. For a study that must confirm a thermal rating at 95% loading, 4% is not.
And on a real network the DC model does better, not worse. This system's \(x/r = 3\) gives 3.2% losses; a 400 kV network with \(x/r = 12\) loses under 1%, and the DC errors fall in proportion. The DC power flow's accuracy improves with voltage class, which is why it is a transmission tool and not a distribution one.
Scale the loads at buses 3, 4 and 5 by a factor \(k\) and find where Gauss–Seidel stops converging. Determine whether the failure is the method's or the system's.
Scaling the loads, with bus 2's generation held:
At \(\alpha = 1.4\) and a tolerance of \(10^{-8}\).
The critical question: is there a solution at \(k = 3.2\) that the method failed to find, or is there no solution at all?
Testing with a direct nonlinear solver — Newton from the previous \(k\)'s answer, continued in small steps:
The solution ceases to exist at \(k \approx 3.16\), a total load of 4.58 pu against the base 1.45. That is the nose of the P–V curve — the voltage-collapse point of Set 15, found on a five-bus network.
So the failure is the system's, not the method's — beyond \(k = 3.16\). But between \(k = 3.0\) and \(k = 3.16\) a solution exists and Gauss–Seidel does not find it:
A narrow band, but a real one — and it is the band nearest the collapse point, which is exactly where an operator most needs an answer.
Why the method fails there. Near the nose the two solution branches approach each other, the Jacobian becomes near-singular, and the iteration's contraction ratio \(\mu\) rises towards 1. At \(k = 3.0\) it takes 86 sweeps against 24 at \(k = 1.0\); a little further and \(\mu\) exceeds unity and the iteration diverges.
The diagnosis matters. A non-converging load flow admits two very different readings:
Only the second is an engineering finding, and distinguishing them requires either a more robust solver or a continuation method that traces the P–V curve to its nose. Confusing the two is the commonest error in interpreting a failed case.
Count the arithmetic per sweep, establish how the total cost scales with system size, and compare with Newton–Raphson.
Per bus per sweep, the operations are:
About \(d+3\) complex operations, and \(d\) averages 3 in a real network. Call it 6 complex operations per bus.
Per sweep, therefore, the cost is proportional to \(n\) — not \(n^{2}\), because the sum runs only over the actual neighbours. Gauss–Seidel exploits sparsity automatically, without any of the ordering machinery of Set 17.
The number of sweeps grows with \(n\) too. Information travels one bus per sweep, so the count is bounded below by the network's diameter, which grows roughly as \(\sqrt{n}\) for a planar network but is observed to give:
So the total is \(O(n^{1.5})\) to \(O(n^{2})\) — and beyond about a thousand buses the iteration count grows faster than the size, and reliability collapses.
Against Newton–Raphson:
The decisive row is the second. Newton's iteration count does not grow with the system, so the crossover comes early — at perhaps 20 to 50 buses, and certainly by 100.
Gauss–Seidel's one remaining advantage is memory: one voltage vector against a factorised Jacobian. That mattered greatly in 1960, when core memory was measured in kilowords, and it is why the method dominated for a decade. It does not matter now.
Where it survives. As an initialiser — two or three Gauss–Seidel sweeps from a flat start cost almost nothing and give Newton a better starting point than the flat profile, improving its reliability on difficult cases. That is its role in modern software, and it is a real one.
Present the five-bus load flow as a complete study: the solution, the flows, the losses, the limit checks, and the engineering findings.
The bus solution:
The branch summary, ordered by loading:
Sending-end quantities. Total loss 4.587 MW, 3.2% of the 145 MW load.
The limit checks:
Only bus 1's voltage is at the 1.06 specified value, above the 1.05 operating band — but it is the slack and was set there deliberately.
Finding 1 — the system is lightly loaded relative to its charging. The network generates 17.4 MVAr net and the slack absorbs 7.4. Under-excited operation is the reactive constraint here, not over-excited, and the remedy if it becomes binding is a shunt reactor rather than a capacitor.
Finding 2 — line 1–2 is the critical circuit. It carries 89 MVA, 31% of the losses, and — from the contingency analysis of Set 17 — rises to 125 MW on the loss of 1–3. Its rating governs the whole case.
Finding 3 — buses 3 and 4 are one bus. Their voltages differ by 0.0006 pu and their angles by 0.33°. The \(0.01+j0.03\) tie makes them electrically indistinguishable, which the impedance matrix of Set 18 said and the load flow confirms. Any study not concerned with the flow on that particular line could merge them.
Finding 4 — the loadability margin is 3.16. From Problem 18, the system collapses at 3.16 times its present load. That is a comfortable margin by any standard, and it is the single number a voltage-stability assessment would report.
Practice Problems
Work each on paper before opening the answer. The answer is given so you can check yourself; the method is deliberately not.
P1. What makes the load-flow equations nonlinear?
Show answer
The injection is specified as power, so \(I = S^{*}/V^{*}\) and the equation becomes \(S^{*} = V^{*}\sum Y V\) — quadratic in the voltages. Problem 1.P2. A 30-bus system has 5 PV buses. How many unknowns has its load flow?
Show answer
\(2(n-1) - n_{PV} = 58 - 5 = \mathbf{53}\).P3. Why must exactly one bus be the slack?
Show answer
The losses are unknown until the solution exists, so one bus must be free to supply them — and it also fixes the angle reference. Problem 2.P4. A PQ bus has \(S = -0.5-j0.2\) and a current estimate of \(V = 0.98-j0.04\). Find \(S^{*}/V^{*}\).
Show answer
\((-0.5+j0.2)/(0.98+j0.04) = \mathbf{-0.5010 + j0.2245}\).P5. What distinguishes Gauss–Seidel from the Gauss (Jacobi) method?
Show answer
Seidel uses each updated voltage immediately within the same sweep; Jacobi uses only the previous sweep's values. Seidel converges about twice as fast and needs half the memory. Problem 3.P6. An iteration's error falls by a factor 0.8 each sweep. How many sweeps to reduce it by \(10^{4}\)?
Show answer
\(\ln(10^4)/\ln(1/0.8) = 9.21/0.223 = \mathbf{41}\) sweeps.P7. With \(V^{(k)} = 1.02\angle-3^\circ\) and \(V^{(k+1)} = 1.03\angle-3.5^\circ\), apply \(\alpha = 1.5\).
Show answer
In rectangular: \(1.01860-j0.05338\) and \(1.02808-j0.06288\). Accelerated: \(1.01860+1.5(0.00948) - j[0.05338+1.5(0.00950)] = \mathbf{1.03282 - j0.06763}\), i.e. \(1.03503\angle-3.75^\circ\).P8. How is \(Q\) found at a PV bus?
Show answer
\(Q_i = -\operatorname{Im}\left[V_i^{*}\sum_j Y_{ij}V_j\right]\), recomputed every sweep from the current voltage estimates. Problem 11.P9. A PV bus needs \(Q = 0.32\) but its machine can supply only 0.25. What happens?
Show answer
\(Q\) is fixed at 0.25 and the bus becomes PQ; its voltage then settles below the target. Problem 12.P10. Total generation is 1.60 pu and total load 1.55. What are the losses?
Show answer
\(\mathbf{0.05}\) pu, or 5 MW on a 100 MVA base — 3.2% of load.P11. A line has \(S_{ij} = 0.50+j0.10\) and \(S_{ji} = -0.49-j0.14\). Find its losses.
Show answer
The sum, not the difference: \(\mathbf{0.01 - j0.04}\) pu. The negative \(Q\) means the line is a net var source.P12. A load flow fails to converge. Name the two possible explanations and how to tell them apart.
Show answer
Either the method failed or no solution exists. Distinguish with a more robust solver or a continuation method that traces the P–V curve to its nose. Problem 18.
Challenge Problems
Three problems on why the method behaves as it does, and on what a converged answer does and does not establish.
C1 — Why the angles are slow. Problem 6 observed that magnitudes settle in two sweeps and angles take forty. Explain the mechanism, predict how the sweep count should scale with the network's diameter, and test the prediction by re-solving with the buses swept in reverse order.
Show answer
The mechanism. A bus's magnitude is set principally by its own injection and its immediate neighbours — the \(S^{*}/V^{*}\) term and the diagonal dominate. Its angle is set by its position in the chain of power flow between it and the slack, and the only way that information propagates is one branch per sweep, through the neighbour sum.
The prediction. The slack's influence reaches a bus \(d\) branches away only at sweep \(d\), so the sweep count is bounded below by the network diameter, and the error's slowest-decaying mode has a contraction ratio approaching \(1 - c/d\). For this network the diameter from bus 1 is 2 (bus 5 is 1–2–5), which is small — and yet 43 sweeps are needed, so diameter is a lower bound rather than an estimate. The 0.78 ratio comes from the near-equality of diagonal and off-diagonal sums that Set 16 found, not from the diameter.
The sweep-order test, and it does not go as expected. Sweeping 2, 3, 4, 5 propagates the slack's influence outward with the flow of power; sweeping 5, 4, 3, 2 propagates it against the flow. Measured:
\[ \begin{array}{lcc} \text{Order} & \alpha = 1.0 & \alpha = 1.4 \\ \hline 2,3,4,5 & 43 & 17 \\ 5,4,3,2 & 40 & 16 \end{array} \]The reverse order is marginally faster — the opposite of the prediction, by about 7%. The reason is that this network is meshed and its diameter from the slack is only 2: bus 2 is adjacent to the slack and to all three of the others, so almost every bus is one step from fresh information whichever way the sweep runs. The propagation argument needs a long path to bite.
The prediction does hold where the diameter is large. On a radial feeder of twenty buses, sweeping from the source outward converges in roughly half the sweeps of the reverse, because each sweep then advances the solution one bus along the chain. The lesson is that sweep ordering matters in proportion to the network's diameter, and a meshed transmission system has almost none. That is also why the observed \(\mu = 0.78\) comes from the near-equality of diagonal and off-diagonal sums that Set 16 found, rather than from any propagation delay.
C2 — The solution that is not the answer. Gauss–Seidel converged to the high-voltage solution from a flat start. Show that a different start reaches a different solution, that both satisfy the equations exactly, and explain how to tell which one an operator wants.
Show answer
Both roots are genuine. The load-flow equations are quadratic, and Set 15's two-bus analysis found exactly two real roots for any load below the nose. On the five-bus system, starting from a flat profile finds the high-voltage root; starting from voltages near 0.4 pu can find a low-voltage one where the same power is delivered at roughly three times the current.
Both satisfy the equations exactly. Recomputing the injections from the low-voltage solution reproduces the specified \(P\) and \(Q\) to full precision. Nothing in the mismatch check distinguishes them — which is the uncomfortable part.
Three ways to tell them apart:
\[ \begin{array}{ll} \text{Voltage magnitude} & \text{the operating root is near 1.0 pu} \\ \text{Current} & \text{the low root draws several times the current} \\ \text{Stability} & \text{the low root is dynamically } \textit{unstable} \end{array} \]The third is decisive and is the real reason the low root is uninteresting: on the lower branch, \(\partial V/\partial P > 0\) — increasing the load raises the voltage — which is the signature of an unstable equilibrium. A system perturbed away from it does not return.
Why it matters anyway. Near the nose the two roots approach each other, and an iteration started from a flat profile can land on the wrong branch. The margin to collapse — the distance between the operating point and the nose — is computed by tracing the curve with a continuation method rather than by solving at a point, precisely because a point solution cannot say which branch it is on.
And the general warning: a converged load flow with a full mismatch check is a proof that the equations are satisfied and nothing more. Whether the answer is the operating point is a judgement about the voltages, not a result of the calculation.
C3 — What the acceleration factor is really doing. Derive the relationship between the optimal \(\alpha\) and the contraction ratio \(\mu\) for a single error mode, explain why the observed optimum of 1.4 is so much smaller than that formula predicts, and propose a practical adaptive scheme.
Show answer
Single-mode analysis. With one error mode decaying as \(e_{k+1} = \mu e_k\), the unaccelerated step covers \((1-\mu)\) of the remaining distance. Accelerating by \(\alpha\) gives
\[ e_{k+1} = \left[1 - \alpha(1-\mu)\right]e_k \]which vanishes when \(\alpha(1-\mu) = 1\), i.e.
\[ \alpha_{\text{opt}} = \frac{1}{1-\mu} = \frac{1}{1-0.78} = 4.5 \]One sweep would converge exactly — if there were only one mode.
Why 4.5 fails. The error is a mixture of modes with different \(\mu\), from near 0.78 down to near 0. For a mode with \(\mu = 0\) the accelerated factor is \(1-\alpha\), which for \(\alpha = 4.5\) is \(-3.5\) — divergent, and oscillating in sign. Stability requires
\[ \left|1-\alpha(1-\mu)\right| < 1 \quad\text{for } \textit{every }\text{mode} \quad\Rightarrow\quad \alpha < \frac{2}{1-\mu_{\min}} \]With \(\mu_{\min} \approx 0\) that gives \(\alpha < 2\) — matching the observed divergence beyond 1.8 and the theoretical bound for over-relaxation.
The best \(\alpha\) equalises the accelerated factors of the extreme modes: \(1-\alpha(1-\mu_{\max}) = -(1-\alpha)\), giving \(\alpha = 2/(2-\mu_{\max}) = 2/1.22 = 1.64\). Close to the observed range, and the discrepancy with the measured 1.4 reflects that the load flow is nonlinear and the mode structure changes as it converges.
A practical adaptive scheme:
\[ \begin{array}{ll} 1 & \text{Run three sweeps at } \alpha = 1 \\ 2 & \text{Estimate } \mu = \|\Delta V^{(3)}\|/\|\Delta V^{(2)}\| \\ 3 & \text{Set } \alpha = 2/(2-\mu) \\ 4 & \text{Re-estimate every five sweeps and reset} \end{array} \]It costs three unaccelerated sweeps and a division, and it removes the guesswork. That it is rarely implemented says something about the method's remaining importance rather than about the idea.
Multiple-Choice Questions
MCQ 1. The load-flow equations are nonlinear because:
(a) \(\mathbf{Y}_{\text{bus}}\) is complex (b) injections are specified as power (c) the network is meshed (d) of transformer tapsShow answer
(b). \(I = S^{*}/V^{*}\) makes the system quadratic. Problem 1.MCQ 2. At a PQ bus the unknowns are:
(a) \(P\) and \(Q\) (b) \(|V|\) and \(\delta\) (c) \(Q\) and \(\delta\) (d) \(P\) and \(|V|\)Show answer
(b). Option (c) is the PV bus and (d) is what a PV bus specifies. Problem 2.MCQ 3. The slack bus exists because:
(a) a reference angle is needed (b) the losses are unknown in advance (c) both (d) neitherShow answer
(c). Both reasons are real and independent. Problem 2.MCQ 4. Gauss–Seidel differs from Jacobi in that it:
(a) uses acceleration (b) uses updated values within the same sweep (c) needs the Jacobian (d) handles PV busesShow answer
(b) — about twice the convergence rate and half the memory. Problem 3.MCQ 5. Gauss–Seidel converges:
(a) quadratically (b) linearly (c) cubically (d) in one stepShow answer
(b), with ratio \(\mu \approx 0.78\) here — each sweep removes 22% of the error, forever. Problem 8.MCQ 6. A typical acceleration factor is:
(a) 0.5 (b) 1.0 (c) 1.4–1.6 (d) 4.5Show answer
(c). The single-mode formula gives 4.5, but the fastest-decaying mode limits it to under 2. Challenge C3.MCQ 7. At a PV bus, \(Q\) is:
(a) specified (b) recomputed every sweep (c) zero (d) taken from the previous caseShow answer
(b), from \(Q_i = -\operatorname{Im}[V_i^{*}\sum_j Y_{ij}V_j]\), followed by rescaling the voltage to its specified magnitude. Problem 11.MCQ 8. When a PV bus hits its reactive limit it:
(a) diverges (b) becomes a PQ bus at the limit (c) becomes the slack (d) is removedShow answer
(b), and its voltage then falls below target. Problem 12.MCQ 9. The loss in a line is:
(a) \(S_{ij}-S_{ji}\) (b) \(S_{ij}+S_{ji}\) (c) \(|S_{ij}|-|S_{ji}|\) (d) \(S_{ij}/S_{ji}\)Show answer
(b). Both are defined flowing into the line, so their sum is what the line kept. Problem 15.MCQ 10. A negative reactive loss on a line means:
(a) an error (b) the line is below its SIL (c) the line is above its SIL (d) the line is openShow answer
(b) — charging exceeds \(I^{2}X\), so the line is a net var source. Six of this network's seven lines are. Problem 15.MCQ 11. Compared with an AC load flow, the DC power flow's branch flows here are:
(a) higher (b) lower (c) identical (d) randomly differentShow answer
(b), by 0.07% to 3.9% — systematically low, because it omits the losses. Problem 17.MCQ 12. Newton–Raphson's decisive advantage over Gauss–Seidel is that:
(a) each iteration is cheaper (b) it uses less memory (c) its iteration count does not grow with system size (d) it is simplerShow answer
(c). Three to five iterations for five buses or for ten thousand. Problem 19.
Key Formulas
| Quantity | Relation | Notes |
|---|---|---|
| Power-flow equation | \(S_i^{*} = V_i^{*}\sum_j Y_{ij}V_j\) | Quadratic and non-analytic |
| GS iteration | \(V_i^{(k+1)} = \dfrac{1}{Y_{ii}}\left[\dfrac{S_i^{*}}{(V_i^{(k)})^{*}} - \sum_{j\ne i}Y_{ij}V_j\right]\) | Newest \(V_j\) used immediately |
| Acceleration | \(V^{\text{acc}} = V^{(k)} + \alpha(V^{(k+1)}-V^{(k)})\) | \(1.4 \le \alpha \le 1.7\); \(\alpha < 2\) for stability |
| PV bus reactive | \(Q_i = -\operatorname{Im}\left[V_i^{*}\sum_j Y_{ij}V_j\right]\) | Then rescale \(|V_i|\) |
| Unknown count | \(2(n-1) - n_{PV}\) | Square system |
| Convergence order | \(e_{k+1} = \mu e_k\), \(\mu \approx 0.78\) | Linear; nine sweeps per decimal |
| Sweeps for tolerance | \(k = \ln F/\ln(1/\mu)\) | \(F\) = error reduction factor |
| Optimal \(\alpha\) | \(\alpha \approx 2/(2-\mu)\) | Balances the extreme modes |
| Slack power | \(S_1 = V_1\left(\sum_j Y_{1j}V_j\right)^{*}\) | Computed once, at the end |
| Line flow | \(S_{ij} = V_i\left[(V_i-V_j)y_{ij} + V_i\,j\tfrac{B}{2}\right]^{*}\) | Charging included |
| Line loss | \(S_{ij}+S_{ji}\) | Sum, not difference |
| Real loss | \(\sum |I_{\text{series}}|^{2}R\) | Independent check on the slack |
| Reactive balance | \(\sum \tfrac{B}{2}(|V_i|^2+|V_j|^2) - \sum|I|^{2}X\) | Sign says above or below SIL |
| Total cost | \(O(n)\) per sweep, \(O(n^{1.5\text{--}2})\) overall | Against Newton's \(O(n^{1.4})\) |
Common Mistakes
Omitting the conjugate in \(S^{*}/V^{*}\). The iteration then converges smoothly to the wrong answer — the worst kind of error — Problem 3.
Using the previous sweep's values throughout. That is Jacobi, and it takes about twice as many sweeps — Problem 3.
Updating the slack bus. Its voltage is specified and must never be touched by the iteration — Problem 3.
Specifying \(P\) at every bus. The problem is then over-determined, because the losses are unknown — Problem 2.
Testing convergence on the voltage change alone. A slow iteration can have a small step and a large power mismatch; test the mismatch — Problem 3.
Reporting a converged case without checking the mismatch. Convergence proves a fixed point was reached, not that it is the right one — Problem 7.
Using \(\alpha > 1.8\). The count rises steeply and then diverges; the theoretical bound is 2 — Problems 10 and C3.
Forgetting to rescale a PV bus's voltage. Without step 3 it is simply a PQ bus with a guessed \(Q\) — Problem 11.
Ignoring reactive limits. The case then represents a system with infinite reactive capability, which no system has — Problem 12.
Taking the line loss as the difference of the end flows. It is the sum, both being defined into the line — Problem 15.
Reporting a non-converging case as a computational failure. It may be a system with no solution, and that is an engineering finding — Problem 18.
Accepting a converged answer without looking at the voltages. A low-voltage root satisfies the equations exactly and is dynamically unstable — Challenge C2.
The five-bus system now has an exact solution: voltages from 1.018 to 1.060 pu, angles spanning 6.15°, 4.59 MW of loss and a network that generates 17.4 MVAr of its own. It took 43 sweeps, or 17 with acceleration, and the method's linear convergence and one-bus-per-sweep information flow are both visible in the arithmetic. The same solution will be reproduced in Set 20 by a method that reaches it in four iterations.
Set 20 replaces the fixed-point iteration by Newton's method: expand the mismatch to first order, solve a linear system for the correction, repeat. The Jacobian must be built and factorised at every step — expensive — but the convergence is quadratic and the iteration count is independent of system size. The comparison between the two on this same network closes Part 4, and Part 5 turns to the unsymmetrical faults that symmetrical components make tractable.