3  Die Maxwell-Gleichungen, Term für Term

Alles Elektrische und Magnetische auf der Welt — der Blitz und der Kompass, das Handynetz und das Licht dieser Seite — gehorcht vier Sätzen, die auf eine Postkarte passen. James Clerk Maxwell schrieb sie 1865 zusammen, und ihm fiel dabei etwas auf, das bis heute zu den schönsten Überraschungen der Physik gehört: Aus zwei unscheinbaren Konstanten, die man im Labor an Kondensatoren und Spulen misst, fällt eine Geschwindigkeit heraus. Die Geschwindigkeit. Am Ende dieses Kapitels rechnest du sie selbst aus — und prüfst nach, dass die Gleichungen jedem Lichtpuls genau dieses eine Tempo erzwingen.

Das Beste: Du hast schon alles in der Hand. Die vier Sätze sind genau zwei Quellen-Aussagen und zwei Wirbel-Aussagen — und Quellen (\(\nabla\cdot\)) und Wirbel (\(\nabla\times\)) sind seit Kapitel 2 deine Werkzeuge.

Lernziele

Nach diesem Kapitel kannst du …

  1. … die vier Maxwell-Gleichungen in je einem deutschen Satz wiedergeben und jeden Term benennen,
  2. … das Gauß-Gesetz numerisch prüfen: Der Fluss durch eine Hülle ist \(q/\varepsilon_0\) — egal welche Form und Größe die Hülle hat,
  3. … erklären, warum \(\nabla \cdot \vec{B} = 0\) bedeutet, dass Magnetfeldlinien weder Anfang noch Ende haben — und warum ein zersägter Magnet keine einzelnen Pole liefert,
  4. … Faraday- und Ampère-Gesetz als Wirbel-Aussagen deuten und beide numerisch verifizieren — inklusive des Verschiebungsstroms,
  5. … nachvollziehen, wie aus den zwei Wirbelgleichungen eine Wellengleichung wird, und \(c = 1/\sqrt{\varepsilon_0\mu_0}\) selbst ausrechnen.

3.1 Die vier Gleichungen auf einen Blick

Im Vakuum, mit Ladungen und Strömen als Akteuren:

\[ \begin{aligned} \textbf{(1)}\quad \nabla \cdot \vec{E} \;&=\; \frac{\rho}{\varepsilon_0} &&\text{Ladungen sind die Quellen des E-Feldes.}\\[4pt] \textbf{(2)}\quad \nabla \cdot \vec{B} \;&=\; 0 &&\text{Es gibt keine magnetischen Ladungen.}\\[4pt] \textbf{(3)}\quad \nabla \times \vec{E} \;&=\; -\,\frac{\partial \vec{B}}{\partial t} &&\text{Ein sich änderndes B wirbelt E.}\\[4pt] \textbf{(4)}\quad \nabla \times \vec{B} \;&=\; \mu_0 \vec{J} \;+\; \mu_0 \varepsilon_0 \frac{\partial \vec{E}}{\partial t} &&\text{Ströme — und ein sich änderndes E — wirbeln B.} \end{aligned} \]

Lies die Bausteine wie Vokabeln: \(\rho\) ist die Ladungsdichte (Coulomb pro Kubikmeter — wo wie viel Ladung sitzt), \(\vec{J}\) die Stromdichte (Ampere pro Quadratmeter — wo wie viel Strom fließt). \(\varepsilon_0\) und \(\mu_0\) sind die zwei Feldkonstanten aus der Einheitentabelle im Vorwort; sie legen fest, wie stark eine gegebene Ladung bzw. ein gegebener Strom den Raum mit Feld füllt. Und \(\partial/\partial t\) ist die Zeit-Version unserer Nachbar-Differenz: Feld jetzt minus Feld eben, geteilt durch den Zeitschritt.

Zwei Dinge fallen sofort auf. Erstens die Struktur: Gleichung (1) und (2) sagen, wo Felder entspringen — Gleichung (3) und (4) sagen, was Felder umrührt. Zweitens die gebrochene Symmetrie: Bei \(\vec{E}\) steht eine Quelldichte, bei \(\vec{B}\) eine Null. Diese Null ist eine der härtesten experimentellen Aussagen der Physik, und wir schauen sie uns gleich genauer an. Jetzt aber: jede Gleichung einzeln auf den Prüfstand.

3.2 Gleichung 1: Ladungen sind die Quellen des E-Feldes

Die punktweise Form kennst du wörtlich aus der Refutation von Kapitel 2: Das Coulomb-Feld ist überall quellenfrei, außer wo die Ladung sitzt — genau das sagt \(\nabla \cdot \vec{E} = \rho/\varepsilon_0\). Mit dem Satz von Gauß aus Kapitel 2 wird daraus eine Aussage über Hüllen: Der Fluss des E-Feldes durch eine geschlossene Hülle ist die Summe der eingeschlossenen Quellstärke,

\[ \oint_{\text{Hülle}} \vec{E} \cdot \vec{n}\; \mathrm{d}A \;=\; \frac{q_{\text{innen}}}{\varepsilon_0}. \]

Das ist eine erstaunlich dreiste Behauptung: Die Hülle darf beliebig groß und beliebig schief sein, die Ladung darf irgendwo darin sitzen — der Fluss ist immer derselbe Wert \(q/\varepsilon_0\). Und sitzt die Ladung außerhalb, ist er exakt null.

WichtigVorhersage-Punkt

Bevor du weiterliest: Wir verdoppeln gleich den Radius der Hülle um eine Ladung. Die Hüllfläche vervierfacht sich — was macht der Fluss? Und warum? (Tipp: Was macht das Feld bei doppeltem Abstand?)

Erstmals rechnen wir in echten SI-Einheiten: eine Ladung von \(q = 1\,\text{nC}\) (Nanocoulomb — etwa die Reibungsladung eines Luftballons), also Soll-Fluss \(q/\varepsilon_0 \approx 112{,}94\) V·m. Wir tasten die Kugeloberfläche mit einem Gitter aus Punkten ab und summieren \(\vec{E}\cdot\vec{n}\,\mathrm{d}A\) — das Skalarprodukt aus Kapitel 1 fragt an jedem Punkt: „Wie viel Feld zeigt durch die Hülle hindurch?”

