Mathematical models for wind-speed and wind-energy distributions derived from first principles in Mathematical Geoenergy (GEM), Chapter 11.
Wind energy is the archetypal example of a maximum-entropy (MaxEnt) dispersion problem. The derivation in GEM Ch. 11 starts from two elementary observations:
Combining these two facts immediately yields the Rayleigh distribution for wind speed, which matches observed data from Ontario, Germany, and the Bonneville Power Administration (BPA) with no free parameters beyond the mean.
Eq. 11-6 — Kinetic energy–velocity relation
\[E \sim \nu^2\]Kinetic energy $E \propto \tfrac{1}{2}m\nu^2$ (proportionality absorbed into scale $c$).
Eq. 11-7 — Maximum-entropy energy distribution
\[p(E) = k\cdot e^{-kE}, \quad E \geq 0\]Applying the Principle of Maximum Entropy with only a mean-energy constraint yields an exponential (Gibbs–Boltzmann) distribution. Here $k = 1/\bar{E}$ is the inverse mean energy.
Eq. 11-8 / 11-12 — Rayleigh wind-speed PDF (change of variables $E = c\nu^2$)
\[p(\nu)\\,d\nu = p(E)\\,dE \quad\Longrightarrow\quad p(\nu) = 2c\nu\cdot e^{-c\nu^2}\]The scale parameter $c = 1/\bar{E}$ is determined solely by the mean wind energy. For the BPA data set, $\bar{\nu} \approx 12.4$ MPH, giving $c = \pi/(4\bar{\nu}^2)$.
CDF:
\[F(\nu) = 1 - e^{-c\nu^2}\]Weibull generalisation (GEM Ch. 11 footnote)
\[p(v;\beta,\lambda) = \frac{\beta}{\lambda}\left(\frac{v}{\lambda}\right)^{\beta-1} e^{-(v/\lambda)^\beta}\]Rayleigh is the special case $\beta = 2$, $\lambda = 1/\sqrt{c}$. Empirically, $\beta \approx 1.95$ fits most wind records equally well.
Eq. 11-9 — Time PDF for energy accumulation (naive, no drag)
\[p\left(t \\,\big|\\, E > c\nu^2\right) = c\nu^2\cdot \frac{e^{-c\nu^2}}{t^2}\]The probability density that a wind speed $\nu$ has been sustained long enough to accumulate threshold energy $c\nu^2$ by time $t$. Tail decays as $1/t^2$ — a fat tail.
Eq. 11-10 — Power-law PDF with aerodynamic drag (Betz’ law)
\[p(t) = \tfrac{2}{3}\cdot d\cdot \frac{e^{-d/t^{2/3}}}{t^{5/3}}\]Because extractable power is proportional to $\nu^3$ (drag × velocity), the chain rule shifts the time exponent from 2 to 5/3, making the tail fatter.
Eq. 11-11 — Time PDF to accumulate $E(T)$
\[p\left(t \\,\big|\\, E > E(T)\right) = T\cdot \frac{e^{-T/t}}{t^2}\]$T$ is the mean waiting time (= $E(T)/\bar{\text{rate}}$). For the Ontario data, $T_{200} = 200/178$ and $T_{1000} = 1000/178$ in the chapter’s normalised units.
When the mean energy $E_A$ itself varies from region to region, assign it a MaxEnt prior:
Eq. 11-13 — Exponential prior for regional mean energy
\[p(E_i) = \alpha\cdot e^{-\alpha E_i}\]Eq. 11-14 — Marginal (super-statistics) integral
\[P(E) = \int_0^\infty P(E \mid E_i)\cdot p(E_i)\\,dE_i\]Eq. 11-15 — Closed-form solution: modified Bessel-K CDF
\[P(E) = 2\sqrt{\frac{E}{\bar{E}}}\\;K_1\left(2\sqrt{\frac{E}{\bar{E}}}\right)\]where $K_1$ is the modified Bessel function of the second kind, order 1, and $\bar{E} = 1/\alpha$ is the grand mean energy. This same functional form appears in terrain slope distributions (GEM Ch. 10) and radar clutter statistics (GEM Ch. 16), demonstrating the universal character of entropic dispersion.
Eq. 11-16 — Spatial autocorrelation of prevailing winds
\[C(x) = e^{-\alpha_c|x|}\cos(\beta_c x)\]Fitted to meridional wind PSD from jet-airliner measurements with:
Eq. 11-17 — Lorentzian / shifted Cauchy PSD
\[I(S_x) = \frac{\alpha_c}{(S_x - \beta_c)^2 + \alpha_c^2}\]The Fourier transform of the damped-cosine autocorrelation. Its peaked shape is characteristic of a semi-Markovian process: the Markov term ($\alpha_c$ damping) gives the overall $1/S^2$ roll-off, while the spatial shift $\beta_c$ introduces weak periodicity with a characteristic scale of $\approx 4$ days at 30 MPH prevailing wind.
| File | Purpose |
|---|---|
wind_symbolic.py |
Symbolic derivation of all equations using SymPy |
wind_numerical.py |
Numerical implementation, validation, and composite figure |
wind_model_output.png |
Output figure (8 panels) generated by wind_numerical.py |
Install dependencies (from models/requirements.txt):
pip install -r ../requirements.txt
Run symbolic derivation (all assertions print ✓):
python wind_symbolic.py
Run numerical model and generate figure:
MPLBACKEND=Agg python wind_numerical.py
Single-parameter model: the Rayleigh distribution has only one free parameter ($c = 1/\bar{E}$), which is fixed by the observed mean wind energy. There is no curve-fitting.
Fat tails are inevitable: the time-to-energy distributions have power-law tails ($\sim 1/t^2$ or $\sim 1/t^{5/3}$), meaning long calms are more likely than intuition suggests.
Universal character: the same Rayleigh / BesselK functional forms fit wind data from Ontario, Germany, and the BPA, confirming the universality of the MaxEnt argument.
Super-statistics extends the model: allowing the mean energy to fluctuate regionally produces the BesselK distribution, which provides a better fit at high energy tails (Eq. 11-15).
Lorentzian PSD: the $\approx 4833$ km spatial periodicity in the meridional wind PSD corresponds to $\approx 4$ days of flow at 30 MPH, consistent with observed baroclinic Rossby wave patterns.