Ce qui m'a vraiment frappé, c'est que les vitesses moyennes n'ont pas vraiment changé
Le graphique va d'environ 25km/h à plus de 40km/h, et c'est un grand changement. Comme d'autres l'ont mentionné, augmenter sa vitesse moyenne nécessite une augmentation non linéaire de la puissance appliquée aux pédales
En d'autres termes, augmenter la vitesse moyenne de 25km/h à 26km/h est plus facile que d'augmenter de 40km/h à 41km/h
Imaginons que je vole une machine à remonter le temps, que je retourne sur chaque parcours TdF, en utilisant exactement le même vélo. Pour correspondre à la vitesse moyenne des gagnants, voici la puissance en watts dont j'aurais besoin pour produire (enfin, une approximation très grossière) :
(encore une fois, il s'agit d'un graphique très grossièrement approximatif, conçu pour illustrer un point ! Il ignore des choses comme le vent, le terrain, le dessin, la côte, le revêtement routier et bien d'autres choses) :
Passer d'environ 60 watts à 240 watts est un changement énorme, et il est très peu probable que les concurrents de TdF aient augmenté leur puissance autant au fil du temps…
Une partie de l'augmentation sera due à des cyclistes plus puissants (grâce à un meilleur entraînement et une meilleure nutrition), mais certainement pas la totalité.
Le reste est probablement dû à des améliorations technologiques. Par exemple, un vélo plus aérodynamique diminuera la puissance nécessaire pour une vitesse moyenne donnée, de même qu'un vélo plus léger lors des montées.
Source du graphique : Bien que mon point devrait rester valable même si le graphique ci-dessus est inexact, voici le script désordonné que j'ai utilisé pour le générer
Il utilise les données de ici , exportées en CSV (de ce document )
Le calcul de la vitesse moyenne en watts requis pourrait être grandement simplifié, mais il m'a été plus facile de modifier le script de ma réponse ici !
#!/usr/bin/env python2
"""Wattage required to match pace of TdF over the years
Written in Python 2.7
"""
def Cd(desc):
"""Coefficient of drag
Coefficient of drag is a dimensionless number that relates an
objects drag force to its area and speed
"""
values = {
"tops": 1.15, # Source: "Bicycling Science" (Wilson, 2004)
"hoods": 1.0, # Source: "Bicycling Science" (Wilson, 2004)
"drops": 0.88, # Source: "The effect of crosswinds upon time trials" (Kyle,1991)
"aerobars": 0.70, # Source: "The effect of crosswinds upon time trials" (Kyle,1991)
}
return values[desc]
def A(desc):
"""Frontal area is typically measured in metres squared. A
typical cyclist presents a frontal area of 0.3 to 0.6 metres
squared depending on position. Frontal areas of an average
cyclist riding in different positions are as follows
http://www.cyclingpowermodels.com/CyclingAerodynamics.aspx
"""
values = {'tops': 0.632, 'hoods': 0.40, 'drops': 0.32}
return values[desc]
def airdensity(temp):
"""Air density in kg/m3
Values are at sea-level (I think..?)
Values from changing temperature on:
http://www.wolframalpha.com/input/?i=%28air+density+at+40%C2%B0C%29
Could calculate this:
http://en.wikipedia.org/wiki/Density_of_air
"""
values = {
0: 1.293,
10: 1.247,
20: 1.204,
30: 1.164,
40: 1.127,
}
return values[temp]
"""
F = CdA p [v^2/2]
where:
F = Aerodynamic drag force in Newtons.
p = Air density in kg/m3 (typically 1.225kg in the "standard atmosphere" at sea level)
v = Velocity (metres/second). Let's say 10.28 which is 23mph
"""
def required_wattage(speed_m_s):
"""What wattage will the mathematicallytheoretical cyclist need to
output to travel at a specific speed?
"""
position = "drops"
temp = 20 # celcius
F = Cd(position) * A(position) * airdensity(temp) * ((speed_m_s**2)/2)
watts = speed_m_s*F
return watts
#print "To travel at %sm/s in %s*C requires %.02f watts" % (v, temp, watts)
def get_stages(f):
import csv
reader = csv.reader(f)
headings = next(reader)
for row in reader:
info = dict(zip(headings, row))
yield info
if __name__ == ' __main__':
years, watts = [], []
import sys
# tdf_winners.csv downloaded from
# http://www.guardian.co.uk/news/datablog/2012/jul/23/tour-de-france-winner-list-garin-wiggins
for stage in get_stages(open("tdf_winners.csv")):
speed_km_h = float(stage['Average km/h'])
dist_km = int(stage['Course distance, km'].replace(",", ""))
dist_m = dist_km * 1000
speed_m_s = (speed_km_h * 1000)/(60*60)
watts_req = required_wattage(speed_m_s)
years.append(stage['Year'])
watts.append(watts_req)
#print "%s,%.0f" % (stage['Year'], watts_req)
print "year = c(%s)" % (", ".join(str(x) for x in years))
print "watts = c(%s)" % (", ".join(str(x) for x in watts))
print """plot(x=years, y=watts, type='l', xlab="Year of TdF", ylab="Average watts required", ylim=c(0, 250))"""