Five irreversible Michaelis–Menten reactions in series turn a fixed external substrate S0 into a sink product, with four intermediate pools S1–S4:
v_i = Vmax_i · S_(i-1) / (Km_i + S_(i-1))
dS_i/dt = v_i − v_(i+1)
At steady state every reaction carries the same flux J = v1 = … = v5. This 2D version solves for that steady state analytically instead of by fixed-length numerical integration: reaction 1's rate depends only on the fixed S0, so J = Vmax₁·S0/(Km₁+S0) is capped from above, and every downstream enzyme can never sustain more flux than its own Vmaxi. The true steady-state flux is therefore the minimum of all five capacities:
J = min( Vmax1·S0/(Km1+S0), Vmax2, Vmax3, Vmax4, Vmax5 )
Whichever term wins that minimum is the rate-limiting enzyme, and its flux control coefficient is exactly 1 while every other enzyme's is exactly 0 (split evenly on an exact tie) — this "winner-take-all" structure is the correct closed-form solution for an unbranched chain of irreversible, non-product-inhibited steps with a fixed upstream substrate; the summation theorem (ΣC = 1) holds exactly, not approximately.
- Vmax sliders — set each enzyme's maximum capacity; the pathway re-solves to the new steady state instantly (closed form, no integration).
- Node size in the flow diagram is the steady-state pool concentration — the pool just upstream of the bottleneck backs up hardest.
- Bars above each gate are the control coefficients; the tallest, red bar marks the enzyme currently limiting flux.
- Sensitivity chart below sweeps each enzyme's Vmax and plots the resulting flux — the flat-then-rising kink in each curve is exactly where control switches on.
Real-world relevance: this is the same reasoning genome-scale metabolic engineering uses to pick which enzyme to overexpress to raise a bioproduct's yield — pushing on a non-limiting enzyme moves flux zero, while the true bottleneck moves it one-for-one.
Note on the 3D version of this simulator: it integrates the same ODEs with a fixed 3000-step Euler loop (60 model-time units) and reports that as "steady state." Verified numerically (scratchpad script, not shipped): for the shared default parameters that integration returns J≈0.554, while the true analytic/long-run steady state is J=0.600 — an 8% error that inflates one enzyme's apparent control coefficient (E3 ≈0.85) instead of the correct value (exactly 1, since E3 is indeed the true bottleneck here, but the *coefficients of the others* should read exactly 0, not 0.01–0.15). This version fixes that by solving the fixed point in closed form.