Article
Thermodynamics · ⏱ ~11 min read · Last updated: 9 July 2026

The Fluctuation-Dissipation Theorem

A pollen grain jittering under a microscope and a spoon slowly losing its heat to a cup of tea look like unrelated phenomena — one is random noise, the other is orderly decay. The fluctuation-dissipation theorem shows they are the same physics viewed from two angles: any system's spontaneous thermal fluctuations at equilibrium determine exactly how it dissipates energy when pushed slightly out of equilibrium. One measurement predicts the other.

TL;DR: Random thermal jitter and smooth frictional decay are the same underlying physics: the fluctuation-dissipation theorem shows a system's spontaneous equilibrium fluctuations fix exactly how strongly it dissipates energy when disturbed. This single principle explains Brownian motion's Einstein relation, the noise term in the Langevin equation, Johnson-Nyquist electrical noise in resistors, and the Green-Kubo formulas used to compute viscosity and conductivity from equilibrium simulations.

1. Fluctuations and Linear Response

At thermal equilibrium, every microscopic quantity fluctuates around its average — a particle's velocity, a system's energy, the voltage across a resistor. These fluctuations are not noise to be filtered out; they carry deep information. When you perturb the same system with a small external force, its response — how quickly it relaxes back to equilibrium — is governed by the exact same microscopic dynamics that produced the spontaneous fluctuations.

Core idea: the system cannot "tell the difference" between a spontaneous fluctuation away from equilibrium and a small deviation caused by an external perturbation. Both relax back via the same dynamics, so the relaxation rate of a fluctuation must equal the response function to a matched external force.

2. Brownian Motion and the Einstein Relation

The oldest and clearest example: a colloidal particle suspended in fluid is kicked by molecular collisions (fluctuation) and slowed by viscous drag (dissipation). Einstein's 1905 analysis connected the two:

Diffusion coefficient (fluctuation side): ⟨x²(t)⟩ = 2Dt (mean squared displacement, 1D) Mobility (dissipation side): v_drift = μ F (drift velocity per unit applied force) Einstein relation: D = μ k_B T Stokes drag for a sphere of radius a in viscosity η: γ = 6π η a (friction coefficient) μ = 1/γ → D = k_B T / (6π η a)

The same friction coefficient γ that damps a directed push also sets the size of the random jitter — a stiffer drag means both a slower drift response and smaller thermal fluctuations. You cannot have strong dissipation without correspondingly strong fluctuations at the same temperature; the two are locked together.

3. The General FDT (Callen-Welton)

Einstein's relation is a special case of a much more general 1951 result by Callen and Welton, which connects the power spectrum of spontaneous fluctuations of any observable to the imaginary (dissipative) part of the system's linear response function at the same frequency:

S_x(ω) = (2 k_B T / ω) · χ''(ω) S_x(ω) = power spectral density of fluctuations in x χ''(ω) = imaginary part of the response (susceptibility), the part responsible for energy dissipation k_B T = thermal energy scale At ω→0 this reduces to the Einstein/Green-Kubo forms below; at finite ω it also explains why a resonant system (e.g. an LC circuit or a damped oscillator) has enhanced thermal noise exactly at its resonance frequency, where dissipation is largest.

4. The Langevin Equation and Thermal Noise

The Langevin equation is the FDT written as an equation of motion: a deterministic drag force plus a random thermal force, with the two forced to have compatible magnitudes:

m (dv/dt) = −γv + ξ(t) ξ(t) — random thermal force, ⟨ξ(t)⟩ = 0 ⟨ξ(t) ξ(t′)⟩ = 2 γ k_B T δ(t − t′) ← the FDT constraint The noise strength (2γk_BT) is fixed by the SAME γ that appears in the drag term. Pick γ, and the noise amplitude is no longer a free parameter — it is set by temperature.

This coupling is what makes Langevin dynamics a correct thermostat for molecular simulations: scaling up the friction to control temperature more aggressively also requires scaling up the injected random kicks by exactly the matching amount, or the simulated temperature will drift.

5. Johnson-Nyquist Electrical Noise

Every resistor at finite temperature generates a random open-circuit voltage across its terminals — thermal (Johnson-Nyquist) noise — purely because its conduction electrons are the same electrons responsible for its resistive (dissipative) response:

Voltage noise power spectral density: S_V(f) = 4 k_B T R RMS voltage over bandwidth Δf: V_rms = √(4 k_B T R Δf) Example: R = 1 kΩ, T = 300 K, Δf = 1 MHz V_rms = √(4 × 1.38e-23 × 300 × 1000 × 1e6) ≈ 4.1 μV

Doubling the resistance doubles the dissipative response and doubles the noise power — exactly the FDT relationship, and the fundamental noise floor that limits every sensitive electronic amplifier and radio receiver.

6. Green-Kubo Relations

Green-Kubo relations extend the same idea to macroscopic transport coefficients — viscosity, thermal conductivity, electrical conductivity — expressing each as the time integral of an equilibrium fluctuation correlation function:

Self-diffusion coefficient: D = (1/3) ∫₀^∞ ⟨v(0)·v(t)⟩ dt (velocity autocorrelation) Shear viscosity: η = (V / k_B T) ∫₀^∞ ⟨P_xy(0) P_xy(t)⟩ dt (stress autocorrelation) Electrical conductivity: σ = (1 / V k_B T) ∫₀^∞ ⟨J(0)·J(t)⟩ dt (current autocorrelation)

This is exactly how molecular dynamics codes measure macroscopic material properties: run an equilibrium simulation (no external field, no imposed gradient), record the autocorrelation of the microscopic flux, integrate it over time, and out comes the transport coefficient — no need to actually apply a shear or a temperature gradient at all.

7. JavaScript Simulation

// Langevin thermostat integrator — velocity form, obeys the FDT exactly
function langevinStep(v, m, gamma, kT, dt, randn) {
  // Deterministic drag
  const drag = -gamma * v / m;
  // Thermal noise amplitude set by the fluctuation-dissipation constraint
  const noiseAmp = Math.sqrt(2 * gamma * kT / dt) / m;
  const noise = noiseAmp * randn();  // randn() = standard normal sample
  return v + (drag + noise) * dt;
}

// Box-Muller for a standard normal random number
function randn() {
  const u1 = Math.random() || 1e-12, u2 = Math.random();
  return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
}

// Verify the FDT numerically: measured MSD should match D = k_BT/gamma (Einstein relation)
function measureDiffusion(gamma, kT, m, dt, steps) {
  let x = 0, v = 0;
  const xs = [];
  for (let i = 0; i < steps; i++) {
    v = langevinStep(v, m, gamma, kT, dt, randn);
    x += v * dt;
    xs.push(x);
  }
  const msd = xs[xs.length - 1] ** 2;
  const D_measured = msd / (2 * steps * dt);
  const D_theory = kT / gamma;
  return { D_measured, D_theory };  // converge as steps → ∞
}

8. Applications and Limits