import numpy as np
from scipy.constants import epsilon_0

Q = 1e-9                                   # 1 nC
print(f"Soll: q/ε₀ = {Q/epsilon_0:.4f} V·m\n")

def fluss_durch_kugel(radius, ladungsort, n=400):
    """∮ E·n dA über eine Kugel um den Ursprung (abgetastet in θ, φ)."""
    theta, phi = np.linspace(0, np.pi, n), np.linspace(0, 2*np.pi, 2*n)
    # indexing="ij": Achse 0 = θ, Achse 1 = φ — meshgrid würde die
    # beiden sonst in Bild-Konvention (Zeile = y) vertauschen
    TH, PH = np.meshgrid(theta, phi, indexing="ij")
    px = radius*np.sin(TH)*np.cos(PH)          # Punkte auf der Kugel
    py = radius*np.sin(TH)*np.sin(PH)
    pz = radius*np.cos(TH)
    dx, dy, dz = px-ladungsort[0], py-ladungsort[1], pz-ladungsort[2]
    r = np.sqrt(dx**2 + dy**2 + dz**2)
    vor = Q/(4*np.pi*epsilon_0)/r**3           # Coulomb: E = q r̂ /(4πε₀ r²)
    # E·n mal Flächenelement dA = r² sinθ dθ dφ
    integrand = vor*(dx*px + dy*py + dz*pz)/radius * radius**2*np.sin(TH)
    return np.trapezoid(np.trapezoid(integrand, phi, axis=1), theta)

for name, radius, ort in [
        ("Kugel r = 1 m, Ladung mittig      ", 1.0, (0, 0, 0)),
        ("Kugel r = 1 m, Ladung außermittig ", 1.0, (0.3, 0.2, -0.4)),
        ("Kugel r = 2 m, Ladung außermittig ", 2.0, (0.3, 0.2, -0.4)),
        ("Kugel r = 1 m, Ladung außerhalb!  ", 1.0, (1.5, 0, 0))]:
    print(f"{name}: {fluss_durch_kugel(radius, ort):9.4f} V·m")
Soll: q/ε₀ = 112.9409 V·m

Kugel r = 1 m, Ladung mittig      :  112.9403 V·m
Kugel r = 1 m, Ladung außermittig :  112.9403 V·m
Kugel r = 2 m, Ladung außermittig :  112.9403 V·m
Kugel r = 1 m, Ladung außerhalb!  :   -0.0001 V·m

Viermal dieselbe Frage, dreimal exakt dieselbe Antwort — und einmal null. Die Auflösung der Vorhersage: Bei doppeltem Radius hat die Hülle die vierfache Fläche, aber das Feld ist wegen \(1/r^2\) auf ein Viertel gefallen — das Produkt bleibt. Das Gauß-Gesetz ist genau diese Buchhaltung in ihrer allgemeinsten Form: Was die Quelle hergibt, muss durch jede Hülle hindurch, die sie umschließt. Das Kapitel-Programm prüft zusätzlich einen Würfel — gleiche Ladung, gleicher Fluss, denn auf die Form kommt es nicht an.

3.3 Gleichung 2: Es gibt keine magnetischen Ladungen

Dieselbe Buchhaltung für das Magnetfeld ergibt — null. Immer. Durch jede geschlossene Hülle der Welt tritt netto kein Magnetfeld: \(\nabla \cdot \vec{B} = 0\), das Feld \(\vec{B}\) ist überall quellenfrei. Niemand hat je ein Teilchen gefunden, aus dem Magnetfeldlinien entspringen, so wie das elektrische Feld aus einem Elektron entspringt.

WarnungNaheliegende Vermutung

Vermutung: „Doch, gibt es: Der Nordpol eines Magneten ist die Quelle — dort kommen die Feldlinien heraus —, der Südpol ist die Senke.”

Warum sie naheliegt: Von außen betrachtet sieht ein Stabmagnet exakt so aus wie das Ladungspaar aus Kapitel 1: Linien quellen am Nordpol, münden am Südpol. Eisenfeilspäne zeichnen genau dieses Bild.

Was stattdessen stimmt: Die Linien hören am Pol nicht auf — sie laufen im Inneren des Magneten weiter, vom Süd- zurück zum Nordpol. Jede Magnetfeldlinie ist eine geschlossene Schleife ohne Anfang und Ende; die „Pole” sind nur die Stellen, wo die Schleifen das Material verlassen. Deshalb scheitert auch jeder Versuch, einen Pol zu isolieren: Zersägst du den Magneten, bekommst du keine getrennten Quell- und Senken-Hälften, sondern zwei vollständige Magnete mit je zwei Polen — bis hinunter zum letzten Atom.

Den Unterschied kann man sehen. Wir stellen das elektrische Zwei-Ladungs-Feld aus Kapitel 1 neben sein magnetisches Gegenstück: zwei gegenläufige Ströme (eine Leiterschleife, von der Seite betrachtet — Strom kommt links aus dem Bild heraus und geht rechts hinein):

import matplotlib.pyplot as plt

x, y = np.meshgrid(np.linspace(-2, 2, 300), np.linspace(-2, 2, 300))

def punktquelle(q, ort):                 # E ~ q r̂/r  (Ebene, wie Kap. 1/2)
    dx, dy = x - ort[0], y - ort[1]
    r2 = np.maximum(dx**2 + dy**2, 1e-9)
    return q*dx/r2, q*dy/r2

def drahtfeld(strom, ort):               # B ~ I φ̂/r  (Draht senkrecht zur Ebene)
    dx, dy = x - ort[0], y - ort[1]
    r2 = np.maximum(dx**2 + dy**2, 1e-9)
    return -strom*dy/r2, strom*dx/r2

ex, ey = (a+b for a, b in zip(punktquelle(+1, (-0.7, 0)),
                              punktquelle(-1, (+0.7, 0))))
