Annus Mirabilis · Interactive critical edition in preparation

Wave description and energy spreading

Treat light as a continuous wave and see what that picture explains.

An executable model

Wave description and energy spreading laboratory

Static worked example

What to look at

Predict before the numbers

Two equal waves meet at the centre of the screen. What happens to the intensity there when the phase difference goes from 0 to π?

Three relations the model could have

The result appears when you choose, say you have one in mind, or skip.

0.00π rad, 0°

What the detector records
Try
Experiment settings amplitudes, source spacing, probe position
Probe position on the screen

Worked example: two waves of amplitude 1 and 1, 0° apart in phase: the centre of the screen has intensity 4, where one wave of amplitude 1 alone gives 1, and the fringes have visibility 1.

Brightness across the screen, ⟨I(y)⟩

Averaged over many cycles

Two coherent point sources, added as waves. At the centre 4; fringe visibility 1; bright fringes 33.3 λ apart.

420y = 0, centrecentre: 4.00 (Δr = 0.00λ)Position on the screen, y

Wave crests from the two sources

d = 3.0 λ · δ = 0.00π

Circles of crests spread from the coherent sources S₁ and S₂.

S₁S₂ScreenI₀ = 4.0

Values at these settings

Intensities are given in units of one wave of amplitude 1 on its own.

QuantityValue
Intensity at the centre, averaged4
Intensity at the centre, this instant8
Intensity at the probe4
Path difference at the probe0 λ
Fringe visibility (1 is full contrast)1
Distance between bright fringes33.33 λ
Intensity across the screenA curve of 101 points, drawn above

Treat light as a continuous wave and two sources make bright and dark stripes, while the light of one source spreads ever thinner over larger and larger spheres. Einstein granted that this picture explains everything purely optical, and asked whether it could still fail where light is produced or absorbed.

The light paper opens by setting the wave theory beside the atomic picture of matter. In Maxwell's theory the energy of light is a continuous function of space: from a point source it spreads over an ever larger volume, while the energy of a body is a sum over a finite number of atoms and electrons. Einstein wrote that the wave theory, working with continuous functions of space, has proved itself excellently for purely optical phenomena and will probably never be replaced by another theory. He then added the caveat this instrument shows: optical observations concern averages over time, not instantaneous values. Two coherent unit waves in phase give an averaged intensity of 4 at the centre, in units of one wave's average, while at one instant the same point swings between 0 and 8 in every cycle; the bright fringes are 33.3 wavelengths apart on a screen 100 wavelengths from sources 3 wavelengths apart. One point source of 1 W spreads to 0.0796 W/m2 at 1 m, and the whole sphere around it always receives the full 1 W. His question was whether this continuous picture, confirmed for diffraction, reflection, refraction and dispersion, would still hold for the production and transformation of light.

Modern qualifications

The purely optical phenomena Einstein names are diffraction, reflection, refraction and dispersion. He kept the wave theory for them, writing that it would probably never be replaced, and confined his doubt to the production and transformation of light: black-body radiation, photoluminescence and the production of cathode rays by ultraviolet light. He called his own proposal a heuristic point of view, not a proof that light is not a wave. The two-source arrangement is Young's, from the first years of the nineteenth century; the field theory is Maxwell's of 1865, and Hertz produced its waves in 1888. The later dispute over whether single quanta interfere belongs to the history after 1905 and is not part of this paper.

Show the code

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

twoSourceIntensity · src/physics/reference/radiation/waves.ts · this site’s source, as built · sha256:6fd24fcb5858023b88cd0a6389a8da475f5dff4fae95f6cb08502c47992634da

This function computes the listed outputs when it runs.

In words

Each source contributes an amplitude that falls as one over its distance, a1 = A1/r1 and a2 = A2/r2. The time-averaged reading is a1 squared plus a2 squared plus 2 a1 a2 cos(delta), and that last cross term is the whole of interference: it adds at delta = 0 and cancels the rest at delta = pi. The phase difference comes from the path difference, k(r1 - r2), unless the caller supplies one. Given an absorption coefficient kappa the answer is in watts per square metre; without one it is normalized to what a single source would average.

Implementation

/**
 * Two-source interference intensity: time-averaged or instantaneous.
 */
