Skip to content
scipython.com

P8.1.2The Airy disc

The Airy pattern is the circular diffraction pattern of resulting from a uniformly-illuminated circular aperture. It consists of a bright, central disc surrounded by fainter rings. Its mathematical description may be written in terms of the Bessel function of the first kind,

\[I(\theta) = I_0\left( \frac{2J_1(x)}{x}\right)^2,\]

where \(\theta\) is the observation angle and \(x=ka\sin\theta\); \(a\) is the aperture radius and \(k = 2\pi/\lambda\) is the angular wavenumber of the light with wavelength \(\lambda\).

Plot the Airy pattern as \(I(x)/I_0\) for \(-10 \le x \le 10\) and deduce from the position of the first minimum in this function the maximum resolving power (in arcsec) of the human eye (pupil diameter 3 mm) at a wavelength of 500 nm.

Show solution

The code below uses the Bessel functions scipy.special.jn and jn_zeros. The function \(J_1(x)/x\) is sometimes known as the jinc function (by comparison with the sinc function).

airydisc
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jn, jn_zeros

fig, ax = plt.subplots()

x = np.linspace(-10, 10, 100)
# The jinc, or "sombrero" function, J0(x)/x
jinc = lambda x: jn(1, x) / x
airy = (2 * jinc(x)) ** 2
ax.plot(x, airy)
ax.set_xlabel("$x$")
ax.set_ylabel("$I(x)/I_0$")
plt.show()

# Aperture radius (mm), light wavelength (nm)
a, lam = 1.5, 500
# wavenumber (mm-1)
k = 2 * np.pi / (lam / 1.0e6)
# First zero in J1(x)
x1 = jn_zeros(1, 1)[0]
theta1 = np.arcsin(x1 / k / a)
# Convert from radians to arcsec
theta1 = np.degrees(theta1) * 60 * 60

print(
    f"Maximum resolving power for pupil diameter {2 * a} mm"
    f" at {lam} nm is {theta1:.1f} arcsec"
)

Output:

Maximum resolving power for pupil diameter 3.0 mm at 500 nm is 41.9 arcsec
The Airy Disc
The Airy Disc.