bx, by = (a+b for a, b in zip(drahtfeld(+1, (-0.7, 0)),
                              drahtfeld(-1, (+0.7, 0))))

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9.2, 4.3))
for ax, (u, v), titel in [(ax1, (ex, ey), "E-Feld zweier Ladungen ±q"),
                          (ax2, (bx, by), "B-Feld zweier Ströme ±I")]:
    ax.streamplot(x, y, u, v, color="tab:blue", density=1.3,
                  linewidth=0.8, arrowsize=1.1)
    ax.plot(-0.7, 0, "o", color="red", markersize=10)
    ax.plot(+0.7, 0, "o", color="blue", markersize=10)
    ax.set_title(titel, fontsize=11)
    ax.set_aspect("equal"); ax.set_xticks([]); ax.set_yticks([])
plt.tight_layout(); plt.show()
Abbildung 3.1: Gleiche Anordnung, fundamental verschiedene Felder: Elektrische Feldlinien (links) beginnen und enden auf den Ladungen. Magnetfeldlinien (rechts) umkreisen die Ströme und schließen sich — sie haben weder Anfang noch Ende (div B = 0).

Links das vertraute Bild: Linien starten auf der positiven und enden auf der negativen Ladung. Rechts dagegen startet und endet nichts — jede Linie kreist um einen Strom oder umschlingt beide. Weit weg sehen beide Bilder zum Verwechseln ähnlich aus (deshalb ist die Vermutung oben so naheliegend!), aber an den Quellpunkten selbst trennt sich die Welt: E entspringt, B umschlingt.

Wer den Code aufmerksam liest, entdeckt zwischen den beiden Bildern noch eine versteckte Verwandtschaft. Die zwei Feld-Funktionen unterscheiden sich nur in einer Zeile:

punktquelle:  ( q·dx/r²,  q·dy/r²)     # zeigt vom Quellpunkt weg
drahtfeld:    (-I·dy/r²,  I·dx/r²)     # zeigt quer dazu

Aus dem Pfeil \((a, b)\) wird der Pfeil \((-b, a)\) — und das ist eine Drehung um exakt \(90°\), denn das Skalarprodukt der beiden ist \(a \cdot (-b) + b \cdot a = 0\), und Skalarprodukt null heißt senkrecht (Kapitel 1). Das B-Feld eines Drahtes ist also das E-Feld einer Punktladung, an jedem Ort um \(90°\) gedreht. Diese Eigenschaft überlebt sogar das Addieren: Zwei Pfeile erst drehen und dann addieren gibt dasselbe wie erst addieren und dann drehen. Solange die Ströme an denselben Orten sitzen wie die Ladungen (und ihre Stärken im selben Verhältnis stehen), ist deshalb in jedem Bildpunkt das Gesamt-B das um \(90°\) gedrehte Gesamt-E — die beiden Linienscharen müssen sich überall im rechten Winkel kreuzen. Das können wir sehen und messen: Wir legen beide Bilder übereinander und lassen an jedem Gitterpunkt den Winkel-Test aus Kapitel 1 laufen, den Kosinus aus dem Skalarprodukt. Erwartung: null, überall.

# von oben: x, y, ex, ey, bx, by (die Felder aus dem Doppelbild)
fig, ax = plt.subplots(figsize=(5.2, 5.2))
ax.streamplot(x, y, ex, ey, color="tab:blue", density=0.9,
              linewidth=0.8, arrowsize=1.0)
ax.streamplot(x, y, bx, by, color="tab:orange", density=0.9,
              linewidth=0.8, arrowsize=1.0)
ax.plot(-0.7, 0, "o", color="red", markersize=10)
ax.plot(+0.7, 0, "o", color="blue", markersize=10)
ax.set_title("E (blau) und B (orange): überall senkrecht", fontsize=11)
ax.set_aspect("equal"); ax.set_xticks([]); ax.set_yticks([])
plt.tight_layout(); plt.show()

# Winkel-Test (Kapitel 1): cos = (E·B) / (|E|·|B|) an jedem Gitterpunkt;
# der winzige Nenner-Schutz fängt 0/0 an den Quellpunkten selbst ab
betrag = np.maximum(np.hypot(ex, ey) * np.hypot(bx, by), 1e-30)
cos_winkel = (ex * bx + ey * by) / betrag
print(f"größter |cos| zwischen E und B im Bild: "
      f"{np.abs(cos_winkel).max():.1e}   (senkrecht = 0)")
Abbildung 3.2: Beide Teilbilder übereinandergelegt: das E-Feld der Ladungen (blau) und das B-Feld der Ströme (orange) kreuzen sich überall im rechten Winkel — B ist in jedem Punkt das um 90° gedrehte E. Die Messung darunter bestätigt es: Der größte Kosinus eines Kreuzungswinkels im ganzen Bild ist exakt null, nicht bloß ungefähr.
größter |cos| zwischen E und B im Bild: 0.0e+00   (senkrecht = 0)

Sonst feiern wir in diesem Buch schon Werte um \(10^{-16}\) als „exakt bis auf Rundung” — hier steht eine blanke Null, und auch das hat einen Grund: Die \(90°\)-Drehung vertauscht nur die beiden Komponenten und kippt ein Vorzeichen, dabei wird nichts gerundet. Im Skalarprodukt hebt sich dann Term für Term dasselbe Produkt mit umgekehrtem Vorzeichen weg — das Senkrechtstehen ist keine Näherung, sondern Algebra, und der Computer führt sie fehlerfrei aus. Und diese Drehung ist mehr als ein Kuriosum: Sie ist der geometrische Grund, warum Gleichung 2 eine Null trägt, wo Gleichung 1 ein \(\rho\) hat. Dreht man nämlich ein Feld in jedem Punkt um \(90°\), tauschen „entspringen” und „umschlingen” die Rollen — aus einem Feld mit Quellen und ohne Wirbel (E der ruhenden Ladungen) wird ein Feld ohne Quellen und mit Wirbeln (B der stetigen Ströme). Aber Vorsicht mit der Verallgemeinerung: Dieses Überall-Senkrecht ist die Signatur dieser Paarung — Ströme exakt an den Ladungsorten, in unserer flachen 2D-Welt. Es ist kein Naturgesetz „E steht immer senkrecht auf B”: Stell den Draht woandershin als die Ladung, und schon kreuzen sich die Linien schief. Bei der Lichtwelle wird uns das Senkrechtstehen wieder begegnen (Kapitel 4) — dort aus einem ganz anderen Grund.

