Thought Toys · Cycles & change · Exhibit 53

A feedback loop that overshoots

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."

The controlled mass — chasing a target position

Critical damping at this stiffness: 4.90 — below it, rings; at or above, never overshoots

The response
your turn — drag damping down to zero

What you're seeing

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.

The rule, exactly. A unit mass under proportional–derivative control chasing a step target r from rest obeys x+ Kdx+ Kpx = Kpr,   ωn =Kpζ = Kd ⁄ (2√Kp) a damped harmonic oscillator. For ζ<1 the exact step response overshoots by %OS = 100·eπζ/√(1ζ2) — a function of ζ alone. Verified in node (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 →

All 9 in Cycles & change
  1. 04Predator & prey
  2. 16The epidemic threshold
  3. 17Compound interest
  4. 53A feedback loop that overshoots — you are here
  5. 54Why planets speed up near the star
  6. 55The enzyme that hits a ceiling
  7. 65No spike, no matter how long you wait
  8. 68A perfect engine still throws most of it away
  9. 71Squeeze a reaction and it pushes back

← the cabinet · Thought Toys — a cabinet of explorable explanations. Exhibit 53.