Mathematical reference for VO₂ max estimation, race time prediction, running economy, lactate threshold, and training load quantification — derived from peer-reviewed exercise physiology literature.
This repository documents the key formulas and physiological models used in endurance running performance. It covers field-test methods, race prediction algorithms, training prescription frameworks, and the biomechanical factors that determine performance beyond raw aerobic capacity.
Last updated: 2026-04-01 · Changelog
- Quick Reference
- VO₂ Max Estimation
- Race Time Prediction
- Lactate Threshold and Running Economy
- Heart Rate and Pace Zones
- Training Load Formulas
- Environmental Adjustments
- Altitude and Heat Correction
- Worked Examples
- Code Implementations
- External References
Cooper VO₂ max = (distance_metres − 504.9) / 44.73
1.5-mile VO₂ max = 3.5 + 483 / time_minutes
Riegel race time = T2 = T1 × (D2/D1)^1.06
Jack Daniels VDOT from 5K: VDOT ≈ −4.6 + 0.182258 × velocity + 0.000104 × velocity²
Lactate threshold ≈ 85–90% max HR (field estimate)
VO₂ max (maximal oxygen uptake) is the upper limit of the oxygen transport and utilisation system during incremental exhaustive exercise. It is measured in mL of O₂ per kg body weight per minute (mL/kg/min) and represents the ceiling of aerobic energy production.
VO₂ max sets the theoretical upper bound on endurance performance, but actual race performance depends on three interacting factors:
Race Performance ≈ VO₂ max × Lactate Threshold Fraction × Running Economy Factor
A runner sustaining 85% of VO₂ max at the marathon lactate threshold, with good economy, will outperform a higher-VO₂-max runner who can only sustain 75%.
Run as far as possible in exactly 12 minutes on a flat, measured course. Suitable for all fitness levels.
VO₂ max (mL/kg/min) = (distance_metres − 504.9) / 44.73
VO₂ max by distance covered:
| Distance (m) | VO₂ max |
|---|---|
| 1,600 | 24.6 |
| 1,800 | 29.1 |
| 2,000 | 33.6 |
| 2,200 | 38.1 |
| 2,400 | 42.6 |
| 2,600 | 47.1 |
| 2,800 | 51.6 |
| 3,000 | 56.0 |
| 3,200 | 60.5 |
Source: Cooper KH (1968). A means of assessing maximal oxygen intake. JAMA, 203(3), 201–204.
Run 1.5 miles (2.414 km) as fast as possible. Record total time in decimal minutes.
VO₂ max = 3.5 + 483 / time_minutes
Example: 1.5 miles in 11:30 (11.5 min) → VO₂ max = 3.5 + 483/11.5 = 3.5 + 42.0 = 45.5 mL/kg/min
Source: George JD et al. (1993). VO₂ max estimation from a submaximal 1-mile track jog for fit college-age individuals. Medicine & Science in Sports & Exercise, 25(3), 401–406.
Walk 1 mile (1.609 km) at maximum walking pace (no running). Record completion time and heart rate at the finish.
VO₂ max = 132.853 − (0.0769 × weight_lbs) − (0.3877 × age)
+ (6.315 × gender_code) − (3.2649 × time_min) − (0.1565 × HR_finish)
Where: gender_code = 1 for male, 0 for female; HR_finish = heart rate in bpm at completion.
Source: Kline GM et al. (1987). Estimation of VO₂ max from a one-mile track walk. Medicine & Science in Sports & Exercise, 19(3), 253–259.
Males (mL/kg/min):
| Age | Poor | Fair | Good | Excellent | Superior |
|---|---|---|---|---|---|
| 20–29 | < 34 | 34–42 | 43–52 | 53–60 | > 60 |
| 30–39 | < 32 | 32–40 | 41–49 | 50–57 | > 57 |
| 40–49 | < 30 | 30–38 | 39–47 | 48–54 | > 54 |
| 50–59 | < 25 | 25–33 | 34–42 | 43–49 | > 49 |
| 60–69 | < 21 | 21–29 | 30–37 | 38–44 | > 44 |
Females (mL/kg/min):
| Age | Poor | Fair | Good | Excellent | Superior |
|---|---|---|---|---|---|
| 20–29 | < 29 | 29–35 | 36–44 | 45–51 | > 51 |
| 30–39 | < 27 | 27–33 | 34–41 | 42–47 | > 47 |
| 40–49 | < 24 | 24–30 | 31–38 | 39–44 | > 44 |
| 50–59 | < 20 | 20–26 | 27–34 | 35–40 | > 40 |
| 60–69 | < 16 | 16–22 | 23–29 | 30–35 | > 35 |
Source: ACSM (2022). ACSM's Guidelines for Exercise Testing and Prescription. 11th ed. Wolters Kluwer.
| Athlete | VO₂ Max | Sport | Context |
|---|---|---|---|
| Oskar Svendsen | 97.5 mL/kg/min | Cycling | Highest reliably recorded |
| Bjørn Dæhlie | 96 mL/kg/min | Cross-country skiing | Olympic champion |
| Eliud Kipchoge | ~92 mL/kg/min | Marathon | Sub-2hr attempt; world record holder |
| Joan Benoit Samuelson | ~78 mL/kg/min | Marathon | 1984 Olympic marathon champion |
| Average recreational runner | 45–55 mL/kg/min | Running | 5–10 hrs/week training |
| Sedentary adult (male, 35) | 35–40 mL/kg/min | — | General population |
VO₂ max is ~50% heritable. Trained athletes have less room for improvement than beginners.
| Population | Expected Gain | Timeframe | Protocol |
|---|---|---|---|
| Previously sedentary | +15–25% | 12–16 weeks | Any consistent aerobic training |
| Recreational runner | +10–15% | 8–12 weeks | High-intensity interval training |
| Well-trained (VO₂ max > 55) | +5–8% | 12 weeks | 4×4 Helgerud protocol |
| Highly trained (VO₂ max > 65) | +2–4% | Entire season | Periodised polarised training |
Most effective single protocol: 4 × 4-minute intervals at 90–95% max HR, 3-minute active recovery, 3×/week.
Source: Helgerud J et al. (2007). Aerobic high-intensity intervals improve VO₂ max more than moderate training. Medicine & Science in Sports & Exercise, 39(4), 665–671.
The foundational endurance race prediction formula. Uses a fatigue exponent derived from world record progressions across distances.
T2 = T1 × (D2 / D1)^1.06
Where T1 = known race time at distance D1, T2 = predicted time at distance D2. Distances in any consistent unit.
Example: 5K in 22:00 → predict marathon (42.195 km) time: T2 = 22 × (42.195 / 5)^1.06 = 22 × 8.439^1.06 = 22 × 9.496 = 208.9 min ≈ 3:28:54
Source: Riegel PS (1977). Athletic records and human endurance. American Scientist, 65, 285–290.
Limitation: The 1.06 exponent assumes perfect pacing and sustained aerobic capacity. For runners with strong ultra-endurance capacity, a lower exponent (1.04–1.05) may be more accurate. For short-range extrapolation (5K→10K), accuracy is typically ±2–3%. For 5K→marathon extrapolation, expect ±5–10%.
Predicted times from a 20:00 5K using Riegel's 1.06 exponent:
| Distance | Predicted Time |
|---|---|
| 5K | 20:00 (reference) |
| 10K | 41:38 |
| Half marathon | 1:33:10 |
| Marathon | 3:15:04 |
| 50K | 4:02:31 |
| 50 miles | 6:55:00 (approx) |
VDOT is a practical equivalent of VO₂ max derived from race performance. It predicts training paces more accurately than raw field-test VO₂ max because it captures running economy and lactate threshold simultaneously.
VDOT from race performance:
Velocity (m/min) = distance / time_minutes
% VO₂ max = 0.8 + 0.1894393 × e^(−0.012778 × time_min)
+ 0.2989558 × e^(−0.1932605 × time_min)
VO₂ at race pace = −4.60 + 0.182258 × velocity + 0.000104 × velocity²
VDOT = VO₂ at race pace / % VO₂ max
VDOT-based training paces:
| VDOT | Easy (E) | Marathon (M) | Threshold (T) | Interval (I) | Repetition (R) |
|---|---|---|---|---|---|
| 35 | 7:33/km | 6:48/km | 6:15/km | 5:54/km | 5:30/km |
| 40 | 6:49/km | 6:04/km | 5:33/km | 5:12/km | 4:51/km |
| 45 | 6:11/km | 5:27/km | 4:59/km | 4:38/km | 4:19/km |
| 50 | 5:41/km | 5:00/km | 4:33/km | 4:13/km | 3:57/km |
| 55 | 5:17/km | 4:37/km | 4:13/km | 3:54/km | 3:39/km |
| 60 | 4:56/km | 4:18/km | 3:56/km | 3:38/km | 3:24/km |
| 65 | 4:40/km | 4:03/km | 3:42/km | 3:25/km | 3:11/km |
Source: Daniels J (2014). Daniels' Running Formula. 3rd ed. Human Kinetics.
More accurate marathon time prediction accounts for lactate threshold fraction and training mileage, not just VO₂ max.
Noakes marathon formula:
Marathon time (min) = 0.533 × body_mass (kg)^0.413 × (VO2max + 5.72)^(−0.67)
Cameron formula:
T_marathon = a / (velocity_LT × b)
Where velocity at lactate threshold (vLT) is the primary determinant, not VO₂ max directly. vLT is approximately 83–87% of vVO₂ max for trained runners.
The lactate threshold is the exercise intensity above which blood lactate accumulates faster than it is cleared. It marks the transition from predominantly oxidative to mixed oxidative/glycolytic metabolism.
| Term | Lactate Level | Intensity | Field Estimate |
|---|---|---|---|
| Aerobic threshold (LT1) | ~2 mmol/L | "Comfortable hard" | ~77–80% max HR |
| Lactate threshold (LT) | ~2.5–3.5 mmol/L | "Comfortably uncomfortable" | ~83–87% max HR |
| Lactate turnpoint (LT2 / OBLA) | ~4 mmol/L | "Uncomfortably hard" | ~88–92% max HR |
OBLA (Onset of Blood Lactate Accumulation) at 4 mmol/L is widely used as the anaerobic threshold. This is the basis of most threshold running paces.
The slowest running speed that elicits VO₂ max. A key variable for interval training prescription.
vVO₂ max (m/min) = VO₂ max / running_economy
Where running economy is expressed in mL O₂/kg/km.
Typical running economy values:
| Runner Type | Economy (mL/kg/km) |
|---|---|
| Untrained | 260–290 |
| Recreational | 225–260 |
| Sub-elite | 200–225 |
| Elite marathon runner | 185–210 |
| Eliud Kipchoge (est.) | ~175–185 |
Running economy (RE) can be improved 2–8% through structured training. Key methods:
| Method | RE Improvement | Timeframe | Evidence Level |
|---|---|---|---|
| Plyometric training | 3–8% | 6–12 weeks | High (RCT meta-analysis) |
| Strength training (heavy) | 3–5% | 8–12 weeks | High |
| High-volume low-intensity | 2–4% | Months–years | High |
| Altitude training | 1–3% (sea-level) | 3–4 week block | Moderate |
| Foam rolling / mobility | Negligible | — | Low |
Source: Blagrove RC, Howatson G, Hayes PR (2018). Effects of strength training on the physiological determinants of middle- and long-distance running performance. Sports Medicine, 48(5), 1117–1149.
Fox (1971): HRmax = 220 − age (most cited, ±12 bpm SD)
Tanaka (2001): HRmax = 208 − 0.7 × age (more accurate for adults 40+)
Gulati (2010): HRmax = 206 − 0.88 × age (validated in women)
Gellish (2007): HRmax = 207 − 0.7 × age (large validation, n=3,320)
Source: Tanaka H et al. (2001). Age-predicted maximal heart rate revisited. JACC, 37(1), 153–156.
Standard 5-zone model used in most GPS watch platforms:
| Zone | % Max HR | Name | Primary Fuel | RPE |
|---|---|---|---|---|
| Z1 | 50–60% | Recovery | Fat (> 90%) | 1–2 |
| Z2 | 60–70% | Aerobic base | Fat (70–90%) | 3–4 |
| Z3 | 70–80% | Aerobic power | Fat/carb (50/50) | 5–6 |
| Z4 | 80–90% | Threshold | Carb (60–80%) | 7–8 |
| Z5 | 90–100% | VO₂ max | Carb (> 80%) | 9–10 |
Uses resting HR to personalise training zones. More accurate than % max HR alone.
Heart Rate Reserve (HRR) = HRmax − HRrest
Target HR = HRrest + (%intensity × HRR)
Example: HRmax = 185, HRrest = 55. For Zone 2 (60–70%): Low: 55 + 0.60 × 130 = 55 + 78 = 133 bpm High: 55 + 0.70 × 130 = 55 + 91 = 146 bpm
Source: Karvonen MJ, Kentala E, Mustala O (1957). The effects of training on heart rate. Annales Medicinae Experimentalis et Biologiae Fenniae, 35(3), 307–315.
Adapts cycling TSS for running using pace as a proxy for power.
rTSS = (duration_seconds × NGP × IF²) / (FTP_pace × 3600) × 100
Where:
NGP= Normalized Graded Pace (adjusts for elevation)IF= Intensity Factor = NGP / Functional Threshold PaceFTP_pace= pace at lactate threshold (sustainable for ~60 min)
Source: Allen H, Coggan A (2010). Training and Racing with a Power Meter. VeloPress.
Session-level load metric combining duration and heart rate.
TRIMP = duration_min × ΔHR_ratio × e^(b × ΔHR_ratio)
Where ΔHR_ratio = (HRsession − HRrest) / (HRmax − HRrest), and b = 1.92 (male), 1.67 (female).
Source: Banister EW et al. (1975). A systems model of training for athletic performance. Australian Journal of Sports Medicine, 7, 57–61.
ACWR = (7-day rolling load) / (28-day rolling load average)
| ACWR | Injury Risk |
|---|---|
| < 0.8 | Undertraining |
| 0.8–1.3 | Optimal (low risk) |
| 1.3–1.5 | Caution |
| > 1.5 | High injury risk |
Source: Gabbett TJ (2016). The training—injury prevention paradox. BJSM, 50(5), 273–280.
Performance degrades in heat due to cardiovascular strain from thermoregulation competing with working muscles for cardiac output.
Approximate pace adjustments:
| Wet Bulb Globe Temperature (WBGT) | Pace Adjustment |
|---|---|
| < 10°C (50°F) | No adjustment |
| 10–18°C (50–65°F) | No adjustment |
| 18–23°C (65–73°F) | +2–5% slower |
| 23–28°C (73–82°F) | +5–10% slower |
| > 28°C (82°F) | +10–20% slower (extreme risk) |
Source: Ely MR et al. (2007). Impact of weather on marathon-running performance. Medicine & Science in Sports & Exercise, 39(3), 487–493.
ΔVO₂ max ≈ −6.3% per 1,000 m above 1,500 m
| Altitude | Example Location | Approx VO₂ max Reduction |
|---|---|---|
| 1,500 m | Denver, CO | Baseline (< 1% effect) |
| 2,000 m | Mexico City | −3.2% |
| 2,500 m | Nairobi | −6.3% |
| 3,600 m | Altitude training camps | ~−13% |
Acclimatisation timeline: Most VO₂ max deficit recovers within 2–3 weeks at altitude. After returning to sea level, elevated EPO and haematocrit temporarily boost sea-level performance for 2–3 weeks — the basis of altitude training camps.
Source: Chapman RF et al. (1998). Individual variation in response to altitude training. Journal of Applied Physiology, 85(4), 1448–1456.
Known: 10K in 47:30.
T1 = 47.5 min, D1 = 10 km, D2 = 42.195 km
T2 = 47.5 × (42.195 / 10)^1.06
= 47.5 × 4.2195^1.06
= 47.5 × 4.533
= 215.3 min
≈ 3:35:18
Interpretation: Achievable if trained specifically for the marathon, well-hydrated, and running in cool conditions. Add 5–10 min for first-time marathoners due to pacing inexperience.
Known: Age 38, resting HR 52 bpm.
HRmax (Tanaka) = 208 − 0.7 × 38 = 208 − 26.6 = 181.4 ≈ 181 bpm
HRR = 181 − 52 = 129 bpm
Zone 2 (60–70% HRR):
Lower = 52 + 0.60 × 129 = 52 + 77 = 129 bpm
Upper = 52 + 0.70 × 129 = 52 + 90 = 142 bpm
Zone 4 (80–90% HRR):
Lower = 52 + 0.80 × 129 = 52 + 103 = 155 bpm
Upper = 52 + 0.90 × 129 = 52 + 116 = 168 bpm
Known: Cooper test distance = 2,550 m.
VO₂ max = (2550 − 504.9) / 44.73
= 2045.1 / 44.73
= 45.7 mL/kg/min
Age 35, male → Good category (41–49 range for 30–39 age group).
def riegel_predict(known_time_min: float, known_dist_km: float, target_dist_km: float, exponent: float = 1.06) -> float:
"""Predict race time using Riegel's fatigue formula."""
predicted = known_time_min * (target_dist_km / known_dist_km) ** exponent
return predicted
def format_time(minutes: float) -> str:
h = int(minutes // 60)
m = int(minutes % 60)
s = int((minutes * 60) % 60)
if h > 0:
return f"{h}:{m:02d}:{s:02d}"
return f"{m}:{s:02d}"
# Example: 5K in 22:00, predict marathon
t = riegel_predict(22.0, 5.0, 42.195)
print(format_time(t)) # → 3:28:54import math
def vo2max_cooper(distance_m: float) -> float:
"""Cooper 12-min run test."""
return (distance_m - 504.9) / 44.73
def vo2max_mile_and_half(time_min: float) -> float:
"""1.5-mile time trial."""
return 3.5 + 483 / time_min
def vo2max_rockport(weight_lbs: float, age: float, time_min: float, hr_finish: float, male: bool) -> float:
"""Rockport 1-mile walk test."""
gender = 1 if male else 0
return (132.853 - 0.0769*weight_lbs - 0.3877*age
+ 6.315*gender - 3.2649*time_min - 0.1565*hr_finish)
# Example
print(vo2max_cooper(2550)) # 45.7
print(vo2max_mile_and_half(11.5)) # 45.5| Reference | Key Contribution |
|---|---|
| Cooper KH (1968). JAMA, 203(3) | 12-minute run VO₂ max field test |
| Kline GM et al. (1987). Med Sci Sports Exerc, 19(3) | Rockport 1-mile walk test |
| Riegel PS (1977). American Scientist, 65 | Race time prediction exponent (1.06) |
| Daniels J (2014). Daniels' Running Formula, 3rd ed. Human Kinetics | VDOT system and training paces |
| Helgerud J et al. (2007). Med Sci Sports Exerc, 39(4) | 4×4 interval superiority for VO₂ max gain |
| Tanaka H et al. (2001). JACC, 37(1) | Revised age-predicted max HR formula |
| Ely MR et al. (2007). Med Sci Sports Exerc, 39(3) | Heat and marathon performance degradation |
| Chapman RF et al. (1998). J Appl Physiol, 85(4) | Altitude effect on VO₂ max; individual variability |
| Gabbett TJ (2016). BJSM, 50(5) | ACWR injury risk model |
| Blagrove RC et al. (2018). Sports Med, 48(5) | Strength training for running economy |
| Banister EW et al. (1975). Aust J Sports Med, 7 | TRIMP training impulse model |
| ACSM (2022). Guidelines for Exercise Testing and Prescription, 11th ed | VO₂ max norms by age and sex |
| Reference | Relevance |
|---|---|
| Mujika I & Padilla S (2003). Scientific bases for precompetition tapering in elite athletes. Med Sci Sports Exerc, 35(7). | Taper duration and load reduction for race-peak performance |
| Bosquet L et al. (2007). Effects of tapering on performance: a meta-analysis. Med Sci Sports Exerc, 39(8). | Optimal taper length (~2 weeks) and volume reduction (41–60%) |
| Foster C et al. (2001). A new approach to monitoring exercise training. J Sports Med Phys Fitness, 41(1). | Session RPE for quantifying internal training load in runners |
| Issurin VB (2010). New horizons for the methodology and physiology of training periodization. Sports Med, 40(3). | Block periodisation framework for endurance athletes |
| Resource | Description |
|---|---|
| WinSport — VO₂ Max Calculator | Cooper, 1.5-mile, and Rockport inputs; percentile table by age/sex |
| WinSport — Running Pace Calculator | VDOT-based training zones from any race distance and time |
| WinSport — Marathon Race Predictor | Riegel-based race time prediction for 5K through marathon |
| McMillan Running Calculator | Riegel-based race equivalency and VDOT training pace tool; widely used by coaches |
| World Athletics — Records | Official world records for all track, road, and field events |
| RunSmart Project | Evidence-based running injury prevention and training resources |
| TrainingPeaks — Running Analytics | rTSS, CTL/ATL, and decoupling tracking for structured training |
| ACSM — Fitness Resources | ACSM guidelines and position stands on aerobic exercise |
| PubMed — Exercise Physiology | Primary literature on VO₂ max, lactate threshold, running economy |
Corrections and formula additions welcome. All claims must cite primary peer-reviewed sources. See CONTRIBUTING.md for guidelines.