How to estimate the speed of cyclist with given parameters 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?
The cyclist has three main opposing forces, if riding at a steady speed:

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.

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)

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 -&gt; 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 -&gt; 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/