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.
Solution P8.1.2
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).
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