Source code for aerosandbox.library.power_human

import aerosandbox.numpy as np


[docs]def power_human( duration, # type: float dataset="Healthy Men" # type: str ): """ Finds the power output that a human can sustain for a given duration. Data was fit for durations in the range of 6 seconds to 60,000 seconds. Fits are modeled at: AeroSandbox/studies/HumanPower Data Source: Bicycling Science by D. Wilson, 2004. Figure 2.4. Wilson is aggregating many data sources here. The raw data pulls from a variety of sources: * NASA SP-3006, 1964 * U.K. amateur trials and time-trials records (Whitt, F.R. 1971 "A note on the estimation of the energy expenditure of sporting cyclists." Ergonomics 14) * Wilsons' own analyses Weight estimates for tests subjects are unfortunately not given. :param duration: Time to sustain power output [seconds] :param dataset: Dataset to pull from. A string that is one of the following: "Healthy Men", "First-Class Athletes", "World-Class Athletes", :return: Sustainable power output for the specified duration [W] """ if dataset == "Healthy Men": a = 373.153360 b0 = -0.173127 b1 = 0.083282 b2 = -0.042785 elif dataset == "First-Class Athletes": a = 502.332185 b0 = -0.179030 b1 = 0.097926 b2 = -0.024855 elif dataset == "World-Class Athletes": a = 869.963370 b0 = -0.234291 b1 = 0.064395 b2 = -0.009197 else: raise ValueError("Bad value of 'dataset'!") duration_mins = duration / 60 log_duration_mins = np.log10(duration_mins) return a * duration_mins ** ( b0 + b1 * log_duration_mins + b2 * log_duration_mins ** 2 ) # essentially, a cubic in log-log space
if __name__ == '__main__': print( power_human( duration=60, ) )