WichtigVorhersage-Punkt

Im Film unten wandern die beiden Quellpunkte auf krummen Bahnen umher — Ladung und Strom bleiben dabei jeweils zusammen. Die Feldbilder verbiegen sich von Bild zu Bild kräftig. Was machen die Kreuzungswinkel: wackeln sie mit, oder bleiben sie bei \(90°\)?

Die Drehungs-Algebra von oben kennt die Antwort: Sie hat nirgends benutzt, wo die Punkte sitzen — nur, dass Ladungen und Ströme beisammen bleiben. Also bleibt jeder Kreuzungswinkel ein rechter, egal wie die Bahnen verlaufen; der Titel misst in jedem Bild nach. (Ehrlichkeitshalber: Der Film blättert durch lauter statische Anordnungen — wirklich bewegte Ladungen strahlen und ziehen einen Schweif aus Wellen hinter sich her, das ist Stoff für Kapitel 21.)

Code der Animation (nur in der HTML-Fassung)
# von oben: np, plt, x, y, punktquelle(), drahtfeld()
# animation.FuncAnimation: ruft die Zeichenfunktion einmal pro Filmbild auf
from matplotlib import animation
# IPython.display.HTML: bettet den fertigen Film-Player in die Seite ein
from IPython.display import HTML

def beide_felder(ort1, ort2):
    """E von ±q und B von ±I, beide Quellpaare an denselben Orten."""
    ex, ey = (a + b for a, b in zip(punktquelle(+1, ort1),
                                    punktquelle(-1, ort2)))
    bx, by = (a + b for a, b in zip(drahtfeld(+1, ort1),
                                    drahtfeld(-1, ort2)))
    return ex, ey, bx, by

fig_a, ax_a = plt.subplots(figsize=(4.8, 4.8))

def zeichne(j):
    alpha = 2 * np.pi * j / 24
    ort1 = (-0.7 + 0.3 * np.cos(alpha), 0.5 * np.sin(alpha))
    ort2 = (0.7 - 0.3 * np.cos(alpha), 0.3 * np.sin(2 * alpha))
    ex, ey, bx, by = beide_felder(ort1, ort2)
    betrag = np.maximum(np.hypot(ex, ey) * np.hypot(bx, by), 1e-30)
    cos_max = np.abs((ex * bx + ey * by) / betrag).max()
    ax_a.clear()
    ax_a.streamplot(x, y, ex, ey, color="tab:blue", density=0.9,
                    linewidth=0.7, arrowsize=0.9)
    ax_a.streamplot(x, y, bx, by, color="tab:orange", density=0.9,
                    linewidth=0.7, arrowsize=0.9)
    ax_a.plot(*ort1, "o", color="red", markersize=9)
    ax_a.plot(*ort2, "o", color="blue", markersize=9)
    ax_a.set_title(f"größter |cos| zwischen E und B: {cos_max:.1e}",
                   fontsize=10)
    ax_a.set_aspect("equal"); ax_a.set_xticks([]); ax_a.set_yticks([])

# interval: Millisekunden pro Filmbild
anim = animation.FuncAnimation(fig_a, zeichne, frames=24, interval=160)
plt.close(fig_a)                  # das leere Grundgerüst nicht extra zeigen
# to_jshtml: der Film samt Play/Pause/Einzelschritt-Knöpfen, als HTML
HTML(anim.to_jshtml(default_mode="loop"))

3.4 Gleichung 3: Wandel im Magnetfeld wirbelt das E-Feld

Bis hierher war alles statisch. Gleichung (3) — das Induktionsgesetz von Faraday — bringt die Zeit ins Spiel: Wo sich \(\vec{B}\) ändert, bekommt das elektrische Feld Rotation. Das Paddelrad aus Kapitel 2 würde sich drehen — und ein Elektron, das auf einer Kreisbahn sitzt, wird herumgeschoben. Genau davon lebt der Fahrraddynamo (Magnet dreht sich, \(\vec{B}\) durch die Spule ändert sich, das gewirbelte E-Feld treibt den Strom) und das Induktionsfeld deines Herdes.

Prüfen wir die Gleichung punktweise — mit den Werkzeugen aus Kapitel 2. Eine Spule mit Radius \(R = 0{,}5\) m erzeugt in ihrem Inneren ein Magnetfeld, das wir gleichmäßig anwachsen lassen: \(\partial B_z/\partial t = 0{,}5\) T/s, außerhalb null. Das zugehörige induzierte E-Feld wirbelt um die Spulenachse (aus Symmetriegründen auf Kreisen). Faraday verlangt: \((\nabla \times \vec{E})_z\) muss innerhalb der Spule exakt \(-0{,}5\) sein und außerhalb exakt null — obwohl das E-Feld selbst auch außerhalb kräftig ist!

R_SPULE, K = 0.5, 0.5                      # Spulenradius (m), dB/dt (T/s)
x, y = np.meshgrid(np.linspace(-1.2, 1.2, 400), np.linspace(-1.2, 1.2, 400))
dx = x[0, 1] - x[0, 0]
r = np.maximum(np.hypot(x, y), 1e-9)

# Induziertes E: innen wächst es mit r, außen fällt es mit 1/r.
# np.where(bedingung, a, b): elementweise a, wo die Bedingung gilt — sonst b
e_phi = np.where(r < R_SPULE, -K*r/2, -K*R_SPULE**2/(2*r))
ex, ey = e_phi*(-y/r), e_phi*(x/r)         # tangential angesetzt

