How is the speed of the cyclist determined?

If I know the effort of pedaling in watts, the air drag area in meters squared, the rolling resistance details of the tires, and the mass of the cyclist and bike, and the grade of the hill, and the amount of headwind, how can I determine the speed of the cyclist?


1 Answer 1


The cyclist has three main opposing forces, if riding at a steady speed:

  1. The air drag is determined from 0.5*rho*v*(v+w)^2*CdA where rho is the air density in kg/m3, v is the speed in m/s, w is the headwind in m/s, and CdA is the drag area in m2.

  2. The rolling resistance is determined from m*g*v*crr where m is the mass of cyclist and bike in kg, g is 9.81 m/s2, v is the speed in m/s, and crr is the coefficient of rolling resistance (usually between 0.003 and 0.02 with slick tires having low values and knobby tires having high values, pressure also affects the rolling resistance -- with higher pressure the rolling resistance is lower)

  3. The hill resistance is determined from m*g*v*grade where grade is the grade of the hill (example: 0.05 for 5% hill) and m, g and v are defined as previously.

The terms (2) and (3) can be combined to m*g*v*(crr + grade), demonstrating that rolling resistance of tires is equivalent to always going up a small incline.

How to numerically calculate v using GNU Octave (might also work in Matlab but haven't tested):

m = 70+15; % 70 kg rider, 15 kg bike
g = 9.81; % gravity at surface of Earth
mrr = 42.5; % mass at which rolling resistance is measured
vrr = 29/3.6; % speed of rolling resistance measurement in km/h -> m/s
Prr_GP5000 = 10.3; % Conti GP 5000, 28-622, butyl 130gr tube, watts
crr_GP5000 = Prr_GP5000/(mrr*g*vrr);
Prr_gatorskin = 20.2; % Conti UltraGatorSkin, watts
crr_gatorskin = Prr_gatorskin/(mrr*g*vrr);
CdA = 0.4; % road bike, touring position, Cd*A in meters squared
rho = 1.2; % air density, kg/m3
P = 150; % power of cyclist in watts
grade = 0; % grade of hill, example: 0.05 for 5% hill
w = 0/3.6; % wind in km/h -> m/s, positive headwind, negative tailwind
v_GP5000 = fsolve(@(v)(0.5*rho*v*(v+w)^2*CdA + m*g*v*(crr_GP5000+grade) - P), 9)*3.6
v_gatorskin = fsolve(@(v)(0.5*rho*v*(v+w)^2*CdA + m*g*v*(crr_gatorskin+grade) - P), 9)*3.6

Running the code should show that 70 kg rider + 15 kg bike, at a power of 150 watts, at a temperature around 20 degrees Celsius where air density is 1.2 kg/m3, and a touring position with 0.4 m2 air drag area gives speed of 29.285 km/h for Continental Grand Prix 5000 tires and 27.856 km/h for Continental UltraGatorSkin tires.

The data for the example tires was obtained from https://www.bicyclerollingresistance.com/

  • 1
    There is a web page that does this math for you: gribble.org/cycling/power_v_speed.html
    – Adam Rice
    Commented Feb 8, 2021 at 17:07
  • 1
    Nice. This is for a constant rho of 1.2 kg/m^3, so it applies on a temperate day at close to sea level. Also, I see that you're using BRR's estimate of power dissipation and converting that to Crr rather than using the Crr itself. Lastly, you're ignoring the acceleration/deceleration component, so this is steady state equilibrium speed, but you could modify the calculation to take into account a starting speed.
    – R. Chung
    Commented Feb 8, 2021 at 17:15
  • The chain lubricant, the rolling resistance of the bearings and the drag of the spokes depending on their number and lacing is missing in the calculation. Just saying!
    – Carel
    Commented Feb 9, 2021 at 7:55
  • 1
    @Carel Good comment. The rolling resistance of the bearings goes into Crr, spoke drag (in terms of number and lacing) goes into CdA (we talk about "translational" and "rotational" drag), and in this case juhist is measuring the "demand" side of the power equation, not the "supply" side, so the equation doesn't take into account drive train losses. If you do want to do the calculation from the "supply" side, you're exactly right: you have to take drive train losses into account.
    – R. Chung
    Commented Feb 9, 2021 at 20:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.