Method of Moments · Thin-Wire Dipole

Timeline · drag to scrub step 0 / 36
MASTER CONTROLS
Length L / λ
0.41
zn zm R = 0.000 λ

[Z] Ω · {I} mA = {V} V {y} = L⁻¹·V {I} mA ✓ (final) Δ = L · U − Z (should be 0) [L] · [U] → = [L·U] recomputed
CELL ARITHMETIC
Zmn = (jη / 4πk) · ∫seg n K(zm, z′) dz′
cell Z[1][1] R 0.010 λ m 1 kR 0.063 n 1 Re(Zmn)78.6 |m−n| 0 Im(Zmn)−2919
Zmn 78.6 − j2919 Ω
STEP 0
—
drag the timeline to begin
5 5 0.41
— · — · —

The theory · how the figures above were built

The integral equation, and how it becomes a 5×5 matrix

The model is a centre-fed thin-wire dipole — a straight z-directed conductor of length L and radius a, driven by a 1 V delta-gap source at its midpoint. The unknown is the current distribution I(z) along the wire.

The governing equation is Pocklington's integral form of the boundary condition on the wire surface:

Pocklington's integral equation ∫−L/2L/2 I(z′) · (∂²/∂z² + k²) G(z, z′) dz′ = −jω ε Ezinc(z)

Choose N = 5 pulse basis functions for I(z′) and point-match at the centre of each segment. The integral equation collapses to a 5×5 complex linear system:

Discrete form [Z] · {I} = {V}   ·   Zmn ∈ ℂ,   5 × 5

Everything that follows — fill, factor, substitute, post-process — operates on this matrix.


Filling [Z] and {V}

Each cell Zmn is one Pocklington-kernel integral over segment n, evaluated at the centre of segment m:

Cell formula (used by the calculator for every Zmn) Zmn = (jη / 4πk) · ∫seg n K(zm, z′) dz′
K(zm, z′) = e−jkR / R5 · [(2R² − 3a²)(1 + jkR) + (kaR)²]
R = √((zm − z′)² + a²)

The calculator evaluates this with 51-point Simpson quadrature. Steps 1–26 walk through all 25 cells; the side panel shows R, kR, and the resulting complex Zmn as each one is computed.

Two structural facts worth noticing

The matrix is Toeplitz. The kernel depends only on |zm − z′|, so every diagonal of [Z] holds the same complex value. A production solver stores only one row and reuses it; the calculator shows the full grid so the structure is visible.

The j prefactor swaps real and imaginary parts. On the diagonal, R ≈ a is tiny and the integrand is dominated by a huge real part. Multiplying by j moves that into Im(Zmm) — which is why diagonal cells show a large negative imaginary part (~−2900 Ω at L ≈ 0.5λ). That value is the wire's near-field reactance, not a numerical artefact.

The excitation vector (steps 27–31)

A delta-gap 1 V source at the centre segment puts a single non-zero entry in {V}. For N = 5 the feed is segment 3, so V[3] = 1/Δz, all other entries are zero. No clever physics — the source vector simply marks where voltage is applied.


Factor once, substitute twice — never invert

With [Z] and {V} in hand, solve [Z]·{I} = {V} by factor + substitute, not by computing Z⁻¹. The arithmetic is complex throughout; every +, −, ·, ÷ below uses complex operands.

LU factorisation (steps 32–41), verification (42–66)

For each pivot row p and each row t below it:

Complex Gaussian elimination — one row pair m = Z[t][p] / Z[p][p]   (complex divide)
L[t][p] = m
Row t ← Row t − m · Row p

After all sweeps the lower-triangular part holds the multipliers (L, ones on the diagonal) and the upper-triangular part holds U. The verification phase re-multiplies L · U in complex arithmetic and compares against the original [Z] cell by cell — every cell agrees to ~10⁻¹³.

Forward substitution (steps 67–81)

Solve L · {y} = {V} top-down. L is lower-triangular with ones on the diagonal, so each row has exactly one new unknown:

Forward sub — row i y[i] = V[i] − Σj<i L[i][j] · y[j]

Back substitution (steps 82–96)

Solve U · {I} = {y} bottom-up. U is upper-triangular, so the bottom row has one unknown; work upward:

Back sub — row i I[i] = (y[i] − Σj>i U[i][j] · I[j]) / U[i][i]

The result {I} is the complex segment-by-segment current distribution. By construction it satisfies [Z]·{I} = {V}.

Why not just compute Z⁻¹?

Mathematically valid, numerically wasteful. Inverting takes ~3× more operations than LU + two sweeps for a single right-hand side, accumulates more rounding error, and cannot be reused. The factorisation can: each new {V} (frequency sweep, multi-port, scattering) costs only O(N²) for the two sweeps once L and U are stored.

Rule of thumb: never invert a matrix when you only need to solve a system. The inverse is for thinking about; the solve is for computing.

To make the equivalence concrete, the calculator computes both — direct inversion and LU substitution — for the current settings and shows the residual:

The two methods agree to ~14 decimal digits. The remaining 10⁻¹⁴ is double-precision rounding — the same any method would accumulate.


