Thought Toys · Cycles & change · Exhibit 53
Crank up a controller's aggressiveness and it should reach the target faster. Push it too far, though, and it starts swinging past the target instead — again and again. A second dial, damping, is the only thing standing between "settles down" and "rings forever."
—
—
—
Critical damping at this stiffness: 4.90 — below it, rings; at or above, never overshoots
The dot on the track is a mass that only feels one force: a pull toward the target proportional to how far off it is (the P in PID — stiffness), minus a resistance proportional to how fast it's already moving (the D — damping). No lookahead, no memory of the past — just those two numbers, recomputed every instant.
With plenty of damping, the mass eases up to the target and stops — a smooth, boring, correct approach. Turn damping down and the same pull now overshoots: the mass arrives with speed to spare, sails past the target, gets yanked back, overshoots the other way a little less, and rings to a stop. Turn damping down to exactly zero and it never stops at all — a perfect, undying oscillation, swinging exactly as far past the target as it started away from it, forever.
Here's the part that trips people up: overshoot isn't really about the damping number by itself, and it isn't about the stiffness number by itself either. It's the ratio between them, the damping ratio ζ = damping ⁄ (2·√stiffness). Push stiffness up without also pushing damping up to match, and ζ quietly drops — a loop you tuned to respond faster ends up ringing harder, for no reason you changed on purpose.
improve/verify/53-pid-controller.js): RK4 integration matches the exact closed-form step
response to within 2×10⁻⁴ for both underdamped and critically-damped cases; measured overshoot matches
the %OS formula to within half a point at four ζ values, and agrees within 2% between two stiffnesses
four times apart sharing the same ζ (37.23% at both Kp=4 and
Kp=16, at ζ=0.3) — confirming overshoot really is ζ-only. At exactly
ζ=1 (critical damping, Kd=2√Kp)
measured overshoot is exactly zero, and stays zero for every stronger damping tested.
Counter-example: at Kd=0 the oscillation never decays —
the same peak height (2r) recurs unchanged eleven cycles later — while even a faint
ζ=0.05 cuts the overshoot by more than half over the same span.
Also in Cycles & change: Why planets speed up near the star →
← the cabinet · Thought Toys — a cabinet of explorable explanations. Exhibit 53.