Special relativity · Electrodynamics §6

Fields transform together, not as separate realities.

How do electric and magnetic descriptions change together under a boost, and what does a test charge experience in each frame?

Electrodynamics §6

Electric and magnetic frame change

Static worked example

Model note
  • Electric field (stationary system) (electricFieldStationary), Electric field (moving system) (electricFieldMoving), Magnetic field (stationary system) (magneticFieldStationary) and Magnetic field (moving system) (magneticFieldMoving): Host calculation, by the site's own reference code. Computed in fields.transformSI.
  • Field invariant: E dot B (fieldInvariantEDotB), Field invariant: E^2 - c^2 B^2 (fieldInvariantE2MinusC2B2), Field invariant E·B (moving system) (fieldInvariantEDotBMoving) and Field invariant E² − c²B² (moving system) (fieldInvariantE2MinusC2B2Moving): Host calculation, by the site's own reference code. Computed in fields.fieldInvariants.
  • Lorentz factor (lorentzFactor): Host calculation, by the site's own reference code. Computed in kinematics.gamma.
  • Charge velocity (stationary system) (chargeVelocityStationary) and Charge velocity (moving system) (chargeVelocityMoving): Host calculation, by the site's own reference code. Computed in fields.transformVelocity3D.
  • Transverse force (laboratory) (transverseForceLaboratory), Transverse force (comoving) (transverseForceComoving), Electric force on the charge (stationary system) (electricForceStationary), Electric force on the charge (moving system) (electricForceMoving), Magnetic force on the charge (stationary system) (magneticForceStationary) and Magnetic force on the charge (moving system) (magneticForceMoving): Host calculation, by the site's own reference code. Computed in fields.lorentzForce.
  • Force in the moving system, from the four-force (a modern check) (forceMovingFromFourForce), Residual of the force transformation (a modern check) (forceTransformationResidual) and dt′/dt along the particle (particleTimeJacobian): Host calculation, by the site's own reference code. Computed in host:three-force-transform-v1.
  • Computed from the settings last applied (settings revision 1, result 1).
  • Not modeled: field sources and currents; radiation and self-fields; radiation reaction; back-reaction on the field; media and polarization; nonuniform fields; accelerated observers.

Predict before the numbers

When a pure electric field in the y direction is described from a frame moving along x at 0.6c, what magnetic field appears?

Three relations the model could have

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

Set observer and fields
Description frame
Unit convention
Experiment settings the electric and magnetic field strengths

Changes here apply with Apply settings.

Worked example: seen from the frame moving at 0.6c, the electric field (0, 1, 0) V/m becomes (0, 1.25, 0) V/m and the magnetic field (0, 0, 0) T becomes (0, 0, −2.5 × 10⁻⁹) T.

Laboratory frame K, SI units

Fields in the laboratory frame KVector representation of electric field E, magnetic field B, and Lorentz force F under Lorentz transformation.xyE (1.00 V/m)F E² - c²B² = 1 | E·B = 0 | γ = 1.25

Transformation ledger

Comparison of electromagnetic field quantities across stationary (K) and moving (k) frames.
E (Stationary K)(0, 1, 0) V/m
E′ (Moving k)(0, 1.25, 0) V/m
B (Stationary K)(0, 0, 0) T
B′ (Moving k)(0, 0, −2.5017 × 10⁻⁹) T
Lorentz Factor γ1.25
Invariant E² − c²B²1 (V/m)²
Invariant E · B0 T·V/m
Laboratory force F(0, 1.6022 × 10⁻¹⁹, 0) N
Comoving force F′(0, 1.2817 × 10⁻¹⁹, 0) N

Whether a field is electric, magnetic or both depends on who describes it. A field that is purely electric for one observer has a magnetic part for an observer moving past, and the two descriptions agree about what a charge in it does.

§6 applies the transformation of §3 to the Maxwell–Hertz equations for empty space and asks what fields must hold in the moving system k if the equations are to keep their form there. For a boost with speed v along x, the components along the motion are unchanged, X′ = X and L′ = L, while the transverse ones mix: Y′ = β(Y − (v/V)N) and N′ = β(N − (v/V)Y), and likewise for Z and M. Einstein's β is the modern γ, and V is the speed of light. The lab's default is a pure electric field of 1 V/m along y and a boost of 0.6c, so γ = 1.25. In k the electric field is 1.25 V/m, and a magnetic field of −2.50 × 10−9 T along z appears where there was none. A charge at rest in K feels 1.60 × 10−19 N; in k it moves at −0.6c through both fields and feels 1.28 × 10−19 N, the value in K divided by γ. §6 then states the result in two ways. The old manner: a charge moving in a field feels, besides the electric force, an electromotive force equal, to first order in v/V, to its velocity crossed with the magnetic force and divided by the speed of light. The new manner: the force on a moving charge is the electric force found by transforming the field to a frame in which the charge is at rest. Let the charge move with k and the lab shows that force, 2.00 × 10−19 N, all of it electric. The electromotive force becomes an auxiliary concept, and the asymmetry between magnet and conductor from the introduction disappears. The ledger also prints two combinations that the boost leaves unchanged, E·B = 0 and E² − c²B² = 1 (V/m)², as a check on the arithmetic; §6 does not use them.

