Special relativity · Electrodynamics §6

The field equations keep their form.

How do the Maxwell-Hertz equations keep their form under the transformation, and what must the electric and magnetic fields do?

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 in fields.
  • 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.
Equation and step
Try
Experiment settings printed or SI units, the validation wave, its polarization and boost
Unit layer

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.

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 symbols in paper 3, section 6
PrintedRole in this paperModern SI (labeled conversion)
Xelectric x in KEx
Yelectric y in KEy
Zelectric z in KEz
Lmagnetic x in K (not the speed of light)Bx
Mmagnetic y in KBy
Nmagnetic 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 γ.

Plane-wave Maxwell residuals in the moving frame (analytic derivatives; host calculation)
Form invariant?yes
Max residual0.000000
Faraday x, y, z0.000000; 0.000000; 0.000000
Ampere-Maxwell x, y, z0.000000; 0.000000; 0.000000
Amplitude factor γ(1 − β) for a +x wave0.5000000
Frequency factor0.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),
    }),
  });
}

Worked case (readable without JavaScript)

The printed layer is Gaussian, as in Annalen 1905. X, Y, Z are electric-field components. L, M, N are magnetic-field components. Einstein's β is the modern γ. V is the speed of light in this paper, not L.

1V∂X∂t=∂N∂y−∂M∂z\frac{1}{V}\frac{\partial X}{\partial t}=\frac{\partial N}{\partial y}-\frac{\partial M}{\partial z}
Explain this equation

After the section 3 chain rule and grouping, the same form holds in the moving frame for the combinations X, β(Y − (v/V)N), β(Z + (v/V)M) and L, β(M + (v/V)Z), β(N − (v/V)Y). A plane wave along +x at v = 0.6c has its amplitude and frequency transformed by the factor β(1 − v/V) = 1.25 × 0.4 = 1/2, in the paper's letters, where β is 1.25.

Embed this laboratory on another page. It starts from its worked defaults, not your current settings.