Annus Mirabilis · Interactive critical edition in preparation
Transforming the field equations
Transform the Maxwell-Hertz equations and see what the fields must do to keep their form.
An executable model
The field equations keep their form
Static worked example
Model note
- Largest residual of the field equations (
residualMax), Faraday residual, x component (residualFaradayX), Faraday residual, y component (residualFaradayY), Faraday residual, z component (residualFaradayZ), Ampère-Maxwell residual, x component (residualAmpereX), Ampère-Maxwell residual, y component (residualAmpereY), Ampère-Maxwell residual, z component (residualAmpereZ), Amplitude factor γ(1 − β) for a +x wave (amplitudeFactor), Frequency transformation factor (frequencyFactor), Lorentz factor (lorentzFactor), Whether the equations keep their form in k (formInvariant) and Step reached in the derivation (stepIndexOut): Host calculation, by the site's own reference code. Computed infields. - Computed from the settings last applied (settings revision 1, result 1).
- Not modeled: sources and currents (the charge-and-current laboratory); media; boundary conditions; radiation reaction; field configurations other than the admitted analytic validation waves.
Worked example: boosting at 0.6c, the six Maxwell–Hertz equations keep their form in the moving system; the largest residual at twenty seeded events is 0.
(1/V) ∂X/∂t = ∂N/∂y − ∂M/∂z
Ampere-Maxwell, x component. Printed Gaussian. X is electric; M and N are magnetic.
Unit layer: Printed Gaussian (Annalen 1905). X, Y, Z electric; L, M, N magnetic.
Step 1 of 6
Chain-rule operators from the §3 map: ∂/∂t and ∂/∂x mix τ and ξ with Einstein's β (modern γ).
The transformed equations keep the Maxwell-Hertz form for the validation wave.
Carry Maxwell's equations for empty space into a moving frame and they keep exactly the same form, provided the electric and magnetic fields are allowed to change together. That requirement is what fixes how the fields transform.
§6 takes the Maxwell–Hertz equations for empty space in the stationary system K, six equations linking the rates of change of the electric force (X, Y, Z) and the magnetic force (L, M, N); in paper 3, X, Y, Z are electric components and L, M, N are magnetic components. It rewrites them in the coordinates and time of the moving system k by the transformation of §3, which turns each derivative into a combination of derivatives in ξ, η, ζ and τ, and finds the same form again if β(Y − (v/V)N), β(Z + (v/V)M), β(M + (v/V)Z) and β(N − (v/V)Y) are read as the new components. The principle of relativity demands that the equations hold in k for the forces measured there, so the two forms must agree, which fixes the transformed fields up to a common factor ψ(v); the inverse transformation and symmetry make ψ = 1. Einstein's β is the modern γ. The lab steps through one equation at a time and checks the result on a plane wave: at 0.6c, for light moving along the boost, the amplitude and the frequency both fall to 0.5, and all six transformed equations hold at twenty seeded events, every residual 0 against a relative tolerance of 10−12.
Take one of the six, the x component of the Ampère–Maxwell law as printed: (1/V) ∂X/∂t = ∂N/∂y − ∂M/∂z. The transformation of §3 gives τ = β(t − vx/V²), ξ = β(x − vt), η = y and ζ = z. By the chain rule, a derivative with respect to t in K becomes β(∂/∂τ − v ∂/∂ξ), a derivative with respect to x becomes β(∂/∂ξ − (v/V²) ∂/∂τ), and derivatives with respect to y and z are unchanged. Substitute these into all six equations and collect terms. The x equation becomes (1/V) ∂X/∂τ = ∂[β(N − (v/V)Y)]/∂η − ∂[β(M + (v/V)Z)]/∂ζ, which has the shape of the original if the bracketed combinations are called N′ and M′ and X is called X′. The other five equations work out the same way, with X′ = X, L′ = L and the four mixed combinations. In the printed Gaussian units electric and magnetic forces have the same dimension, so Y − (v/V)N makes sense as it stands; in SI the same combination is Ey − vBz, and the lab labels that conversion rather than making it silently. For a plane wave moving along x, N = Y, so at 0.6c the combination gives Y′ = β(Y − (v/V)N) = 1.25 × (1 − 0.6) Y = 0.5 Y: the amplitude halves, and the frequency halves with it, which is §7's Doppler factor. The lab then evaluates the six transformed equations at twenty events drawn from a fixed seed, taking the derivatives in closed form rather than by finite differences, and reports the largest residual, here 0. A boost at or beyond the speed of light is refused, because β is not defined there.
Modern qualifications
The derivation is §6's, pp. 907–909, and it assumes the Maxwell–Hertz equations for empty space, not a theory of matter. It shows that the equations keep their form; that the transformed quantities are the forces a charge at rest in k would feel is a further step, which §6 takes by defining the fields in k through their ponderomotive effects there, and form invariance of the equations does not by itself prove that identification. Lorentz had given the transformation of the free-space fields in 1904 for his corresponding states, and Poincaré completed the transformation of charge and current in 1905 and 1906. L and N here are magnetic components, not the speed of light of paper 1 or the emitted energy of paper 4, and N is not Avogadro's number.
| Printed | Role in this paper | Modern SI (labeled conversion) |
|---|---|---|
| X | electric x in K | Ex |
| Y | electric y in K | Ey |
| Z | electric z in K | Ez |
| L | magnetic x in K (not the speed of light) | Bx |
| M | magnetic y in K | By |
| N | magnetic z in K (not Avogadro's number) | Bz |
K is the stationary system. τ is the moving-frame time, not the modern proper time. Einstein's β is the modern γ.
| Form invariant? | yes |
|---|---|
| Max residual | 0.000000 |
| Faraday x, y, z | 0.000000; 0.000000; 0.000000 |
| Ampere-Maxwell x, y, z | 0.000000; 0.000000; 0.000000 |
| Amplitude factor γ(1 − β) for a +x wave | 0.5000000 |
| Frequency factor | 0.5000000 |
Residuals are an oracle on an admitted analytic wave. They are not the section 6 argument. The algebra above is a static worked example.
Show the validation code
Residuals come from maxwellResidualsPlaneWave and transformSI in the host evaluator src/physics/reference/fields.ts. The derivation steps are an authored static chain, not that function.
Same scientific action without the display equation
Choose an equation from the list, advance or go back a named step, and read the residual table. Ask whether the transformed equations still have the Maxwell-Hertz form.
Not modeled: sources and currents (the charge-and-current laboratory); media; boundary conditions; radiation reaction; field configurations other than the admitted analytic validation waves.
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.
maxwellResidualsPlaneWave · src/physics/reference/fields.ts · this site’s source, as built · sha256:1aa29e33145a81a9dd34ccf8d0d4a035e97322c57c5e2847ba11d93ddfd88564
This function computes the listed outputs when it runs.
In words
The function builds a plane wave, transforms its field derivatives into the moving system by the chain rule, and forms the two combinations that Faraday's and Ampere's laws set to zero. What it returns is not a verdict but the residuals themselves, six of them, together with the largest, so that a reader sees the size of the failure rather than a passed or failed stamp. It also returns the amplitude and frequency factors, which for a wave along the motion are the Doppler factor gamma times (1 minus the direction cosine times beta).
Implementation
export function maxwellResidualsPlaneWave(input: {
beta: number;
wave: PlaneWaveKind;
polarization: Polarization;
events?: readonly Event4[];
convention?: TransformConvention;
E0?: number;
omega?: number;
}): Readonly<{
maxResidual: number;
residuals: Float64Array;
amplitudeFactor: number;
frequencyFactor: number;
gamma: number;
passed: boolean;
eventSeed: string;
}> {
const v = input.beta;
const g = gamma(v);
if (g.status !== "value") {
return Object.freeze({
maxResidual: Number.POSITIVE_INFINITY,
residuals: new Float64Array(6),
amplitudeFactor: Number.NaN,
frequencyFactor: Number.NaN,
gamma: Number.NaN,
passed: false,
eventSeed: SR07_EVENT_SEED,
});
}
const E0 = input.E0 ?? 1;
const omega = input.omega ?? 1;
const convention = input.convention ?? "printed";
const n = waveNormal(input.wave);
const eHat = wavePolarization(input.wave, input.polarization);
const events = input.events ?? seededPlaneWaveEvents();
const residuals = new Float64Array(6);
let maxResidual = 0;
const γ = g.value;
const doppler = γ * (1 - n.x * v);
const amplitudeFactor = input.wave === "plus-x" || input.wave === "minus-x" ? doppler : γ;
const frequencyFactor = doppler;
let allPassed = true;
for (const event of events) {
const w = planeWaveAt(n, eHat, E0, omega, event);
const dEdt = applyPrintedOrFlipped(w.dEdt, w.dBdt, v, convention);
const dEdx = applyPrintedOrFlipped(w.dEdx, w.dBdx, v, convention);
const dEdy = applyPrintedOrFlipped(w.dEdy, w.dBdy, v, convention);
const dEdz = applyPrintedOrFlipped(w.dEdz, w.dBdz, v, convention);
const eTau = chainPrime(dEdt.E, dEdx.E, dEdy.E, dEdz.E, γ, v);
const bTau = chainPrime(dEdt.B, dEdx.B, dEdy.B, dEdz.B, γ, v);
const curlE: readonly [number, number, number] = [
eTau.dEta.z - eTau.dZeta.y,
eTau.dZeta.x - eTau.dXi.z,
eTau.dXi.y - eTau.dEta.x,
];
const curlB: readonly [number, number, number] = [
bTau.dEta.z - bTau.dZeta.y,
bTau.dZeta.x - bTau.dXi.z,
bTau.dXi.y - bTau.dEta.x,
];
const faraday: readonly [number, number, number] = [
curlE[0] + bTau.dTau.x,
curlE[1] + bTau.dTau.y,
curlE[2] + bTau.dTau.z,
];
const ampere: readonly [number, number, number] = [
curlB[0] - eTau.dTau.x,
curlB[1] - eTau.dTau.y,
curlB[2] - eTau.dTau.z,
];
const six = [...faraday, ...ampere];
for (let i = 0; i < 6; i++) {
const axis = i % 3 === 0 ? "x" : i % 3 === 1 ? "y" : "z";
const terms =
i < 3
? [curlE[i] ?? 0, bTau.dTau[axis], E0 * omega]
: [curlB[i % 3] ?? 0, eTau.dTau[axis], E0 * omega];
const tol = SR07_RESIDUAL_RELATIVE * maxAbs(terms) + SR07_RESIDUAL_FLOOR * E0 * omega;
const r = Math.abs(six[i] ?? 0);
if (r > (residuals[i] ?? 0)) residuals[i] = r;
if (r > maxResidual) maxResidual = r;
if (r > tol) allPassed = false;
}
}
return Object.freeze({
maxResidual,
residuals,
amplitudeFactor,
frequencyFactor,
gamma: γ,
passed: allPassed,
eventSeed: SR07_EVENT_SEED,
});
}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.
transformGaussianHistorical · src/physics/reference/fields.ts · this site’s source, as built · sha256:72f5c3896fe7018ea7fa631cd106ea1be8dc553a49f8c3ccb3bb21264bdb8f58
This function computes the listed outputs when it runs.
In words
Paper 3 works in Gaussian units, and there the transformation is symmetric between the two fields: each transverse component picks up v over c times the other's. The SI form of the same physics carries v in the electric line and v over c squared in the magnetic one. Nothing physical differs; the unit system moves the factors.
Implementation
export function transformGaussianHistorical(input: {
E: Vec3;
B: Vec3;
boost: number;
c?: number;
}): Readonly<{ E: Vec3; B: Vec3; beta: number }> {
const c = input.c ?? C_SI;
const v = input.boost;
const g = gamma(v / c);
if (g.status !== "value") {
return Object.freeze({ E: input.E, B: input.B, beta: Number.NaN });
}
const β = g.value;
const { E, B } = input;
const vOverC = v / c;
return Object.freeze({
beta: β,
E: Object.freeze({
x: E.x,
y: β * (E.y - vOverC * B.z),
z: β * (E.z + vOverC * B.y),
}),
B: Object.freeze({
x: B.x,
y: β * (B.y + vOverC * E.z),
z: β * (B.z - vOverC * E.y),
}),
});
}The explanation
Full explanation
Under the transformation of §3 the field equations keep their form only when the electric and magnetic components transform together, as §6 sets out. The laboratory reports the residuals of the transformed equations.
Show every step of the investigation
Change the frame speed and the field components, and read the residuals of the transformed equations. Compare the symbols printed in §6 with their modern names.
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.