Note
Go to the end to download the full example code or to run this example in your browser via JupyterLite.
The Wright brothers, Smeaton’s coefficient and the stall speed (1901)#
The nineteenth-century lift equation was \(L = k V^2 S C_L\) with
Smeaton’s coefficient \(k = 0.005\) lb/(ft² mph²). After their 1901
glider lifted far less than predicted, Wilbur and Orville Wright measured
\(k \approx 0.0033\) in their own wind tunnel; the modern value,
\(\tfrac12\rho\) at sea level, is 0.00256. Since the minimum flying speed
\(V_s = \sqrt{2W/(\rho S C_{L,\max})}\)
(stall_speed()) scales as
\(1/\sqrt{k}\), Smeaton’s value under-predicts the take-off speed of the
1903 Flyer by about 30%.
import matplotlib.pyplot as plt
import numpy as np
from engineeringkit.aerodynamics import stall_speed
from engineeringkit.units import convert
Smeaton’s coefficient as an implied air density#
\(k = \tfrac12\rho\), so each historical value implies a density.
lbf_per_ft2 = convert(1.0, "psi", "Pa") / 144
mph = 0.44704
for label, k in [("Smeaton (1759)", 0.005), ("Wright tunnel (1901)", 0.0033), ("modern", 0.00256)]:
rho_implied = 2 * k * lbf_per_ft2 / mph**2
print(f"{label:22s} k = {k:.5f} -> rho = {rho_implied:.3f} kg/m^3")
Smeaton (1759) k = 0.00500 -> rho = 2.396 kg/m^3
Wright tunnel (1901) k = 0.00330 -> rho = 1.581 kg/m^3
modern k = 0.00256 -> rho = 1.227 kg/m^3
The 1903 Flyer’s minimum speed#
About 340 kg flying mass, 47.4 m² of wing, and \(C_{L,\max}\) taken between 0.6 and 1.4.
weight = 340 * 9.80665
S = 47.4
clmax = np.linspace(0.6, 1.4, 50)
fig, ax = plt.subplots(figsize=(6, 4))
for label, k in [("Smeaton k = 0.005", 0.005), ("Wright k = 0.0033", 0.0033), ("modern k = 0.00256", 0.00256)]:
rho_implied = 2 * k * lbf_per_ft2 / mph**2
ax.plot(clmax, stall_speed(weight, rho_implied, S, clmax), label=label)
ratio = float(stall_speed(weight, 1.225, S, 1.0) / stall_speed(weight, 2 * 0.005 * lbf_per_ft2 / mph**2, S, 1.0))
print(f"true / Smeaton-predicted stall speed: {ratio:.2f}")
assert np.isclose(2 * 0.00256 * lbf_per_ft2 / mph**2, 1.225, rtol=0.01)
assert np.isclose(ratio, np.sqrt(0.005 / 0.00256), rtol=0.01) and 1.3 < ratio < 1.5
ax.set(xlabel="$C_{L,\\max}$", ylabel="stall speed [m/s]", title="1903 Flyer minimum flying speed")
ax.legend()
fig.tight_layout()
plt.show()

true / Smeaton-predicted stall speed: 1.40
Total running time of the script: (0 minutes 0.150 seconds)