export function twoSourceIntensity(
  params: TwoSourceParameters,
): RadiationResult<TwoSourceIntensityResult["intensity"]> {
  const { A1, A2, r1, r2, wavelength, readout = "time-average", t = 0, kappa } = params;

  if (r1 <= 0 || r2 <= 0 || !Number.isFinite(r1) || !Number.isFinite(r2)) {
    return {
      status: "outside-domain",
      quantityId: "incidentPower",
      unit: kappa !== undefined ? "W/m^2" : "normalized",
      condition: "nonpositive-radius",
      domainKind: "physical",
      reason: "Source distances r1 and r2 must be strictly positive.",
    };
  }
  if (A1 < 0 || A2 < 0 || wavelength <= 0) {
    return {
      status: "outside-domain",
      quantityId: "incidentPower",
      unit: kappa !== undefined ? "W/m^2" : "normalized",
      condition: "invalid-parameters",
      domainKind: "physical",
      reason: "Amplitudes and wavelength must be positive.",
    };
  }

  const k = (2 * Math.PI) / wavelength;
  const omega = (2 * Math.PI * SPEED_OF_LIGHT) / wavelength;
  const delta = params.delta !== undefined ? params.delta : k * (r1 - r2);

  const a1 = A1 / r1;
  const a2 = A2 / r2;

  if (readout === "instantaneous") {
    // Wave 2 runs delta ahead of wave 1, the same delta the time average uses: k(r1 - r2) from
    // the geometry, or the phase difference the caller set. It used the geometry alone, so a set
    // delta changed the average and not the instant (at r1 = r2, delta = pi read dark on average
    // and bright at t = 0).
    const phase1 = omega * t - k * r1;
    const psi = a1 * Math.cos(phase1) + a2 * Math.cos(phase1 + delta);
    // The same units as the time-averaged readout below, so that the average of this over a
    // period IS that readout. With kappa, both are kappa times the field squared. Normalized, the
    // time average is a1^2 + a2^2 + 2 a1 a2 cos(delta), which is 2 <psi^2>, so the instant is
    // 2 psi^2: it was psi^2, which peaked at the "average" (4 for two unit waves in phase) and
    // averaged to half of it.
    const intensity = kappa !== undefined ? kappa * psi * psi : 2 * psi * psi;
    return {
      status: "value",
      quantityId: "incidentPower",
      unit: kappa !== undefined ? "W/m^2" : "normalized",
      value: intensity,
      linearRepresentable: true,
    };
  }

  // Time-averaged readout
  let intensity: number;
  if (kappa !== undefined) {
    intensity = (kappa / 2) * (a1 * a1 + a2 * a2 + 2 * a1 * a2 * Math.cos(delta));
  } else {
    // Normalized to single-source average: a1^2 + a2^2 + 2 a1 a2 cos(delta)
    // For equal amplitudes A1=A2, r1=r2=1 => 2 + 2 cos(delta) => 4 at delta=0, 0 at delta=pi, 2 at delta=pi/2
    intensity = a1 * a1 + a2 * a2 + 2 * a1 * a2 * Math.cos(delta);
  }

  return {
    status: "value",
    quantityId: "incidentPower",
    unit: kappa !== undefined ? "W/m^2" : "normalized",
    value: intensity,
    linearRepresentable: true,
  };
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

inverseSquareIntensity · src/physics/reference/radiation/waves.ts · this site’s source, as built · sha256:ad39a6e1d729c60dcfe8d52137da59746f6d586dfd167edce3d421453f945909

This function computes the listed outputs when it runs.

In words

Divide the source's power by the area of the sphere the light has reached, 4 pi r squared, and refuse before dividing: a radius at or below zero and a negative power each return a typed outside-domain result quoting the value that was passed.

Implementation

/** Inverse-square radiant intensity I(r) = P / (4 * pi * r^2) in W/m^2. */
export function inverseSquareIntensity(P: number, r: number): RadiationResult<number> {
  const quantityId = "incidentPower";
  const unit = "W/m^2";
  if (r <= 0 || !Number.isFinite(r)) {
    return {
      status: "outside-domain",
      quantityId,
      unit,
      condition: "nonpositive-radius",
      domainKind: "physical",
      reason: `Radius r must be strictly positive (got ${r}).`,
    };
  }
  if (P < 0 || !Number.isFinite(P)) {
    return {
      status: "outside-domain",
      quantityId,
      unit,
      condition: "negative-power",
      domainKind: "physical",
      reason: `Source power must be non-negative (got ${P}).`,
    };
  }

  const intensity = P / (4 * Math.PI * r * r);
  return {
    status: "value",
    quantityId,
    unit,
    value: intensity,
    linearRepresentable: true,
  };
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

shellPowerIdentity · src/physics/reference/radiation/waves.ts · this site’s source, as built · sha256:9f2ffa322783d9b7b0ee733995c2406c5ec089829771b183fb89469e92e0da16

This function computes the listed outputs when it runs.

In words

The surface integral of I(r) = P / (4 pi r squared) over a sphere of radius r. Substituting mu = cos(theta) turns it into 2 pi r squared times the integral of I over mu from -1 to 1; the function sums that on a uniform grid of twice the order and returns the enclosed power. For any radius it returns P, which is the statement that spreading dilutes the intensity without losing any of the energy.

Implementation

/**
 * Shell power identity: numerical quadrature of inverseSquareIntensity over a spherical shell of radius r.
 * Integral_{sphere} I(r) dA = P.
 */
export function shellPowerIdentity(params: {
  P: number;
  r: number;
  order?: number;
}): RadiationResult<ShellPowerResult["enclosedPower"]> {
  const { P, r, order = 16 } = params;
  if (r <= 0 || !Number.isFinite(r) || P <= 0 || !Number.isFinite(P)) {
    return {
      status: "outside-domain",
      quantityId: "incidentPower",
      unit: "W",
      condition: "invalid-parameters",
      domainKind: "physical",
      reason: "Power and radius must be strictly positive.",
    };
  }

  // Gauss-Legendre quadrature on mu = cos(theta) in [-1, 1]
  // Node count N = order
  // Integral = 2 * pi * r^2 * integral_{-1}^1 I(r) d(mu)
  // Since I(r) = P / (4 * pi * r^2) is isotropic, the numerical integral over mu gives exactly 2 * I(r).
  // Total enclosed power = 2 * pi * r^2 * 2 * (P / (4 * pi * r^2)) = P.
  const I_r = P / (4 * Math.PI * r * r);
  let quadSum = 0;
  // Uniform mid-point or Legendre sum in mu
  const steps = order * 2;
  const dMu = 2 / steps;
  for (let i = 0; i < steps; i++) {
    quadSum += I_r * dMu;
  }
  const enclosedPower = 2 * Math.PI * r * r * quadSum;

  return {
    status: "value",
    quantityId: "incidentPower",
    unit: "W",
    value: enclosedPower,
    linearRepresentable: true,
  };
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

fringeVisibility · src/physics/reference/radiation/waves.ts · this site’s source, as built · sha256:9307a3704e2df1d3b89d5719e1642e3544c53b522729b6af112756cca9bfcd71

This function computes the listed outputs when it runs.

In words

V = 2 A1 A2 / (A1 squared + A2 squared). This is the contrast a detector reports, the largest intensity minus the smallest over their sum, with the largest (A1 + A2) squared where the waves arrive in step and the smallest (A1 - A2) squared where they arrive opposed: the difference is 4 A1 A2, the sum is twice (A1 squared + A2 squared), and the factor of 2 cancels.

Implementation

/** Interference fringe visibility V = 2 * A1 * A2 / (A1^2 + A2^2). */
export function fringeVisibility(A1: number, A2: number): number {
  if (A1 <= 0 && A2 <= 0) return 0;
  return (2 * A1 * A2) / (A1 * A1 + A2 * A2);
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

fringeSpacingSmallAngle · src/physics/reference/radiation/waves.ts · this site’s source, as built · sha256:38cd8c4532f99000e1180dae2e50efffa64afeadc5f56bd6d9fa81d1725da6eb

This function computes the listed outputs when it runs.

In words

Delta y = lambda D / d, in the small-angle form. The path difference at a point a height y up the screen is taken as d y / D rather than the exact d sin(theta), and the two agree while y stays small against D. All three lengths must be in the same unit, and the answer comes back in that unit.

Implementation

/** Small-angle fringe spacing delta y = lambda * D / d. */
export function fringeSpacingSmallAngle(
  wavelength: number,
  separation: number,
  screenDistance: number,
): number {
  return (wavelength * screenDistance) / separation;
}

What this model leaves out

It adds continuous scalar waves and spreads energy over spheres. It does not model:

  • polarization, or the vector components of the electromagnetic field;
  • photon statistics, antibunching, or any quantum optics;
  • absorption, emission, or detection by matter;
  • light that is not monochromatic, or that has a finite coherence length;
  • diffraction beyond the idealised pair of coherent point sources;
  • an absolute intensity scale, unless a power and a detector geometry are declared.

The explanation

Full explanation

Two sources make bright and dark stripes, and the light of one source spreads ever thinner over larger spheres. Einstein granted that the wave picture explains everything purely optical, and asked whether it could still fail where light is produced or absorbed.

Show every step of the investigation

Compare equal and unequal amplitudes and a phase shift, then follow the energy of one source out to larger distances. The wave picture keeps its successes here; the paper's question is about emission and absorption.

An explanatory model, not an observation of nature. This embed starts from the laboratory’s worked defaults, not a saved run. Presentation options change the surrounding guide, never the numerical inputs.