Annus Mirabilis · Interactive critical edition in preparation
Electric and magnetic frame change
Describe one field in two frames and compare what a test charge feels.
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 infields.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 infields.fieldInvariants. - Lorentz factor (
lorentzFactor): Host calculation, by the site's own reference code. Computed inkinematics.gamma. - Charge velocity (stationary system) (
chargeVelocityStationary) and Charge velocity (moving system) (chargeVelocityMoving): Host calculation, by the site's own reference code. Computed infields.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 infields.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 inhost: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?
The result appears when you choose, say you have one in mind, or skip.
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
Transformation ledger
| 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 · B | 0 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.
Take the lab's default. In the stationary system K there is an electric field of 1 V/m pointing along y and no magnetic field. The moving system k travels along x at v = 0.6c. First the factor: γ = 1/√(1 − v²/c²) = 1/√(1 − 0.36) = 1/√0.64 = 1/0.8 = 1.25. Now §6's formulas, written in SI units, where the magnetic field carries a factor of c. The component of E along the motion is unchanged, so E′x = 0. The y component becomes E′y = γ(Ey − vBz) = 1.25 × (1 − 0) = 1.25 V/m. The z component of the magnetic field becomes B′z = γ(Bz − vEy/c²) = 1.25 × (0 − 0.6c × 1/c²) = −0.75/c = −0.75/(2.998 × 108) = −2.50 × 10−9 T. So a field that was purely electric in K is electric and magnetic in k. Now place a charge q = 1.602 × 10−19 C at rest in K. There the force is qE = 1.602 × 10−19 × 1 = 1.60 × 10−19 N along y. In k the charge moves at u′ = −0.6c along x, so the force there is q(E′ + u′ × B′). The y component of u′ × B′ is −u′xB′z = −(−0.6c)(−0.75/c) = −0.45 V/m, so the total is 1.25 − 0.45 = 0.80 V/m, and the force is 0.80q = 1.28 × 10−19 N, smaller than in K by the factor 0.8 = 1/γ. This is not a contradiction. Force is momentum gained per unit time; the transverse momentum is the same in both frames, but the time between two events on the charge is longer in the frame in which it moves, so the force there is smaller. Next, put the charge at rest in k instead. There its velocity is zero, only the electric field acts, and the force is qE′ = 1.25q = 2.00 × 10−19 N: this is §6's new manner, the electric force in the charge's rest frame. In K the same charge moves at +0.6c through a field with no magnetic part, so the force there is qE = 1.60 × 10−19 N, again smaller by γ. Last, the check. E·B is 0 in K, and E′·B′ is also 0 in k, since E′ points along y and B′ along z. E² − c²B² is 1 in K, and in k it is 1.25² − c²(0.75/c)² = 1.5625 − 0.5625 = 1.
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)),
}),
});
}The explanation
Full explanation
Change the boost and watch the electric and magnetic components mix. The components differ from frame to frame, while the combinations E² − c²B² and E · B stay the same.
Show every step of the investigation
Start with a pure electric field, add a boost, and read the magnetic field that appears. Compare the transformed components with the two invariants, then place a test charge and compare the forces found in each frame.
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.