Case Study 26.1 — The Ringing Circuit: Complex Eigenvalues in an AC Oscillator
Field: electrical engineering / signals. Anchor tie-in: this is the rotation matrix of Chapters 7 and 21 doing real work — an oscillating circuit is a rotation in phase space, and its complex eigenvalues are the rotation made algebraic.
The problem
Pluck a guitar string, strike a bell, or close a switch in a circuit with both a capacitor and an inductor, and you get the same thing: oscillation that rings down. An RLC circuit — a resistor $R$, an inductor $L$, and a capacitor $C$ in series — is the electrical archetype. Energy sloshes back and forth between the capacitor's electric field and the inductor's magnetic field, sinusoidally, while the resistor quietly bleeds energy away as heat. The voltage across the capacitor traces a decaying sine wave, the audible "ring" of the circuit. Every analog filter, radio tuner, and clock oscillator is built on this behavior.
An engineer simulating such a circuit on a computer samples its state at regular time steps and updates it with a matrix. The state vector $\mathbf{x}_n = (q_n, i_n)$ holds the capacitor charge $q$ and the inductor current $i$ at step $n$, and one time step of evolution is a linear map $\mathbf{x}_{n+1} = A\mathbf{x}_n$ for some real $2\times 2$ matrix $A$. The question we can now answer with the tools of this chapter is: what does the eigenstructure of $A$ tell us about the circuit? The answer is everything that matters — the oscillation frequency, the rate of decay, and whether the circuit is stable at all — and it is all encoded in a single pair of complex eigenvalues.
Oscillation is rotation in phase space
Here is the conceptual leap, and it is the whole point of the case study. Plot the circuit's state not against time but as a point $(q, i)$ in the phase plane — charge on one axis, current on the other. As the circuit oscillates, this point goes around: when the capacitor is fully charged the current is zero (the point sits on the $q$-axis), a quarter-cycle later the capacitor is empty and the current is maximal (the point is on the $i$-axis), and so on. An undamped oscillation traces a closed loop; a damped one spirals inward as energy leaks away. Oscillation in time is rotation in phase space. That is exactly the geometry the rotation matrix of Chapter 21 describes — and so we should expect the state matrix $A$ to be a rotation-scaling, with complex eigenvalues.
Let us confirm it with a concrete model. Suppose one sample of the circuit's evolution advances the phase by $36°$ and multiplies the amplitude by a per-step factor $\rho$ (set by the resistance — more resistance, smaller $\rho$, faster decay). Then $$A = \rho\begin{bmatrix} \cos 36° & -\sin 36° \\ \sin 36° & \phantom{-}\cos 36° \end{bmatrix},$$ a scaled rotation. For the undamped ideal circuit (a pure $LC$ loop with no resistor), $\rho = 1$: no energy is lost, the amplitude holds, the phase-plane point orbits forever on a closed loop. With resistance, $\rho < 1$, and the orbit spirals in.
# An RLC circuit's one-step state matrix is a rotation-scaling; eigenvalues tell all.
import numpy as np
w = np.deg2rad(36) # phase advance per sample
rot = np.array([[np.cos(w), -np.sin(w)],
[np.sin(w), np.cos(w)]])
for rho, label in [(1.00, "undamped LC (lossless)"),
(0.97, "damped RLC (rings down)"),
(1.03, "with gain (unstable)")]:
A = rho * rot
ev = np.linalg.eigvals(A)
pos = ev[ev.imag > 0][0] # the eigenvalue with positive imaginary part
print(f"{label}: eig = {np.round(ev, 4)}, |lambda| = {abs(pos):.4f},"
f" angle = {np.degrees(np.angle(pos)):.1f} deg")
undamped LC (lossless): eig = [0.809+0.5878j 0.809-0.5878j], |lambda| = 1.0000, angle = 36.0 deg
damped RLC (rings down): eig = [0.7847+0.5702j 0.7847-0.5702j], |lambda| = 0.9700, angle = 36.0 deg
with gain (unstable): eig = [0.8333+0.6054j 0.8333-0.6054j], |lambda| = 1.0300, angle = 36.0 deg
Read the three rows as three physical fates, all decided by the modulus:
- Lossless ($|\lambda| = 1$): the eigenvalues sit exactly on the unit circle, $e^{\pm i\,36°}$. The phase-plane point orbits a closed loop forever — a perpetual oscillation. This is the boundary of stability, the idealized circuit with no resistor.
- Damped ($|\lambda| = 0.97$): the eigenvalues are inside the unit circle. Each cycle the amplitude shrinks by $0.97$, so the oscillation rings down to silence — the audible decay of a struck bell. The circuit is stable.
- Unstable ($|\lambda| = 1.03$): the eigenvalues are outside the unit circle. Each cycle the amplitude grows; the oscillation runs away. This happens in circuits with active gain (an amplifier feeding back on itself) and is exactly how an oscillator is deliberately started — and how an audio system "howls" with feedback.
In every case the argument of the eigenvalue is $36°$, the phase advanced per sample — which fixes the oscillation frequency. If the circuit is sampled $1000$ times per second, then $360°/36° = 10$ samples make one full cycle, so the circuit oscillates at $1000/10 = 100$ cycles per second, $100$ Hz. The argument is the pitch; the modulus is the decay. Both live inside one complex eigenvalue.
Reading the circuit from its eigenvalues
This is the payoff for an engineer. Given the state matrix $A$ of any such circuit, two numbers extracted from its complex eigenvalue $\lambda = re^{i\theta}$ summarize the entire behavior:
- The modulus $r = |\lambda|$ is the per-step amplitude factor. $r < 1$ means the ring decays (stable); $r = 1$ means it sustains; $r > 1$ means it grows (unstable). The closer $r$ is to $1$, the longer the circuit rings — a high-$r$ circuit is a high-"$Q$" resonator, like a tuning fork that hums for a long time.
- The argument $\theta = \arg(\lambda)$ is the phase advanced per step, which (divided into $360°$ and scaled by the sampling rate) gives the oscillation frequency.
A real engineer rarely writes the rotation-scaling form by hand; they hand $A$ to np.linalg.eig (or a circuit simulator that does the same internally) and read $|\lambda|$ and $\arg(\lambda)$. But the interpretation — "modulus is decay, argument is frequency" — is precisely the rotation-in-disguise idea of this chapter, and without it the complex numbers coming out of the solver would be meaningless noise. The complex eigenvalue is the bridge between the algebra the computer does and the physics the engineer understands.
Why the eigenvalues must be complex
It is worth pausing on why this circuit's matrix has complex rather than real eigenvalues, because it ties directly to §26.1. A matrix with real eigenvalues only stretches along fixed directions — it cannot make a point go around. But oscillation is exactly a point going around the phase plane; there is no fixed real direction the state clings to, because charge and current are perpetually trading places. A system that has no invariant real direction in its phase plane must have complex eigenvalues — and conversely, the moment you see a real state matrix with complex eigenvalues, you know the system oscillates. The complex eigenvalue is not a mathematical inconvenience to be tolerated; it is the unambiguous signature of "this thing rings."
We can make the point sharper with the discriminant test from §26.4.4. For the state matrix to oscillate, we need $\operatorname{tr}(A)^2 - 4\det(A) < 0$. Physically, $\det(A) = r^2$ measures how much energy is retained per step (area in phase space is proportional to energy for these models), and the trace measures the net "real stretch." When the energy retention is high relative to any directional stretching — a lightly damped, springy circuit — the discriminant goes negative and the circuit oscillates. When damping is heavy (a large resistor), the discriminant turns positive, the eigenvalues become real, and the circuit no longer rings at all: it just slumps back to rest without overshooting. Engineers call that the overdamped regime, and the dividing line — discriminant exactly zero, repeated real eigenvalue — is critical damping, the fastest non-oscillating return to equilibrium, prized in everything from car suspensions to door closers.
Connecting forward
This discrete-time picture is the gateway to the continuous-time theory of Chapter 37, where the circuit is described by a differential equation $\mathbf{x}' = A\mathbf{x}$ and solved with the matrix exponential $e^{At}$. There the stability test moves from "modulus less than $1$" to "real part of the eigenvalue less than $0$," and the complex eigenvalue $\sigma \pm i\omega$ splits cleanly into a decay rate $\sigma$ (the real part) and an angular frequency $\omega$ (the imaginary part) — the continuous mirror of the modulus and argument you read here. The solution is a damped sinusoid $e^{\sigma t}\cos(\omega t)$, the smooth version of the spiral of iterates we plotted in the chapter. Either way, the lesson is the same one this chapter exists to teach: a complex eigenvalue is a rotation with a growth rate attached, and reading its two parts — how fast it spins, whether it grows or decays — tells you the complete fate of any oscillating system, from a guitar string to a radio tuner to the clock crystal keeping time inside the very computer running np.linalg.eig.