สิ่งที่ทำให้ฉันรู้สึกแย่จริงๆก็คือความเร็วเฉลี่ยไม่เปลี่ยนแปลงมากนัก
แผนภูมิมีช่วงตั้งแต่ประมาณ 25km / h ถึงมากกว่า 40km / h และนั่นเป็นการเปลี่ยนแปลงครั้งใหญ่ ดังที่คนอื่น ๆ พูดถึงการเพิ่มความเร็วเฉลี่ยของคุณนั้นต้องการกำลังที่เพิ่มขึ้นแบบไม่เชิงเส้นที่ใช้กับคัน
กล่าวอีกนัยหนึ่งการเพิ่มความเร็วเฉลี่ยจาก 25km / h เป็น 26km / h นั้นง่ายกว่าการเพิ่มจาก 40km / h เป็น 41km / h
ว่าฉันจะขโมยเครื่องย้อนเวลากลับไปขี่ TdF ในแต่ละหลักสูตรโดยใช้จักรยานตัวเดียวกัน เพื่อให้เข้ากับความเร็วเฉลี่ยของผู้ชนะนี่คือวัตต์ที่ฉันต้องการในการผลิต (ดีการประมาณที่หยาบมาก):
(อีกครั้งนี่เป็นกราฟคร่าวๆที่หยาบมากออกแบบมาเพื่ออธิบายจุด! มันไม่สนใจสิ่งต่างๆเช่นลม, ภูมิประเทศ, การร่าง, การชายฝั่ง, พื้นผิวถนนและสิ่งอื่น ๆ อีกมากมาย)
จากประมาณ 60 วัตต์ถึง 240 วัตต์เป็นการเปลี่ยนแปลงครั้งใหญ่และไม่น่าเป็นไปได้มากที่คู่แข่ง TdF จะเพิ่มกำลังไฟของพวกเขาในช่วงเวลานี้ ..
ส่วนหนึ่งของการเพิ่มขึ้นจะเป็นผลมาจากนักปั่นจักรยานที่มีประสิทธิภาพมากขึ้น (ต้องขอบคุณการฝึกอบรมและโภชนาการที่ดีขึ้น) แต่ก็ไม่ใช่ทั้งหมด
ส่วนที่เหลือน่าจะเกิดจากการปรับปรุงทางเทคโนโลยี ตัวอย่างเช่นจักรยานอากาศพลศาสตร์ที่มากขึ้นจะลดพลังงานที่จำเป็นสำหรับความเร็วเฉลี่ยที่กำหนดเช่นเดียวกับจักรยานที่มีน้ำหนักเบาเมื่อขึ้นเขา
แหล่งที่มาของกราฟ: แม้ว่าจุดของฉันจะยังคงใช้ได้โดยไม่คำนึงว่ากราฟด้านบนไม่ถูกต้อง แต่นี่คือสคริปต์ที่ยุ่งเหยิงที่ฉันใช้ในการสร้าง
มันใช้ข้อมูลจากที่นี่ส่งออกเป็น CSV (จากเอกสารนี้ )
ความเร็วเฉลี่ยในการคำนวณวัตต์ที่ต้องการนั้นลดลงอย่างมาก แต่ก็ง่ายขึ้นสำหรับฉันที่จะแก้ไขสคริปต์จากคำตอบของฉันที่นี่ !
#!/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))"""