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
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 cyclesTwo coherent point sources, added as waves. At the centre 4; fringe visibility 1; bright fringes 33.3 λ apart.
Wave crests from the two sources
d = 3.0 λ · δ = 0.00πCircles of crests spread from the coherent sources S₁ and S₂.
Values at these settings
Intensities are given in units of one wave of amplitude 1 on its own.
| Quantity | Value |
|---|---|
| Intensity at the centre, averaged | 4 |
| Intensity at the centre, this instant | 8 |
| Intensity at the probe | 4 |
| Path difference at the probe | 0 λ |
| Fringe visibility (1 is full contrast) | 1 |
| Distance between bright fringes | 33.33 λ |
| Intensity across the screen | A 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.
Start with one wave. At a fixed point its field rises and falls as A cos(ωt), and its square, which carries the energy, goes as A2 cos2(ωt). Over a whole cycle cos2 averages to 1/2, so the average of the square is A2/2. The instrument measures intensity in units of that average for a wave of amplitude 1, so one unit wave reads 1 on average and 2 at its peak. Now two unit waves arrive in step at the centre of the screen. The fields add first: the total is 2 cos(ωt), and its square is 4 cos2(ωt). In the instrument's units that swings between 0 and 8 in every cycle and averages to 4, which is twice the 1 + 1 you would get by adding the two intensities; the extra 2 is the cross term 2A1A2 cos δ with the phase difference δ = 0. Shift one wave by half a cycle, δ = π, and the cross term is −2: the average is 0, a dark stripe. Along the screen the difference in path changes the phase, and the bright stripes repeat each time it grows by one wavelength. For sources d = 3 wavelengths apart and a screen L = 100 wavelengths away, the spacing is λL/d = 100/3 = 33.3 wavelengths. For the spreading, take a point source radiating P = 1 W equally in every direction. At distance r the power crosses a sphere of area 4πr2, so the intensity is P/(4πr2) = 1/(4π × 12) = 0.0796 W/m2 at 1 m, a quarter of that at 2 m, and the total over the sphere is 1 W at every radius. A window of 1 cm2, that is 10−4 m2, at 1 m receives about 0.0796 × 10−4 = 7.96 × 10−6 W; the exact figure for a flat disc differs by about 2 parts in 100 000. As r grows, the energy through any small window keeps falling without limit. The next paragraph of the paper replaces that continuous thinning with a hypothesis: a finite number of energy quanta, localized at points, which move without dividing and are absorbed or produced only as wholes.
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.