Modern qualifications

In §6 Einstein writes the electric force as (X, Y, Z), the magnetic force as (L, M, N), the speed of light as V and the modern γ as β, in units in which electric and magnetic forces have the same dimension. He fixes an undetermined factor ψ(v) to 1 by requiring the transformation and its inverse to agree and by symmetry. He calls the electromotive force an auxiliary concept, owed to the fact that electric and magnetic forces have no existence independent of the state of motion of the coordinate system, and says that questions about the seat of the electromotive force in unipolar machines lose their point. Lorentz's 1904 theory had already transformed the fields, as mathematical aids in an ether at rest. The invariants E·B and E² − c²B², and the treatment of the field as one object, come from Minkowski in 1908.

Not modeled: field sources and currents; radiation and self-fields; radiation reaction; back-reaction on the field; media and polarization; nonuniform fields; accelerated observers.

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.

evaluateSr08 · src/physics/reference/fields.ts · this site’s source, as built · sha256:43dfe57d5385e4353a8cd2585d794915b8880066aaea05223810c6c3b3daf7e0

This function computes the listed outputs when it runs.

In words

It transforms the fields, transforms the charge's velocity, and computes the Lorentz force in both descriptions, alongside the two field invariants that must come out the same in each. Everything a reader sees on this page comes from one call: the stationary and moving fields, the stationary and moving velocities, the transverse force in the laboratory and in the comoving frame, and the Lorentz factor that relates them.

Implementation

export function evaluateSr08(input: Sr08Input): Sr08Snapshot {
  const c = C_SI;
  const v = input.boost;
  const eventId = "event-test-charge-0";

  const packScalar = (
    key: keyof typeof SR08_ROWS,
    make: (id: string, unit: string, kind: string, owner: string) => ScientificResult,
  ) => {
    const r = SR08_ROWS[key];
    return make(r[0], r[1], r[2], r[3]);
  };

  const refuseAll = (reason: string, condition: string): Sr08Snapshot => {
    const out = (key: keyof typeof SR08_ROWS) =>
      packScalar(key, (id, unit, kind, owner) =>
        asOutside(id, unit, kind, owner, condition, reason),
      );
    return Object.freeze({
      beta: v / c,
      gamma: Number.NaN,
      electricFieldStationary: out("Em"),
      electricFieldMoving: out("Ec"),
      magneticFieldStationary: out("Bm"),
      magneticFieldMoving: out("Bc"),
      fieldInvariantEDotB: out("id"),
      fieldInvariantE2MinusC2B2: out("iv"),
      lorentzFactor: out("g"),
      chargeVelocityStationary: out("um"),
      chargeVelocityMoving: out("uc"),
      transverseForceLaboratory: out("Fm"),
      transverseForceComoving: out("Fc"),
      eventId,
    });
  };

  const inputsValid = [
    input.electricField.x,
    input.electricField.y,
    input.electricField.z,
    input.magneticField.x,
    input.magneticField.y,
    input.magneticField.z,
    input.chargeVelocity.x,
    input.chargeVelocity.y,
    input.chargeVelocity.z,
    input.boost,
    input.testCharge,
  ].every(Number.isFinite);

  if (!inputsValid) {
    return refuseAll(
      "All field, velocity, boost, and charge inputs must be finite numbers.",
      "finite inputs",
    );
  }

  if (Math.abs(v) >= c) {
    return refuseAll("Observer boost speed must satisfy |v| < c.", "|v| < c");
  }

  const uSpeed2 =
    input.chargeVelocity.x * input.chargeVelocity.x +
    input.chargeVelocity.y * input.chargeVelocity.y +
    input.chargeVelocity.z * input.chargeVelocity.z;
  if (uSpeed2 >= c * c) {
    return refuseAll("Test charge speed must satisfy |u| < c.", "|u| < c");
  }

  const beta = v / c;
  const g = gamma(beta);
  if (g.status !== "value") {
    return refuseAll("Lorentz factor undefined for |v| >= c.", "|v| < c");
  }
  const γ = g.value;

  const E0 = input.electricField;
  const B0 = input.magneticField;
  const u0 = input.chargeVelocity;
  const q = input.testCharge;

  // Transformed fields under boost v along x
  const transformedSI = transformSI({ E: E0, B: B0, boost: v, c });
  const Eprime = transformedSI.E;
  const Bprime = transformedSI.B;

  // Invariants
  const inv0 = fieldInvariants(E0, B0, c);

  // Transformed velocity of test charge
  const uprime = transformVelocity3D(u0, v, c);

  // Forces
  const F_lab = lorentzForce(q, E0, B0, u0);
  const F_comoving = lorentzForce(q, Eprime, Bprime, uprime);

  const valScalar = (key: keyof typeof SR08_ROWS, val: number) =>
    packScalar(key, (id, unit, kind, owner) => asValue(id, unit, kind, owner, val));
  const valVec = (key: keyof typeof SR08_ROWS, vec: Vec3) =>
    packScalar(key, (id, unit, kind, owner) => asVectorValue(id, unit, kind, owner, vec));

  return Object.freeze({
    beta,
    gamma: γ,
    electricFieldStationary: valVec("Em", E0),
    electricFieldMoving: valVec("Ec", Eprime),
    magneticFieldStationary: valVec("Bm", B0),
    magneticFieldMoving: valVec("Bc", Bprime),
    fieldInvariantEDotB: valScalar("id", inv0.eDotB),
    fieldInvariantE2MinusC2B2: valScalar("iv", inv0.e2MinusC2B2),
    lorentzFactor: valScalar("g", γ),
    chargeVelocityStationary: valVec("um", u0),
    chargeVelocityMoving: valVec("uc", uprime),
    transverseForceLaboratory: valVec("Fm", F_lab),
    transverseForceComoving: valVec("Fc", F_comoving),
    eventId,
  });
}

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.