Zin, radiation pattern, gain, S11, and the time-domain current

The complex current vector {I} is the starting point for every number an antenna engineer reports.

Input impedance (step 97)

Read the complex current at the feed segment and apply Ohm's law at the terminals:

Input impedance Zin = V₀ / Ifeed = 1 V / I[3] = Rin + jXin

Rin is the radiation resistance (energy leaving as electromagnetic waves). Xin is the reactance (energy stored in the near field). Resonance is the length where Xin = 0. For this calculator (a/λ = 0.020, N = 5) that lands near L/λ ≈ 0.433. The slider opens at the slightly shorter L/λ = 0.415 — tuned so the S11 minimum (best 50 Ω match) lands exactly on 2.45 GHz. The two conditions don't coincide with a 50 Ω reference, and the engineering convention picks the better-matched length.

Radiation pattern (steps 98–109)

For a z-directed pulse-basis dipole the far field factors cleanly into an element factor times an array factor:

Pattern multiplication |E(θ)| ∝ |sin θ| · |∑n In · ej·k·zn·cos θ|
 
element factor = sin θ  (every infinitesimal z-current radiates this way)
array factor = ∑n In · ej·k·zn·cos θ  (coherent phasor sum)

The calculator builds this in four substeps: element factor sampled at 9 angles (step 98), array factor matrix filled column by column (steps 99–107), total |E(θ)| = sin θ · |AF(θ)| (step 108), and the normalised 3D pattern revolved around z (step 109). The factorisation is clean here because every basis function carries z-directed current and differs only by translation; for bent wires or surfaces the radiation integral no longer separates so simply.

Directivity and gain (steps 110–115)

With |E(θ)| known on a sphere, directivity follows in six mechanical substeps:

Directivity from the pattern 1.  Umax = maxθ |E(θ)|²  — peak radiation intensity
2.  S = ∫ |E(θ)|² · sin θ · dθ  — θ-integral (Riemann sum)
3.  Ptotal = 2π · S  — times 2π for the φ integral (azimuthal symmetry)
4.  D = 4π · Umax / Ptotal  — directivity (linear, dimensionless)
5.  D [dBi] = 10 · log10(D)  — convert to dB above isotropic
6.  G [dBi] = ηrad · D [dBi]  — gain (ηrad = 1 for the lossless wire here)

A textbook half-wave dipole has D = 1.64 → 2.15 dBi. The calculator produces ~2.1 dBi at L/λ ≈ 0.5.

S11 sweep (steps 116–168)

The entire solver runs again at 51 frequencies between 1.45 and 3.45 GHz, anchored so that the design frequency f0 = 2.45 GHz lands exactly on the 26th sample. Each point is a fresh fill + factor + solve at a re-scaled L/λ. From Zin(f) at each frequency:

Reflection coefficient and S11 Γ = (Zin − Z₀) / (Zin + Z₀),  Z₀ = 50 Ω
S11 = 20 · log10 |Γ|

Minima of |S11| mark operating bands. At the default L/λ = 0.415 the dip lands precisely on 2.45 GHz at roughly −13 dB.

Time-domain current (step 169)

The complex {I} is a phasor — the physical current is real and oscillating. The conversion is:

Phasor → time domain In(t) = Re(In) · cos(ωt) − Im(In) · sin(ωt)

The calculator animates this as a coloured bar along the wire while ωt sweeps 0° → 360°. The pulse-basis approximation means I(z, t) is piecewise-constant on each segment; what varies with time is only the cos/sin coefficients applied to the fixed complex amplitudes.

Summary (step 170)

The three engineering numbers — input impedance, peak gain at the actual peak direction, and the 3D radiation pattern with absolute dBi scale — collected on one panel.


The same algorithm at any size

The calculator runs the genuine algorithm. Scaling to a real solver changes only the parameters around the edges:

§ 01

Larger N

For a half-wave dipole, 21–41 segments converges to within fractions of an ohm. Same arithmetic; the LU dominates runtime as O(N³).

§ 02

Better basis functions

Production codes (NEC-2, FEKO, HFSS-IE) use rooftop or sinusoidal bases that span two segments and require Galerkin testing. Denser matrices, faster convergence — 5–10 segments per λ is usually enough.

§ 03

Different geometries

Bent wires, Yagi arrays, and surfaces (RWG basis on triangular meshes) follow the same workflow: discretise, fill [Z], factor, substitute, post-process. The kernel changes; the bones of the algorithm don't.

§ 04

Frequency sweep / multi-port

Re-build [Z] at each frequency, factor once per matrix, substitute many times. Each new {V} costs O(N²) — never O(N³).

§ 05

Iterative solvers

At N > 10⁵ dense LU is infeasible. GMRES with fast-multipole acceleration brings cost down to O(N log N) per matrix-vector product. The integral equation and basis functions stay the same; only the linear solver swaps out.

Every commercial wire-and-surface MoM code — NEC, FEKO, HFSS-IE, WIPL-D — is at heart what the calculator above does, with careful handling of the singular integrals and a much larger N.