Geometric Brownian Motion
How calculus models a positive quantity that grows under random, proportional shocks — and why the result is log-normal
AP Calculus BC final project · Higher-math topic
The problem
Quantities that grow randomly but stay positive
Many real quantities share three traits: they are always positive, they tend to grow or decay at a roughly constant percentage rate, and that rate is disturbed by unpredictable shocks proportional to the current size.
Where it shows up
A bacterial colony, a drug concentration in the bloodstream, an animal population, an accumulating wear index — each is a positive number nudged up or down by random influences.
The question
What is the simplest continuous-time model that captures random growth, never produces a negative value, and still allows exact calculus?
We want one equation whose solutions are random curves, yet whose average, spread, and distribution we can still compute by hand.
The problem, made precise
Why the obvious models fail
Additive noise
\(X_{t+\Delta t}=X_t+\varepsilon\), with \(\varepsilon\sim\mathcal N(0,\sigma^2)\), is simple — but a Gaussian shock can exceed \(X_t\) and push a positive state below zero.
Deterministic exponential
The AP Calculus growth law \(\frac{\mathrm dS}{\mathrm dt}=\mu S\) gives \(S(t)=S_0e^{\mu t}\): always positive, but every run is identical — no uncertainty at all.
A good model must meet three requirements at once:
The solution · construction
From an exponential ODE to a stochastic equation
Begin with the deterministic growth law from AP Calculus BC, written in differential form:
\[ \mathrm dS = \mu S\,\mathrm dt. \]Inject randomness proportional to the state with a term driven by Brownian motion \(W_t\):
\[ \mathrm dS_t = \underbrace{\mu S_t\,\mathrm dt}_{\text{drift}} + \underbrace{\sigma S_t\,\mathrm dW_t}_{\text{diffusion}}. \]\(\mu\) is the average proportional growth rate; \(\sigma\) (the volatility) sets the scale of the random proportional fluctuations.
Both terms carry the factor \(S_t\), which makes the model geometric: every change is measured relative to the current level, and that is what keeps \(S_t\) positive.
The solution · key idea
Brownian motion bends the chain rule
Standard Brownian motion \(W_t\) has independent, Gaussian increments:
\[ W_t-W_s\sim \mathcal N(0,\,t-s),\qquad t>s. \]Over a step \(\Delta t\) the increment scales like \(\sqrt{\Delta t}\), so its square scales like \(\Delta t\) — the rule \((\mathrm dW_t)^2=\mathrm dt\). A second-order Taylor expansion can no longer ignore that term. Applying it to \(g(S)=\ln S\):
\[ \mathrm d\ln S_t=\frac{1}{S_t}\,\mathrm dS_t-\frac{1}{2S_t^{2}}(\mathrm dS_t)^2=\left(\mu-\frac{\sigma^{2}}{2}\right)\mathrm dt+\sigma\,\mathrm dW_t. \]The extra \(-\sigma^2/2\) is the Itô correction, or volatility drag: randomness lowers the typical growth of \(\ln S_t\) even though the level still drifts at \(\mu\).
The solution · closed form
Integrate once, exponentiate back
Since \(\mathrm d\ln S_t\) has constant drift and constant diffusion, it integrates directly from \(0\) to \(T\). Exponentiating recovers the level:
\[ S_T=S_0\exp\!\left(\left(\mu-\frac{\sigma^2}{2}\right)T+\sigma\sqrt{T}\,Z\right), \qquad Z\sim\mathcal N(0,1). \]The solution · consequences
Mean, median, and spread
With the single Gaussian fact \(\mathbb E[e^{aZ}]=e^{a^2/2}\) for \(Z\sim\mathcal N(0,1)\), every moment follows in closed form:
\[ \mathbb E[S_T]=S_0e^{\mu T},\qquad \operatorname{Median}(S_T)=S_0e^{(\mu-\sigma^2/2)T}. \]The mean tracks the full drift \(\mu\); the median carries the \(-\sigma^2/2\) correction, so for any \(\sigma>0\) the median sits below the mean — the signature of a right-skewed log-normal.
\[ \operatorname{Var}(S_T)=S_0^{2}e^{2\mu T}\!\left(e^{\sigma^{2}T}-1\right). \]As \(\sigma\) grows the paths fan out quickly, even though their average still follows \(S_0e^{\mu T}\).
The solution · computation
Simulating the model
Each path uses the exact update implied by the closed form — no discretization error, because \(\ln S\) is linear in the noise:
\[ S_{k+1}=S_k\exp\!\left((\mu-\sigma^2/2)\Delta t+\sigma\sqrt{\Delta t}\,Z_k\right). \]Minimal Python implementation
import numpy as np
import matplotlib.pyplot as plt
S0, mu, sigma, T, steps = 100, 0.08, 0.25, 1, 252
dt = T / steps
t = np.linspace(0, T, steps + 1)
S = np.zeros(steps + 1)
S[0] = S0
for i in range(steps):
z = np.random.normal()
S[i + 1] = S[i] * np.exp(
(mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * z
)
plt.plot(t, S)
plt.title("Geometric Brownian motion path")
plt.xlabel("time")
plt.ylabel("S(t)")
plt.show()
Mathematical history
How the pieces came together
- 1827. Botanist Robert Brown records the ceaseless jitter of pollen grains in water — the physical picture of random microscopic shocks.
- 1905. Einstein (with Smoluchowski) explains that jitter as molecular bombardment, linking it to the diffusion equation.
- 1923. Norbert Wiener constructs the Wiener process, giving Brownian motion a rigorous mathematical definition.
- 1933. Kolmogorov puts probability on an axiomatic footing, making "random functions" precise.
- 1944–51. Kiyosi Itô develops stochastic calculus and Itô's lemma — the chain-rule correction at the core of GBM.
- 1960s. GBM becomes the standard textbook model for positive random growth and the canonical benchmark SDE.
Academic example I
Expected value and median
A GBM has \(S_0=100\), \(\mu=0.10\), \(\sigma=0.20\), and \(T=2\). Find the expected value and the median of \(S_T\).
Idea
Both come straight from the closed form. The mean uses the full drift \(\mu\); the median uses the drift after the volatility correction, \(\mu-\tfrac{\sigma^2}{2}\). Just substitute the numbers.
Compute
\[ \mathbb E[S_T]=100\,e^{0.10\cdot 2}\approx 122, \] \[ \operatorname{Median}(S_T)=100\,e^{(0.10-0.02)\cdot 2}\approx 117. \]The mean lands above the median: a few large outcomes pull the average up.
Academic example II
A first probability
With \(S_0=100\), \(\mu=0.10\), \(\sigma=0.20\), and \(T=1\), what is the chance that \(S_1\) ends above its starting value of \(100\)?
Idea
Take logs. The event \(S_1>100\) is the same as \(\ln(S_1/100)>0\), and that log is normal with mean \(\mu-\tfrac{\sigma^2}{2}=0.08\) and standard deviation \(\sigma\sqrt T=0.20\).
Compute
\[ \mathbb P(S_1>100)=\mathbb P\!\left(Z>\frac{0-0.08}{0.20}\right)=\mathbb P(Z>-0.4). \]So \(\Phi(0.4)\approx 0.66\) — about a two-in-three chance of finishing higher than it started.
Real-world application I · biology
Expected size of a colony
A bacterial colony starts at \(N_0=1000\) cells with mean growth rate \(\mu=0.5\,\mathrm{hr}^{-1}\) and random fluctuation \(\sigma=0.3\). Modeling \(N_t\) as GBM, what size do we expect after \(T=2\) hours?
Idea
This is the mean formula from before, now applied to a population. Because the model is an exponential, the cell count stays positive — exactly what a real colony requires.
Compute
\[ \mathbb E[N_T]=N_0e^{\mu T}=1000\,e^{0.5\cdot 2}\approx 2718\ \text{cells}. \]On average the colony nearly triples in two hours, with individual runs scattered around that value.
Real-world application II · pharmacology
A drug clearing from the body
A drug starts at \(C_0=100\,\mathrm{mg/L}\) and is cleared at mean rate \(\mu=-0.2\,\mathrm{hr}^{-1}\) with random fluctuation \(\sigma=0.2\). Modeling \(C_t\) as GBM, what is the median concentration after \(T=3\) hours?
Idea
The same median formula works, only now \(\mu\) is negative, so the level decays instead of grows. Positivity still holds: a concentration approaches zero but never drops below it.
Compute
\[ \operatorname{Median}(C_T)=C_0e^{(\mu-\sigma^2/2)T}=100\,e^{-0.66}\approx 52\ \mathrm{mg/L}. \]After three hours, half of patients sit below about \(52\,\mathrm{mg/L}\).
Conclusion
The core synthesis
- Problem. Model a positive quantity whose random shocks scale with its current size.
- Solution. Put Brownian noise into proportional growth: \(\mathrm dS_t=\mu S_t\,\mathrm dt+\sigma S_t\,\mathrm dW_t\).
- Key result. Itô's lemma makes \(\ln S_T\) Gaussian, so \(S_T\) is log-normal — always positive and exactly simulatable.
- Takeaway. One piece of calculus answered both textbook questions and applied biology and pharmacology problems. It assumes constant \(\mu,\sigma\) and no sudden jumps, so it is a transparent baseline, not the whole story.