In the world of differential equations, some equations cannot be
expressed in terms of elementary functions, but this doesn't mean we're
helpless. Power series solutions open a new door — by expanding
solutions as infinite series, we can not only solve a broader class of
equations but also give birth to special functions like Bessel functions
and Legendre polynomials that appear everywhere in physics. This chapter
will guide you through this exquisite mathematical landscape.
Starting with a Simple
Problem
Imagine you're studying heat conduction and need to find the
temperature distribution inside a cylinder. After separation of
variables, you encounter this equation:
This is the famous Bessel
equation. Trying all the methods we've learned before —
separation of variables, integrating factors, variation of parameters —
none work. The coefficients of this equation are functions of, not constants, so traditional methods
fail.
Fortunately, power series solutions can save us.
The Core Idea of Power
Series Solutions
Basic Principle
Core assumption: Assume the solution can be
expressed as a power series
Solution steps: 1. Substitute the power series
forinto the differential equation
2. Write all terms in the same power form 3. Set the coefficient of each
power to zero 4. Obtain a recurrence relation for coefficients 5. Use initial conditions to
determine, etc.
Review: A Familiar Example
Let's use the power series method to re-solve a simple equation:Assume, then.
Substituting into the equation:Adjusting the summation index,
leton the left:Comparing coefficients of:Fromwe know, and by
recurrence:Therefore:The power series method
has "rediscovered" the exponential function!
Ordinary Points and
Singular Points
Definitions
Consider a second-order linear equation:Converting to standard form:where,.
Definitions: - Ifandare analytic (can be
expanded as convergent power series) at, thenis called an
ordinary point - Otherwise,is called a singular
point
Power Series
Solutions at Ordinary Points
Theorem: Ifis an ordinary point, then the
equation has two linearly independent power series solutions near:with radius of convergence at
least equal to the distance fromto the nearest singular point.
Example: The Airy Equation
Airy equation:This is a core
equation in WKB approximation in quantum mechanics and rainbow theory in
optics.
Analysis:,, both are
entire functions, sois an
ordinary point.
Solution: Let, then.
Substituting into the equation:Adjusting indices to match
powers of. For the first sum,
let; for the second,
let:Separating theterm:Setting each coefficient to zero: -: -:This recurrence relation means the
coefficients divide into three groups: - Starting with: - Starting with: - Starting with:Computing a few terms:General solution:whereandare Airy
functions— this is the birth of two special functions!
Not all singular points are equally "bad." Some can be handled by an
improved power series method.
Definition: Ifis a singular point, butare analytic
at, thenis called a regular singular
point.
Otherwise, it's called an irregular singular
point.
The Frobenius Method
Idea: At a regular singular point, try a generalized
power series solution:wherecan be any
real number (or even complex).
Steps: 1. Substitute the generalized power series
into the equation 2. Set the coefficient of the lowest power to zero to
get the indicial equation 3. Solve the indicial
equation for possible values of$rr$
The Indicial Equation
For an equation in standard form:Let,.
Indicial equation:Let the two
roots be(with
convention).
Three Cases
Depending on the nature of, there are three cases:
Case 1:is not an integer Two linearly independent solutions:
Case 2:
Case 3:is a positive integerwheremay be zero.
Bessel Equation and Bessel
Functions
The
Bessel EquationThis is one of the most important equations
in physics, appearing in:
Laplace equation in cylindrical coordinates
Vibration of circular drumheads
Electromagnetic wave propagation in cylindrical waveguides
Heat conduction problems
Analysisis a regular singular point.
Converting to standard form:So,.
At:,.
Indicial equation:Solving gives.
Bessel
Functions of the First KindTaking(), let.
Substituting into the equation, after tedious but straightforward
calculations, we get the recurrence relation:Usually we take,.
Result:
Bessel
Functions of the Second Kind(Neumann Functions)
Whenis not an integer,is also a solution and is
linearly independent from.
Whenis an integer,, so we need to
construct a second solution.
Neumann function definition:Whenis an integer, it's defined by a limit.
import numpy as np import matplotlib.pyplot as plt from scipy.special import jv, yv
# Bessel function visualization x = np.linspace(0.01, 20, 1000)
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# Bessel functions of the first kind ax1 = axes[0, 0] for n inrange(5): ax1.plot(x, jv(n, x), linewidth=2, label=f'$J_{n}(x)$') ax1.axhline(y=0, color='k', linestyle='-', linewidth=0.5) ax1.set_xlabel('x', fontsize=12) ax1.set_ylabel('$J_n(x)$', fontsize=12) ax1.set_title('Bessel Functions of the First Kind', fontsize=14, fontweight='bold') ax1.legend(fontsize=10) ax1.grid(True, alpha=0.3) ax1.set_ylim(-0.5, 1.1)
# Bessel functions of the second kind ax2 = axes[0, 1] for n inrange(4): ax2.plot(x, yv(n, x), linewidth=2, label=f'$Y_{n}(x)$') ax2.axhline(y=0, color='k', linestyle='-', linewidth=0.5) ax2.set_xlabel('x', fontsize=12) ax2.set_ylabel('$Y_n(x)$', fontsize=12) ax2.set_title('Bessel Functions of the Second Kind (Neumann)', fontsize=14, fontweight='bold') ax2.legend(fontsize=10) ax2.grid(True, alpha=0.3) ax2.set_ylim(-1.5, 0.6)
# Zeros of Bessel functions (key for drum vibration modes) ax3 = axes[1, 0] from scipy.special import jn_zeros for n inrange(4): zeros = jn_zeros(n, 5) ax3.scatter(zeros, [n]*5, s=100, label=f'$J_{n}$zeros') for z in zeros: ax3.axvline(x=z, color=f'C{n}', alpha=0.3, linestyle='--') ax3.set_xlabel('x', fontsize=12) ax3.set_ylabel('n (order)', fontsize=12) ax3.set_title('Zeros of Bessel Functions (Drum Vibration Modes)', fontsize=14, fontweight='bold') ax3.legend(fontsize=10) ax3.grid(True, alpha=0.3)
# Circular drum vibration mode ax4 = axes[1, 1] theta = np.linspace(0, 2*np.pi, 100) r = np.linspace(0, 1, 50) R, Theta = np.meshgrid(r, theta) X = R * np.cos(Theta) Y = R * np.sin(Theta)
# A vibration mode (n=1, m=1) n, m = 1, 1 zero_nm = jn_zeros(n, m)[-1] Z = jv(n, zero_nm * R) * np.cos(n * Theta)
for n_terms in n_terms_list: coeffs = legendre_coefficients(step_function, n_terms) y_approx = np.zeros_like(x) for n, c inenumerate(coeffs): Pn = legendre(n) y_approx += c * Pn(x) ax3.plot(x, y_approx, linewidth=1.5, label=f'{n_terms} terms', alpha=0.7)
ax3.set_xlabel('x', fontsize=12) ax3.set_ylabel('y', fontsize=12) ax3.set_title('Approximating Step Function with Legendre Series', fontsize=14, fontweight='bold') ax3.legend(fontsize=10) ax3.grid(True, alpha=0.3) ax3.set_ylim(-1.5, 1.5)
# Spherical harmonic Y_2^0(θ, φ) ∝ P_2(cos θ) from scipy.special import sph_harm l, m = 2, 0 Y = sph_harm(m, l, Phi, Theta) Y_real = np.real(Y)
# Convert to Cartesian coordinates r = np.abs(Y_real) X = r * np.sin(Theta) * np.cos(Phi) Y_coord = r * np.sin(Theta) * np.sin(Phi) Z = r * np.cos(Theta)
In quantum mechanics, the one-dimensional harmonic oscillator's Schr
ö dinger equation simplifies to the Hermite
equation:Whenis a
non-negative integer, there are polynomial solutions — the
Hermite polynomials.
Definition of Hermite
Polynomials
Rodrigues' formula:First few Hermite polynomials:$
$
$
$
Orthogonality
Hermite polynomials are orthogonal with weight functionon:
Quantum Harmonic
Oscillator Wavefunctions
Energy eigenstates of the harmonic oscillator:Energy levels:This is the famous
energy quantization!
for n inrange(5): psi = psi_n(n, x) # Offset along y-axis for visualization ax2.plot(x, psi + n, linewidth=2, label=f'n={n},$E_n$={n+0.5}') ax2.fill_between(x, n, psi + n, alpha=0.3) ax2.axhline(y=n, color='gray', linestyle='--', linewidth=0.5)
Practical
Application: Heat Conduction and Fourier-Bessel Series
Problem Setup
Consider a cylindrical metal rod of radius, with initial temperature
distribution, and surface
maintained at zero temperature. Find how the temperature changes with
time.
Mathematical Model
Heat conduction equation (cylindrical coordinates, assuming
temperature depends only onand):Boundary condition:Initial condition:
Separation of Variables
Let,
substituting gives:Time
part:Spatial part:Let, this is exactly the
zeroth-order Bessel equation!
Solution
General solution:Sincediverges at, take.
Boundary conditionrequires.
Let the zeros ofbe, then.
Final solution:whereare determined by initial conditions
and orthogonality of Bessel functions.
# Parameters a = 1.0# Cylinder radius k = 0.1# Thermal diffusivity n_terms = 10# Number of series terms
# Zeros of J_0 zeros = jn_zeros(0, n_terms)
# Initial temperature distribution deff(r): return1 - r**2# Parabolic distribution
# Compute Fourier-Bessel coefficients defcompute_coefficients(f, a, zeros, n_terms): coeffs = [] for n inrange(n_terms): alpha_n = zeros[n] # Numerator: ∫_0^a r f(r) J_0(α_n r/a) dr defintegrand_num(r): return r * f(r) * jv(0, alpha_n * r / a) numerator, _ = quad(integrand_num, 0, a) # Denominator: ∫_0^a r [J_0(α_n r/a)]^2 dr = (a^2/2) [J_1(α_n)]^2 denominator = (a**2 / 2) * jv(1, alpha_n)**2 coeffs.append(2 * numerator / (a**2 * jv(1, alpha_n)**2)) return coeffs
coeffs = compute_coefficients(f, a, zeros, n_terms)
# Temperature distribution defu(r, t, coeffs, zeros, a, k): result = np.zeros_like(r) for n, (A_n, alpha_n) inenumerate(zip(coeffs, zeros)): result += A_n * jv(0, alpha_n * r / a) * np.exp(-k * (alpha_n/a)**2 * t) return result
r = np.linspace(0, a, 100)
# Temperature distribution at different times ax1 = axes[0, 0] times = [0, 1, 5, 10, 20, 50] for t in times: temp = u(r, t, coeffs, zeros, a, k) ax1.plot(r, temp, linewidth=2, label=f't = {t}')
ax1.set_xlabel('Radius r', fontsize=12) ax1.set_ylabel('Temperature u(r, t)', fontsize=12) ax1.set_title('Temperature Distribution in Cylinder Over Time', fontsize=14, fontweight='bold') ax1.legend(fontsize=10) ax1.grid(True, alpha=0.3)
# Center temperature over time ax2 = axes[0, 1] t_array = np.linspace(0, 50, 500) center_temp = [u(np.array([0.0]), t, coeffs, zeros, a, k)[0] for t in t_array]
ax2.plot(t_array, center_temp, 'b-', linewidth=2) ax2.set_xlabel('Time t', fontsize=12) ax2.set_ylabel('Center Temperature u(0, t)', fontsize=12) ax2.set_title('Temperature at Center vs Time', fontsize=14, fontweight='bold') ax2.grid(True, alpha=0.3)
# Log scale to see decay ax3 = axes[1, 0] ax3.semilogy(t_array, center_temp, 'b-', linewidth=2) # Theoretically dominated by the first term theoretical_decay = coeffs[0] * np.exp(-k * (zeros[0]/a)**2 * t_array) ax3.semilogy(t_array, theoretical_decay, 'r--', linewidth=2, label='First term only') ax3.set_xlabel('Time t', fontsize=12) ax3.set_ylabel('Center Temperature (log scale)', fontsize=12) ax3.set_title('Exponential Decay of Temperature', fontsize=14, fontweight='bold') ax3.legend(fontsize=10) ax3.grid(True, alpha=0.3)
# 3D heat map ax4 = axes[1, 1] R, T = np.meshgrid(r, t_array[:100]) U = np.zeros_like(R) for i, t inenumerate(t_array[:100]): U[i, :] = u(r, t, coeffs, zeros, a, k)
print("Fourier-Bessel coefficients (first 5 terms):") for n, c inenumerate(coeffs[:5]): print(f" A_{n+1} = {c:.6f}")
Generating
Functions and Asymptotic Expansions
Generating
Function for Bessel FunctionsThis formula connects
Bessel functions with complex analysis and is very useful in FM signal
analysis.
Generating
Function for Legendre Polynomials
Physical significance: This is exactly the expansion
of potential energy between two point charges!
If there's a point charge at the origin and another at, the distance between them
is.
When:This is the foundation of multipole
expansion!
Asymptotic Expansion
As, the behavior of
Bessel functions:
Physical significance: Far from the source,
cylindrical waves behave as decaying sinusoidal waves.
Connections Between
Special Functions
Unified Framework:
Sturm-Liouville Theory
All these special functions are eigenfunctions of
Sturm-Liouville problems: | Special Function | Equation |
Weight| Interval |
|-----------------|----------|---------------|----------| ||| 1 || ||| 1 || ||||| ||||| |||||
Common Features
Orthogonality: Eigenfunctions for different
eigenvalues are orthogonal
Completeness: Any "reasonable" function can be
expanded
Recurrence relations: Simple relations between
adjacent orders
Generating functions: Compact generating
formulas
Asymptotic behavior: Predictable behavior at
boundaries
Numerical Methods and
Implementation
Numerical Computation of
Power Series
Direct computation of power series may have numerical issues: 1.
Inefficient when many terms are needed 2. Alternating series may have
cancellation errors
Better methods: - Use recurrence relations - Use
asymptotic formulas (for large arguments) - Tables and interpolation
defbessel_j_series(nu, x, n_terms=50): """ Compute Bessel function of the first kind J_ν(x) using series J_ν(x) = Σ_{m=0}^∞ (-1)^m / (m! Γ(m+ν+1)) * (x/2)^(2m+ν) """ from scipy.special import gamma result = 0.0 for m inrange(n_terms): term = ((-1)**m / (np.math.factorial(m) * gamma(m + nu + 1)) * (x/2)**(2*m + nu)) result += term ifabs(term) < 1e-15: # Convergence check break return result
# Test x = 3.0 for nu in [0, 1, 2, 0.5]: my_result = bessel_j_series(nu, x) scipy_result = special.jv(nu, x) print(f"J_{nu}({x}): my implementation = {my_result:.10f}, " f"scipy = {scipy_result:.10f}, " f"error = {abs(my_result - scipy_result):.2e}")
Hypergeometric
Functions: Unifying Special Functions
Gauss
Hypergeometric Functionwhereis the Pochhammer symbol.
Amazing fact: Many special functions are special
cases of hypergeometric functions!
Confluent
Hypergeometric Function
Relation to Hermite polynomials:
Summary: The Power of
Series Solutions
Key Points of This Chapter
Power series solutions: Expand the solution
as, find coefficients
via recurrence relations
Ordinary points and singular points:
Ordinary point: coefficients are analytic, power series solution
exists
Regular singular point: Frobenius method, generalized power series
solution
Indicial equation: Algebraic equation
determining the power
Important special functions:
Bessel functions: cylindrical problems
Legendre polynomials: spherical problems
Hermite polynomials: quantum harmonic oscillator
Airy functions: turning point problems
Orthogonality and completeness: Expanding
arbitrary functions using special functions
Unified framework: Sturm-Liouville theory and
hypergeometric functions
Preview of Next Chapter
In "Linear Systems of Differential Equations," we will: - Learn about
matrix exponentials and fundamental matrices - Analyze the behavior of
coupled systems - Study trajectories in phase space - Apply to ecology,
circuits, and control theory
Exercises
Basic Problems
Use the power series method to solve,,, and verify the answer
is.
Verify thatis a regular
singular point of the equation, and find the indicial equation.
Prove thatsatisfies
the recurrence relation.
Use Rodrigues' formula to computeand.
Verify that Hermite polynomials satisfy.
Advanced Problems
For the Airy equation:
Write the recurrence relation for - Compute the first 8 non-zero
coefficients
Estimate the radius of convergence
Prove that Legendre polynomials satisfy the recurrence
relation:$$
(n+1)P_{n+1}(x) = (2n+1)xP_n(x) - nP_{n-1}(x)$J_(x)$satisfies the
Bessel differential equation: - Substitute the series into the Bessel
equation - Verify the recurrence relation gives correct coefficients
Expandonusing Fourier-Bessel series,
satisfying. Compute the
first 3 coefficients.
Programming Problems
Write a function to compute the series expansion of Bessel
function, and compare
accuracy with scipy.special.jv.
Visualize the first 10 energy level wavefunctions of the quantum
harmonic oscillator, marking node positions.
Simulate circular drumhead vibration:
UseandBessel functions
Create an animation showing different vibration modes
Find the first 5 resonant frequencies
Implement multipole expansion:
Given a charge distribution, compute its electric potential
Expand using Legendre polynomials up to - Compare exact solution with
series approximation
Thought Questions
Why do so many special functions appear in physics? What is their
relationship with the choice of coordinate systems?
If the parameterin the
Bessel equation is complex, how does the solution change?
How does Sturm-Liouville theory unify these seemingly different
special functions?
References
Arfken, G. B., Weber, H. J., & Harris, F. E. (2012).
Mathematical Methods for Physicists. Academic Press.
Bender, C. M., & Orszag, S. A. (1999). Advanced Mathematical
Methods for Scientists and Engineers. Springer.
Abramowitz, M., & Stegun, I. A. (1964). Handbook of
Mathematical Functions. Dover.
NIST Digital Library of Mathematical Functions:
https://dlmf.nist.gov/
Watson, G. N. (1995). A Treatise on the Theory of Bessel
Functions. Cambridge University Press.