Show code cell content
import mmf_setup;mmf_setup.nbinit()
from pathlib import Path
import os
FIG_DIR = Path(mmf_setup.ROOT) / '../Docs/_build/figures/'
os.makedirs(FIG_DIR, exist_ok=True)
import logging;logging.getLogger('matplotlib').setLevel(logging.CRITICAL)
%matplotlib inline
import numpy as np, matplotlib.pyplot as plt
This cell adds /home/docs/checkouts/readthedocs.org/user_builds/physics-521-classical-mechanics-i/checkouts/latest/src to your path, and contains some definitions for equations and some CSS for styling the notebook. If things look a bit strange, please try the following:
- Choose "Trust Notebook" from the "File" menu.
- Re-execute this cell.
- Reload the notebook.
Perturbation Theory#
Here we work through chapter 8 of [Percival and Richards, 1982] which provides a nice introduction to the application of perturbation theory in dynamical systems.
Example 8.1 from [Percival and Richards, 1982]#
This example demonstrates how a perturbation can qualitatively change the nature of the solution. While the unperturbed solution is valid for all times, the perturbed solution diverges at a finite time \(t_c = \ln(1 + 1/\epsilon A)\) due to the appearance of a pole.
Do It! Solve this, both exactly, and as a series in \(\epsilon\).
This is a separable system with solution
This admits a nice series expansion
but will obviously fail to converge beyond the pole.
The naïve approach (which we call “naïve perturbation theory”) expresses the solution as
Inserting this into the original equation and collecting terms of different orders in \(\epsilon\), we obtain the following equations, and corresponding solutions
Asymptotic Series#
Here is another type of problem that can occur with perturbative solutions. Consider the following system:
Do It! Solve by Lagrange’s variation of parameters.
Consider \(\epsilon \dot{x} + x = f(t)\). The general solution to the homogeneous equation is simply \(x_h(t) = A e^{-t/\epsilon}\). Letting \(A(t)\) be a function of time, and plugging this back in, we have
For our problem, \(f(t) = -e^{-t}\) so we have
Do It! Solve using naïve perturbation theory.
Letting \(x = x_0 + \epsilon x_1 + \epsilon ^2 x_2 + \cdots\), we have the following:
This series can be summed explicitly:
Note however, that this is not the correct solution. Even the initial condition is violated. What is missing is the homogeneous solution which must be added to restore the initial condition.
Here we are faced with an example where the series fails to converge to the correct solution, even if we expand it to all orders. This is due to the non-analytic pieces \(e^{-t/\epsilon}\) whose Taylor coefficients are all zero. This is an example of an aymptotic series.
Show code cell source
t = np.linspace(0, 2)
def x(t, epsilon):
return (np.exp(-t) - epsilon * np.exp(-t/epsilon))/(1-epsilon)
def x_n(t, epsilon, N):
return np.exp(-t)*sum([epsilon**n for n in range(N+1)])
fig, ax = plt.subplots()
ax.plot(t, x(t, epsilon=0.1))
for N in range(2):
ax.plot(t, x_n(t, epsilon=0.1, N=N), label=f"${N=}$")