rot_e = np.gradient(ey, dx, axis=1) - np.gradient(ex, dx, axis=0)

fig, ax = plt.subplots(figsize=(5.6, 4.6))
bild = ax.imshow(rot_e, extent=(-1.2, 1.2, -1.2, 1.2), origin="lower",
                 cmap="RdBu_r", vmin=-0.6, vmax=0.6)
s = (slice(None, None, 25), slice(None, None, 25))
ax.quiver(x[s], y[s], ex[s], ey[s], color="k", scale=3)
ax.add_patch(plt.Circle((0, 0), R_SPULE, fill=False, ls="--", color="k"))
fig.colorbar(bild, label="(∇×E)$_z$  in V/m²")
ax.set_xlabel("x (m)"); ax.set_ylabel("y (m)")
ax.set_title("Induktion: rot E = −∂B/∂t")
ax.set_aspect("equal"); plt.tight_layout(); plt.show()

innen, aussen = r < 0.8*R_SPULE, (r > 1.2*R_SPULE) & (r < 1.0)
print(f"rot E innen : {np.mean(rot_e[innen]):+.4f}   (Soll: −∂B/∂t = {-K})")
print(f"rot E außen : {np.mean(rot_e[aussen]):+.6f}   (Soll: 0)")
Abbildung 3.3: Punktweise Probe von Faraday: Das induzierte E-Feld (Pfeile) wirbelt auch weit außerhalb der Spule — aber seine Rotation (Farbe) ist nur dort von null verschieden, wo sich B tatsächlich ändert: innerhalb der Spule (gestrichelter Kreis), mit dem Wert −∂B/∂t.
rot E innen : -0.5000   (Soll: −∂B/∂t = -0.5)
rot E außen : -0.000000   (Soll: 0)

Beide Werte sitzen. Beachte die Pointe am Rand des Bildes: Außerhalb der Spule gibt es ein durchaus starkes, im Kreis laufendes E-Feld — aber keine Rotation. Das ist exakt der Strudel aus Übung 2.4: Das Feld fällt mit \(1/r\), und das Paddelrad bleibt still. Die ganze Wirbelstärke konzentriert sich dort, wo \(\vec{B}\) sich wirklich ändert. Faraday ist eine lokale Aussage.

Das Minuszeichen hat übrigens einen Ehrentitel (Lenz’sche Regel) und eine Lebensaufgabe: Es sorgt dafür, dass induzierte Felder ihrer Ursache entgegenwirken. In Übung 3.2 überlegst du, was ohne das Minus passieren würde.

In dieser HTML-Fassung kannst du an Faradays Reglern selbst drehen — die folgende Zelle ist editierbar und läuft per Run-Knopf (oder Strg+Enter) im Browser. Drei Aufträge, jeweils mit Ansage vorher: Drehe das Vorzeichen um (DBDT = -0.5: das B-Feld nimmt jetzt ab — in welche Richtung wirbelt E dann? Das ist Lenz, live), verdopple die Änderungsrate (DBDT = 1.0 — skaliert die Rotation mit?), und vergrößere die Spule (R_SPULE = 0.8 — ändert sich der Wert der Rotation innerhalb, oder nur das Gebiet?):

3.5 Gleichung 4: Ströme wirbeln das B-Feld — und wandelnde E-Felder auch

Der erste Teil ist das Ampère-Gesetz, und du hast es in Übung 2.4 schon in den Händen gehalten: Das Magnetfeld umkreist den Strom, und die Zirkulation entlang einer Schleife misst, wie viel Strom hindurchsticht. In SI:

\[ \oint \vec{B} \cdot \mathrm{d}\vec{l} \;=\; \mu_0 \, I_{\text{innen}}. \]

WichtigVorhersage-Punkt

Bevor du weiterliest: Zwei parallele Drähte tragen \(+1\) A und \(-1\) A (hin und zurück — ein ganz normales Kabel!). Was misst eine Zirkulationsschleife, die beide Drähte umschließt? Und was eine, die daneben liegt und keinen umschließt?

from scipy.constants import mu_0

DRAEHTE = [(-0.5, 0.0, +1.0), (+0.5, 0.0, -1.0)]   # (x, y, Strom in A)

def zirkulation(mitte, radius, n=4000):
    """∮ B·dl um einen Kreis, B = Summe der Drahtfelder µ₀I/(2πr)·φ̂."""
    t = np.linspace(0, 2*np.pi, n)
    px, py = mitte[0] + radius*np.cos(t), mitte[1] + radius*np.sin(t)
    bx, by = 0.0, 0.0
    for wx, wy, strom in DRAEHTE:
        dx_, dy_ = px - wx, py - wy
        r2 = dx_**2 + dy_**2
        bx += -mu_0*strom/(2*np.pi) * dy_/r2
        by += +mu_0*strom/(2*np.pi) * dx_/r2
    return np.trapezoid((-bx*np.sin(t) + by*np.cos(t))*radius, t)

for name, mitte, radius in [("um den +1-A-Draht", (-0.5, 0), 0.3),
                            ("um beide Drähte  ", (0, 0),    1.5),
                            ("um keinen Draht  ", (0, 1.5),  0.4)]:
    print(f"Schleife {name}: ∮B·dl = {zirkulation(mitte, radius):+.4e} T·m"
          f"   (µ₀·1A = {mu_0:+.4e})")
Schleife um den +1-A-Draht: ∮B·dl = +1.2566e-06 T·m   (µ₀·1A = +1.2566e-06)
Schleife um beide Drähte  : ∮B·dl = +2.6470e-23 T·m   (µ₀·1A = +1.2566e-06)
Schleife um keinen Draht  : ∮B·dl = -3.3087e-24 T·m   (µ₀·1A = +1.2566e-06)

Um den einzelnen Draht: exakt \(\mu_0 \cdot 1\,\text{A}\). Um beide: null — die Ströme heben sich auf, und genau deshalb sind Kabel, in denen Hin- und Rückleiter dicht beieinander liegen, nach außen magnetisch fast unsichtbar. Um keinen: null, egal wie stark das Feld auf der Schleife selbst ist.

