Skip to content

Ilia DudaCo-op Jan 2027

The vibrating drum: Fourier–Bessel series on a circular membrane

Directed study · MATH 4992 · Spring 2026

A drum that rings in exactly the modes the reader keeps, released from the shapes of the exercises. Its Bessel functions and their zeros are computed in the page with no library, and agree with SciPy’s to within a trillionth.


Fig. 1
A circular drum, ringing in the modes its shape is made of.Fourier–Bessel series · radius 1 · wave speed 1 · 4 modes · the exercises' shapes

The drums of the exercises

The Bessel-series profiles, struck as drums

Initial shape
f = 2 sin 2θ, g = 0
Modes kept
4, in Bessel J2
Energy, conserved
107.819
Error (L², relative)
31.9%
Model time
0.0
  1. λ2,1 5.13565.2698
  2. λ2,2 8.4172−0.3168
  3. λ2,3 11.61982.6215
  4. λ2,4 14.7960−0.4762

Pick a shape and how many modes to keep: the drum is their sum, each mode ringing at its own frequency.

A drum of radius 1, fixed at its rim. Each mode is a Bessel function across the drum times a sine or cosine round it, and rings at its own frequency, a zero of that Bessel function: the drum is not harmonic, as a string is, because those zeros are not multiples of one another. The initial shapes are the exercises’; each is drawn as the sum of the modes kept, so a shape that does not vanish at the rim needs many of them there. Up to 20 modes.
The first zeros of the Bessel functions, which set the drum’s frequencies
OrderFirstSecondThird
J02.40485.52018.6537
J13.83177.015610.1735
J25.13568.417211.6198

What it shows

A drum is a membrane stretched over a circle and fixed at its rim. Struck, or released from a shape, it vibrates as a sum of modes: patterns that each keep their shape and only grow and shrink in time, each at its own frequency. The figure is that sum, kept to as many modes as the reader chooses, for the initial shapes of the directed study’s exercises. The exercises worked each expansion to two terms by hand; the figure keeps up to twenty, so the effect of every further term can be seen.

The drum’s modes do not ring in tune with one another, as a string’s do. A string’s frequencies are whole multiples of its lowest; a drum’s are set by the zeros of Bessel functions, and the second axisymmetric one is 2.295 times the first, not twice it. That is why a drum sounds as a drum.

The mathematics

The membrane’s height u(r, θ, t) satisfies the wave equation in polar coordinates, with u = 0 on the rim. Separating variables, writing u as a product of a function of r, one of θ and one of t, gives a sine or cosine of nθ round the drum, a sine or cosine of λt in time, and Bessel’s equation of order n across it, whose solutions bounded at the centre are Jn(λr). The rim being fixed asks Jn(λ) = 0: the allowed λ are the zeros of Jn, and they are the drum’s frequencies.

An initial displacement f and velocity g expand in these modes. Across the drum the modes are orthogonal with weight r, so each coefficient is found on its own: the integral of the shape’s radial profile against Jn(λr), with weight r, divided by the same integral of the mode’s square, which is half of Jn+1(λ)2. The displacement’s coefficients ring as cos λt; the velocity’s, divided by λ, as sin λt.

Fig. 2
A profile from the exercises, against its Fourier–Bessel series.f(r) = 1 · in J0 · 2 terms
f(r) = 1, and its series in J0 to 2 termsThe profile f(r) = 1 on 0 to 1, with its Fourier–Bessel series in J0 kept to 2 terms; the error in the mean is 42.1% of the profile. Every term is zero at r = 1.
Profile
f(r) = 1
Terms kept
2
Error (L², relative)
42.1%
First coefficients
1.6020, −1.0648

Pick a profile, the Bessel function to expand it in, and how many terms to keep.

Section 3.3’s four profiles on a radius of 1, each expanded in J0 or J1 as the exercises do, to as many terms as the reader keeps. The error, as a share of the profile, falls with every term added; where a profile does not vanish at the rim the series still overshoots next to it, since every term is zero there, and adding terms only narrows the overshoot.

The exercises

Four drums from the course’s section on the circular membrane: released from 2 sin 2θ, set moving with velocity −cos θ, released from r sin θ, and set moving with velocity (r − 1) cos 2θ. Each has a single angular order, so only the Bessel function of that order appears. The four radial profiles of the section on Bessel series, f(r) = 1, 2r + 1, 1 − 3r and a step from 3 to 1 at half the radius (the section writes x for r), were expansions on a line; Fig. 2 shows them as the exercises do, in J0 and J1, and the drum also strikes them as initial shapes.

How it is computed and tested

Everything is computed in the page, in TypeScript with no library. Jn comes from Miller’s backward recurrence, normalised by the sum identity; the zeros by a scan for each change of sign, closed by bisection; the coefficients by Gauss–Legendre quadrature, split where a profile jumps. The tests hold the Bessel functions and their zeros to SciPy’s values within 10−12, check the modes’ orthogonality, check that a pure mode expands to itself, that the error never grows as modes are added, that the drum’s energy is the same at every moment, and that the exercises’ two-term coefficients come out to four places.

The drum is drawn with WebGL2: its heights are summed on the processor every frame from a table of Jn(λr) made once per shape, and lit as the implied-volatility surface on this site is. Where the drum does not run live, its still frame is the same solution, drawn, and every control still redraws it.


Bessel functions
lib/membrane/bessel.ts
course
MATH 4992, directed study, Northeastern University, Spring 2026