transformSI · src/physics/reference/fields.ts · this site’s source, as built · sha256:f859d250805d361be89f725a650333f29b64903df68aee2219306b812b02a8fa

This function computes the listed outputs when it runs.

In words

This is § 6's transformation in modern SI letters. The components along the boost, E sub x and B sub x, pass through untouched. The transverse components mix: the new E sub y is gamma times (E sub y minus v times B sub z), and the new B sub y is gamma times (B sub y plus v times E sub z over c squared). A frame with no electric field at all therefore measures one, which is the whole content of the magnet-and-conductor observation the paper opens with.

Implementation

export function transformSI(input: {
  E: Vec3;
  B: Vec3;
  boost: number;
  c?: number;
}): Readonly<{ E: Vec3; B: Vec3; gamma: 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, gamma: Number.NaN });
  }
  const γ = g.value;
  const { E, B } = input;
  return Object.freeze({
    gamma: γ,
    E: Object.freeze({
      x: E.x,
      y: γ * (E.y - v * B.z),
      z: γ * (E.z + v * B.y),
    }),
    B: Object.freeze({
      x: B.x,
      y: γ * (B.y + (v * E.z) / (c * c)),
      z: γ * (B.z - (v * E.y) / (c * c)),
    }),
  });
}

Worked case (readable without JavaScript)

Consider a pure electric field in the stationary system K with Ey = 1 V/m and B = 0, viewed from a coordinate system k boosted along the x-axis at speed v = 0.6c (γ = 1.25).

Ey′=γ(Ey−vBz)=1.25 V/m,Bz′=−γvc2Ey=−0.75c≈−2.5017×10−9 T\begin{aligned}E'_y &= \gamma(E_y - v B_z) \\ &= 1.25\text{ V/m}, \\ B'_z &= -\gamma\frac{v}{c^2}E_y = -\frac{0.75}{c} \\ &\approx -2.5017\times 10^{-9}\text{ T}\end{aligned}

Both frames agree exactly on the Lorentz field invariants:

E2−c2B2=1.0 (V/m)2,E⋅B=0\begin{gathered}E^2 - c^2 B^2 = 1.0\text{ (V/m)}^2, \\ \mathbf{E}\cdot\mathbf{B} = 0\end{gathered}

A test charge q at rest in K feels the force Fy = qEy, which is 1.602×10⁻¹⁹ N for an elementary charge, in the laboratory frame. In the moving frame k the charge has velocity u′x = −0.6c and feels the transformed Lorentz force F′y = q(E′y − u′xB′z) = q(1.25 − 0.45) V/m = 0.8 × 1.602×10⁻¹⁹ N, since u′xB′z = (−0.6c)(−0.75/c) = 0.45 V/m. The force transformation F′y = Fy/γ gives the same 0.8 Fy, matching the kinematics of §6.

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