Aber das Ampère-Gesetz allein hat ein Loch, und Maxwells Flicken dafür ist der eigentliche Geniestreich. Betrachte einen Kondensator, der gerade auflädt: Strom fließt durch den Draht, also wirbelt ein B-Feld um den Draht. Zwischen den Platten aber fließt kein Strom — dort wandert keine einzige Ladung über den Spalt. Hört das B-Feld dort schlagartig auf? Maxwells Antwort: Nein — denn zwischen den Platten wächst das elektrische Feld, und ein wachsendes E-Feld wirbelt das Magnetfeld genauso wie ein Strom. Das ist der zweite Term, \(\mu_0\varepsilon_0\,\partial\vec{E}/\partial t\), der Verschiebungsstrom. Ob die Buchhaltung aufgeht, verrät ein Dreizeiler:

# von oben: epsilon_0 (Import aus scipy.constants, Gauß-Abschnitt)
I = 1.0                  # Ladestrom (A)
A = 0.01                 # Plattenfläche (m²) — 10 cm × 10 cm
# Plattenkondensator: E = Q/(ε₀A)  →  dE/dt = I/(ε₀A)
dE_dt = I/(epsilon_0*A)
print(f"dE/dt zwischen den Platten : {dE_dt:.3e} V/(m·s)")
print(f"Verschiebungsstrom ε₀·dE/dt·A : {epsilon_0*dE_dt*A:.6f} A")
dE/dt zwischen den Platten : 1.129e+13 V/(m·s)
Verschiebungsstrom ε₀·dE/dt·A : 1.000000 A

Der „Strom aus wachsendem Feld” zwischen den Platten ist exakt so groß wie der Ladestrom im Draht — das B-Feld läuft nahtlos über den Spalt hinweg, als wäre der Draht nie unterbrochen. Beachte die Größenordnung: Über zehn Billionen Volt pro Meter und Sekunde muss das Feld zulegen, um ein einziges Ampere zu vertreten. Deshalb fiel dieser Term niemandem im Labor auf — Maxwell fand ihn nicht durch Messen, sondern weil die Gleichungen ohne ihn unstimmig sind. Und dieser un-messbar scheinende Term ist der Schlüssel zu allem, was jetzt kommt.

3.6 Und daraus fällt: das Licht

Schau dir die Gleichungen (3) und (4) im leeren Raum an (\(\rho = 0\), \(\vec{J} = 0\) — keine Ladung weit und breit):

\[ \nabla \times \vec{E} = -\frac{\partial \vec{B}}{\partial t}, \qquad \nabla \times \vec{B} = \mu_0\varepsilon_0\,\frac{\partial \vec{E}}{\partial t}. \]

Ein sich änderndes \(\vec{B}\) erzeugt ein wirbelndes \(\vec{E}\). Dieses \(\vec{E}\) ändert sich dabei selbst — und erzeugt (Verschiebungsstrom!) ein wirbelndes \(\vec{B}\). Das sich ändert. Und wieder \(\vec{E}\) wirbelt. Die beiden Felder reichen sich gegenseitig weiter, ganz ohne Ladungen und Drähte — eine Kettenreaktion, die durch den Raum läuft.

Wie schnell? Machen wir es eindimensional konkret: Eine Störung läuft in x-Richtung, \(E\) zeigt in y, \(B\) in z, beide hängen nur von \(x\) und \(t\) ab. Dann bleibt von den beiden Rotationen je ein einziger Term übrig, und die Gleichungen werden zum Pingpong-Paar

\[ \frac{\partial E}{\partial x} = -\frac{\partial B}{\partial t}, \qquad -\frac{\partial B}{\partial x} = \mu_0\varepsilon_0\,\frac{\partial E}{\partial t}. \]

Leite die erste nach \(x\) ab, die zweite nach \(t\), und setze ineinander ein — \(B\) fällt heraus:

\[ \frac{\partial^2 E}{\partial x^2} \;=\; \mu_0\varepsilon_0\, \frac{\partial^2 E}{\partial t^2}. \]

Das ist eine Wellengleichung. Sie wird von jedem Profil \(f(x - vt)\) gelöst, das unverformt mit dem Tempo \(v\) davonläuft — aber nur, wenn \(v^2 = 1/(\mu_0\varepsilon_0)\). Die Gleichungen diktieren das Tempo. Rechnen wir es aus — aus den zwei Konstanten, die mit Licht scheinbar nichts zu tun haben:

WichtigVorhersage-Punkt

Bevor du die Zelle liest: \(\varepsilon_0 \approx 8{,}854 \cdot 10^{-12}\) As/(Vm) stammt aus Kondensator-Messungen, \(\mu_0 \approx 1{,}257\cdot 10^{-6}\) Vs/(Am) aus Strom-Kraft-Messungen. Was schätzt du, welche Zahl \(1/\sqrt{\varepsilon_0\mu_0}\) ergibt?

# von oben: epsilon_0, mu_0 (Importe aus scipy.constants)
from scipy.constants import c
print(f"1/sqrt(ε₀·µ₀) = {1/np.sqrt(epsilon_0*mu_0):,.0f} m/s")
print(f"Lichtgeschwindigkeit (Messwert) = {c:,.0f} m/s")
1/sqrt(ε₀·µ₀) = 299,792,458 m/s
Lichtgeschwindigkeit (Messwert) = 299,792,458 m/s

Die Lichtgeschwindigkeit. Auf alle Stellen. Zwei Laborkonstanten über Kondensatoren und Spulen, und heraus fällt das Tempo des Lichts — das war Maxwells Moment im Jahr 1865, und seine Schlussfolgerung war so kühn wie unausweichlich: Licht ist eine elektromagnetische Welle.

Zum Abschluss drehen wir den Spieß um und lassen die Gleichungen selbst entscheiden. Wir schicken einen Gauß-Puls \(E = f(x - vt)\), \(B = E/c\) mit verschiedenen Tempi \(v\) in beide 1D-Gleichungen und messen mit den zentralen Differenzen aus Kapitel 2, wie stark er sie verletzt:

X = np.linspace(-10, 10, 2001)
DX = X[1] - X[0]

def residuum(v):
    """Relative Verletzung beider 1D-Gleichungen durch f(x − v·t)."""
    dt = DX/(4*c)
    def e(t): return np.exp(-((X - v*t)/1.0)**2)
    de_dx = np.gradient(e(0.0), DX)
    db_dt = (e(dt) - e(-dt))/(2*dt)/c          # B = E/c
    r1 = np.max(np.abs(de_dx + db_dt))/np.max(np.abs(de_dx))
    db_dx = de_dx/c
    de_dt = (e(dt) - e(-dt))/(2*dt)
    r2 = np.max(np.abs(db_dx + mu_0*epsilon_0*de_dt))/np.max(np.abs(db_dx))
    return max(r1, r2)

tempi = np.linspace(0.8, 1.2, 81)
fig, ax = plt.subplots(figsize=(6.0, 3.6))
ax.semilogy(tempi, [residuum(v*c) for v in tempi], "o-", markersize=3)
ax.axvline(1.0, color="gray", lw=0.8, ls="--")
ax.set_xlabel("Puls-Tempo v / c")
ax.set_ylabel("Verletzung der Gleichungen")
plt.tight_layout(); plt.show()
Abbildung 3.4: Der Maxwell-Prüfstand: Ein Puls f(x − v·t) verletzt die beiden Wirbelgleichungen (Residuum, logarithmisch) — außer bei exakt v = c. Die Gleichungen erzwingen das Lichttempo.

Ein scharfer Trichter, drei Größenordnungen tief, mit der Spitze bei exakt \(v = c\) (der Bodensatz von \(\sim 10^{-4}\) ist unser Diskretisierungsfehler — du weißt seit Kapitel 2, wie er schrumpft). Zu langsam? Verboten. Zu schnell? Verboten. Von allen denkbaren Tempi lassen die Maxwell-Gleichungen für diese Welle genau eines zu.

Das Kapitel-Programm programme/kap03/kap03_maxwell_pruefstand.py bündelt alle Tests dieses Kapitels — Gauß-Hüllen (inklusive Würfel), Ampère-Schleifen und den Tempo-Trichter — mit assert-Schranken zum Selbst-Ausführen und Umbauen.

TippMerkkasten
  • Maxwell = zwei Quellen-Aussagen + zwei Wirbel-Aussagen: Ladungen sind Quellen von \(\vec{E}\); \(\vec{B}\) hat keine Quellen; änderndes \(\vec{B}\) wirbelt \(\vec{E}\) (Induktion); Ströme und änderndes \(\vec{E}\) (Verschiebungsstrom) wirbeln \(\vec{B}\).
  • Gauß-Gesetz praktisch: Fluss durch jede geschlossene Hülle \(= q_{\text{innen}}/\varepsilon_0\) — Form, Größe und Ladungsposition egal.
  • E entspringt, B umschlingt: Magnetfeldlinien sind geschlossene Schleifen; ein geteilter Magnet gibt zwei Magnete, nie einen Pol.
  • Im leeren Raum reichen sich \(\vec{E}\) und \(\vec{B}\) gegenseitig weiter: Wellengleichung mit erzwungenem Tempo \(c = 1/\sqrt{\varepsilon_0\mu_0} = 299\,792\,458\) m/s.

Roter Faden

Dieses Kapitel hat eingelöst, was Kapitel 1 und 2 vorbereitet haben: Das Skalarprodukt misst Flüsse durch Hüllen, Divergenz und Rotation sind die linke Seite aller vier Gleichungen, die Kapitel-2-Refutation war Gleichung (1), und der Strudel aus Übung 2.4 war das Feld um den Draht in Gleichung (4). Nach vorn: Kapitel 4 nimmt die ebene Welle auseinander, die hier herausgefallen ist (Polarisation, was schwingt in welche Richtung). Ab Kapitel 5 bauen wir die zwei Wirbelgleichungen direkt als Nachbar-Differenzen-Schleife nach — das ist FDTD, der Simulationsmotor des restlichen Buchs. Und der Verschiebungsstrom von eben ist dort kein exotischer Korrekturterm, sondern die halbe Update-Regel.

Übungen

Ü 3.1 (Verstehen). Eine geschlossene Hülle enthält keine Ladung, aber direkt neben ihr sitzt eine starke Ladung — das E-Feld auf der Hülle ist überall deutlich von null verschieden. Warum ist der Gesamtfluss trotzdem exakt null?

Jede Feldlinie der äußeren Ladung, die in die Hülle eintritt, muss sie auch wieder verlassen — drinnen gibt es ja nichts, wo sie enden könnte. Eintritt zählt negativ (\(\vec{E}\cdot\vec{n} < 0\)), Austritt positiv; in der Summe hebt sich beides exakt auf. Der Fluss zählt nicht „wie viel Feld ist auf der Hülle”, sondern „wie viel entspringt darin”.

Ü 3.2 (Verstehen). Stell dir Gleichung (3) mit einem Pluszeichen vor: Das induzierte E-Feld würde den Stromfluss antreiben, der das wachsende B-Feld verstärkt. Was würde mit einer Leiterschleife in einem leicht wachsenden Magnetfeld passieren — und warum kann unsere Welt so nicht funktionieren?

Mit Pluszeichen entstünde ein Teufelskreis: mehr B → mehr induzierter Strom → noch mehr B → … Die Schleife würde sich aus dem Nichts aufschaukeln, Energie aus nichts erzeugen — ein Perpetuum mobile. Das Minuszeichen (Lenz’sche Regel) dreht den Kreis um: Die Induktion bremst ihre eigene Ursache, jede Änderung kostet Arbeit, die Energiebilanz geht auf. (In Kapitel 18 wird daraus eine exakte Buchhaltung.)

