Fit Michaelis-Menten parameters Vmax and Km to initial-rate data and compute kcat.
Why it matters
Enzymes speed up reactions by factors of millions or more, and how fast they work at different substrate concentrations tells you how they behave in cells, how a drug might block them, and whether an engineered variant is better. The Michaelis–Menten model is the starting point for nearly every enzyme assay, inhibitor screen and biocatalysis project. Fitting its two parameters from data is a routine task, and one where small mistakes in method give badly wrong answers.
The model
For a single-substrate enzyme, E binds S to form a complex ES, which turns over to give product P:
E + S ⇌ ES → E + P
Under steady-state conditions (ES forms as fast as it breaks down) and with substrate in large excess over enzyme, the initial rate v0 follows:
v0 = Vmax · [S] / (Km + [S])
- Vmax is the maximum rate, reached when the enzyme is saturated. It is proportional to enzyme concentration:
Vmax = kcat · [E]total. - kcat (the turnover number, s⁻¹) is how many substrate molecules one active site converts per second at saturation.
- Km (the Michaelis constant, in concentration units) is the substrate concentration that gives half of Vmax. A lower Km roughly means the enzyme reaches high rates at lower substrate levels.
- kcat / Km (the specificity constant, M⁻¹·s⁻¹) compares how well an enzyme uses different substrates at low concentration.
The curve rises almost linearly at low [S] (v0 ≈ (Vmax/Km)·[S]) and levels off at high [S].
Measuring initial rates
- Run the reaction at several substrate concentrations spanning roughly 0.2 Km to 5 Km or more (you do not know Km yet, so start wide).
- For each, measure product formation over time, usually by absorbance or fluorescence, and take the slope of the early, linear part: the initial rate, before substrate depletion or product inhibition bend the curve.
- Convert signal per minute to concentration per minute using an extinction coefficient or standard curve.
- Run replicates and controls without enzyme (background rate).
Fitting Vmax and Km
The best practice is a nonlinear least-squares fit of v0 against [S] directly to the Michaelis–Menten equation. Software such as SciPy's curve_fit (Python) or GraphPad Prism does this. The idea is simple: choose the Vmax and Km that minimise the sum of squared differences between measured and predicted rates.
The older Lineweaver–Burk (double-reciprocal) plot rearranges the equation into a straight line:
1/v0 = (Km/Vmax) · (1/[S]) + 1/Vmax
It is useful for visualising inhibition patterns (next lesson), but it is a poor way to estimate parameters: taking reciprocals hugely magnifies the error in the smallest rates at the lowest [S], so those noisy points dominate the line.
Worked example
Assay data (substrate in mM, initial rate in µM/min):
[S] (mM): 0.25 0.5 1 2 4 8 16
v0 (µM/min): 9.06 16.61 28.51 45.07 61.38 73.91 87.06
A nonlinear least-squares fit gives Vmax ≈ 99 µM/min and Km ≈ 2.5 mM. Sanity checks:
- At [S] = 2 mM (close to Km), v0 = 45 µM/min, a bit under half of Vmax, as expected for [S] slightly below Km.
- At 16 mM (more than 6 × Km), v0 is about 88 % of Vmax, not yet fully saturated. Data at even higher [S] would pin Vmax down more tightly.
If the enzyme concentration was 0.01 µM, then kcat = Vmax / [E] = 99 µM·min⁻¹ / 0.01 µM ≈ 9,900 min⁻¹ ≈ 165 s⁻¹.
In Python
In your own projects with SciPy installed you would write something like:
from scipy.optimize import curve_fit
def mm(s, vmax, km):
return vmax * s / (km + s)
params, cov = curve_fit(mm, s_data, v_data, p0=[max(v_data), 1.0])
The Do-tab activity uses only the standard library: because the best Vmax for any fixed Km has a simple formula, a fine search over Km gives the same least-squares answer.
Common mistakes
- Using late time points instead of initial rates.
- Too narrow a substrate range, especially no points above Km, which makes Vmax uncertain.
- Fitting a Lineweaver–Burk line to get the final parameters.
- Mixing units: Km in mM, rates in µM/min, enzyme in nM. Write units on every column.
- Ignoring substrate solubility or inhibition at very high [S].
Recap
v0 = Vmax [S] / (Km + [S]); Km is the [S] at half of Vmax.kcat = Vmax / [E], and kcat/Km is the specificity constant.- Fit untransformed data by nonlinear least squares; use double-reciprocal plots only to visualise.
Try it
On the Do tab, write the Michaelis–Menten rate equation in Python and fit Vmax and Km to the assay data.