Ü 3.3 (Verändern). Ändere im Kapitel-Programm den Ansatz des Pulses: Lasse \(B = E/c\) unverändert, aber gib dem Puls das Tempo \(v = 0{,}9c\) — welcher der beiden assert-Tests schlägt zuerst an? Probiere danach \(B = E/(0{,}9c)\) und \(v = 0{,}9c\) zusammen: Lässt sich Maxwell so überlisten?

Die beiden Varianten, mit getrennt ausgewiesenen Residuen:

# von oben: X, DX (Tempo-Trichter-Zelle); c, mu_0, epsilon_0 (Importe)
def residuen(v, b_tempo):
    """Verletzung von Faraday und Ampère für E = f(x−vt), B = E/b_tempo."""
    dt = DX/(4*c)
    def e(t): return np.exp(-((X - v*t)/1.0)**2)
    de_dx = np.gradient(e(0.0), DX)
    de_dt = (e(dt) - e(-dt))/(2*dt)
    faraday = np.max(np.abs(de_dx + de_dt/b_tempo))/np.max(np.abs(de_dx))
    ampere = np.max(np.abs(de_dx/b_tempo + mu_0*epsilon_0*de_dt)) \
        / np.max(np.abs(de_dx/b_tempo))
    return faraday, ampere

for fall, v, bt in [("B = E/c,     v = 0,9c", 0.9*c, c),
                    ("B = E/(0,9c), v = 0,9c", 0.9*c, 0.9*c)]:
    fa, am = residuen(v, bt)
    print(f"{fall}:   Faraday {fa:.3f}   Ampère {am:.3f}")
B = E/c,     v = 0,9c:   Faraday 0.100   Ampère 0.100
B = E/(0,9c), v = 0,9c:   Faraday 0.000   Ampère 0.190

Mit \(v = 0{,}9c\) verletzt der Puls beide Gleichungen um je 10 % (das Residuum ist \(|1 - v/c|\)) — beide assert-Tests schlagen an. Auch der Rettungsversuch scheitert: Mit \(B = E/v\) ist Faraday zwar exakt erfüllt (übrig bleibt nur der Diskretisierungsfehler), aber Ampère wird umso stärker verletzt — Residuum \(|1 - v^2/c^2| = 19\,\%\). Die beiden Gleichungen zusammen lassen sich nur mit \(v = c\) gleichzeitig befriedigen. Genau das zeigt der Trichter in Abbildung 3.4.

Ü 3.4 (Übertragen). Baue den Ampère-Test zu einem Koaxialkabel um: Innenleiter mit \(+1\) A im Ursprung, Rückstrom \(-1\) A verteilt auf acht Drähte gleichmäßig auf einem Kreis mit Radius \(0{,}5\) m. Berechne die Zirkulation für Schleifenradien \(0{,}2\) m, \(0{,}7\) m und \(1{,}5\) m um den Ursprung. Was bedeutet das Ergebnis für Geräte in der Nähe eines solchen Kabels?

Die Drahtliste wird ersetzt, die zirkulation-Funktion bleibt unverändert:

# von oben: zirkulation()  (Ampère-Abschnitt; sie liest DRAEHTE neu aus)
winkel8 = np.linspace(0, 2*np.pi, 9)[:-1]          # 8 Positionen
DRAEHTE = [(0.0, 0.0, +1.0)] \
    + [(0.5*np.cos(w), 0.5*np.sin(w), -1.0/8) for w in winkel8]

for radius in (0.2, 0.7, 1.5):
    print(f"Schleifenradius {radius} m: ∮B·dl = "
          f"{zirkulation((0, 0), radius):+.4e} T·m   (µ₀·1A = {mu_0:.4e})")
Schleifenradius 0.2 m: ∮B·dl = +1.2566e-06 T·m   (µ₀·1A = 1.2566e-06)
Schleifenradius 0.7 m: ∮B·dl = -4.1359e-25 T·m   (µ₀·1A = 1.2566e-06)
Schleifenradius 1.5 m: ∮B·dl = +2.6593e-24 T·m   (µ₀·1A = 1.2566e-06)

Radius \(0{,}2\) m (nur Innenleiter umschlossen): \(\mu_0 \cdot 1\) A. Radius \(0{,}7\) m und \(1{,}5\) m (alle Ströme umschlossen): null — Hin- und Rückstrom heben sich auf. Außerhalb eines Koaxialkabels verschwindet das Magnetfeld (bei idealer Symmetrie sogar exakt, nicht nur die Zirkulation): Das Kabel stört seine Umgebung nicht und wird umgekehrt kaum gestört — der Grund, warum Antennenleitungen und Messleitungen koaxial gebaut werden.

Das Kleingedruckte

  • Vakuum-Form: Unsere vier Gleichungen gelten für Ladungen und Ströme im Vakuum (und praktisch in Luft). In Materie kommen die Hilfsfelder \(\vec{D}\) und \(\vec{H}\) dazu, die Polarisation und Magnetisierung des Materials buchführen — sie betreten das Buch, sobald wir Materialien simulieren (Teil IV/VII).
  • Quasistatische Demos: Bei der Induktions-Demo haben wir das E-Feld als instantan mitlaufend angesetzt. Das ist erlaubt, solange die Anordnung viel kleiner ist als die Wellenlänge der beteiligten Frequenzen — sonst muss man die endliche Laufzeit mitrechnen, und genau dafür gibt es FDTD (Teil II).
  • Abtasten statt Gittern: Die Hüllen- und Schleifenintegrale dieses Kapitels tasten analytisch bekannte Felder ab. Sobald das Feld selbst nur auf einem Gitter existiert (FDTD), übernehmen die Gitterversionen von div und rot aus Kapitel 2 — die punktweise Induktions-Probe hat das schon vorgemacht.
  • Die Null in Gleichung (2) ist Messstand, kein Beweis: Die Suche nach magnetischen Monopolen läuft seit Jahrzehnten (bislang ergebnislos), und manche Theorien sagen sie voraus. Fände man einen, bekäme Gleichung (2) eine rechte Seite — und die Gleichungen würden vollkommen symmetrisch.