Lecture 4 - Periodic Orbits in the Plane

Published

January 22, 2026

Based on notes created by Sam Coogan and Murat Arcak. Licensed under a “Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License”

Periodic Orbits in the Plane

We have two theorems that allow us to reason about periodic orbits in the plane:

  1. Bendixson Theorem - absense of periodic orbits
  2. Poincaré Bendixson - existence of periodic orbits

Poincaré Bendixson Theorem

Theorem: Poincaré-Bendixson Theorem. Suppose M is compact1 and positively invariant for the planar, time-invariant system \dot{x} = f(x), x \in \R^2. If M contains no equilibrium points, then it contains a periodic orbit.

1 Compact: closed and bounded

Example: Harmonic Oscillator

A = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \quad \begin{matrix} \dot{x}_1 = -x_2 \\ \dot{x}_2 = x_1 \end{matrix}

For any R > r > 0, the ring \{x: r^2 \leq x_1^2 + x_2^2 \leq R^2 \} is compact, invariant and contains no equilibria. Therefore, at least one periodic orbit must exist by Poincaré-Bendixson. (We know there are infinitely many in this case)

The “no equilibrium” condition in the PB theorem can be relaxed as

NoteRelaxed Poincaré-Bendixson Condition

If M contains one equilibrium which is an unstable focus or unstable node, then it contains a periodic orbit.

Proof sketch:

Since the equilibrium is an unstable focus or node, we can encircle it with a small closed curve on which f(x) points outward. Then the set obtained from M by carving out the interior or the closed curve is positively invariant and contains no equilibrium.

Example 2, Lecture 3

Recall that we were given the system: \begin{align*} \dot{x}_1 = x_1 + x_2 - x_1(x_1^2 + x_2^2) \\ \dot{x}_2 = -2 x_1 + x_2 - x_2(x_1^2 + x_2^2) \end{align*} and asked to show that B_r \triangleq \{ x \mid x_1^2 + x_2^2 \leq r^2 \} is positively invariant for sufficiently large r.

This was done by checking if f(x) \cdot n(x) \leq 0 on the boundary of the set B_r where n(x) = [x_1, x_2]^T:

\begin{align*} f(x) \cdot n(x) &= \begin{bmatrix} x_1 + x_2 - x_1(x_1^2 + x_2^2) \\ -2x_1 + x_2 - x_2(x_1^2 + x_2^2) \end{bmatrix} \cdot \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \\ &= {x_1^2} + {x_1 x_2} - x_1^2(x_1^2 + x_2^2) {- 2x_1x_2} + {_2^2} - x_2^2(x_1^2 + x_2^2) \\ &= {- x_1 x_2} + {(x_1^2 + x_2^2)} - (x_1^2 + x_2^2)^2 \end{align*} which used the inequality2 \begin{align*} |2x_1x_2| \le x_1^2 + x_2^2, \end{align*} to arrive at the final condition: \begin{align*} f(x) \cdot n(x) &\leq \frac{1}{2}(x_1^2 + x_2^2) + (x_1^2 + x_2^2) - (x_1^2 + x_2^2)^2 \\ &= \frac{3}{2}r^2 - r^4 \end{align*}

2 This is a special case of the Cauchy-Schwarz inequality: |\langle a, b \rangle | \le \|a\| \|b\| with a = (x_1, x_2) and b = (x_2, x_1): \begin{align*} |x_1x_2 + x_2x_1| &\leq \sqrt{(x_1^2 + x_2^2)(x_1^2 + x_2^2)} \\ |2 x_1 x_2 | &\leq x_1^2 + x_2^2 \end{align*}

Therefore, f(x) \cdot n(x) \leq \frac{3}{2}r^2 - r^4 \leq 0 if r^2 \geq \frac{3}{2}.

So, we can conclude that B_r is positively invariant for r \geq \sqrt{\frac{3}{2}} and contains the equilibrium x = 0.

\frac{\partial f}{\partial x}|_{x = 0} = \begin{bmatrix} 1 & 1 \\ -2 & 1\end{bmatrix} \quad \to \quad \lambda_{1,2} = 1 \pm \sqrt{2}i \textrm{ unstable focus}

Therefore, B_r must contain a periodic orbit.

Show code
import numpy as np
import matplotlib.pyplot as plt

# Define the vector field
def f(x1, x2):
  r_sq = x1**2 + x2**2
  dx1 = x1 + x2 - x1 * r_sq
  dx2 = -2*x1 + x2 - x2 * r_sq
  return dx1, dx2

# Create grid
x1 = np.linspace(-2, 2, 20)
x2 = np.linspace(-2, 2, 20)
X1, X2 = np.meshgrid(x1, x2)

# Compute vector field
DX1, DX2 = f(X1, X2)

# Plot Phase Portrait
fig, ax = plt.subplots(figsize=(6, 6))
ax.streamplot(X1, X2, DX1, DX2, density=1.5, color='steelblue')
ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_aspect('equal')
plt.tight_layout()

# Plot the Boundary $r^2 = 3/2
theta = np.linspace(0, 2*np.pi, 100)
r = np.sqrt(3/2)
ax.plot(r * np.cos(theta), r * np.sin(theta), 'r--', linewidth=2, label=r'$r^2 = 3/2$')
ax.legend()

plt.show()

Phase Portrait for the Example

A more general form of the PB Theorem states that, for time-invariant planar systems, bounded trajectories converge to equilibria, periodic orbits, or unions of equilibria connected by trajectories.

Corollary: No chaos for time-invariant planar systems.

Index Theory

Index theory is also only applicable to planar systems, but provides us with another way to rule out the existence of periodic orbits.

Definition: Index
The index of a closed curve is k if, when traversing the curve in one direction, f(x) rotates by 2\pi k in the same direction. The index of an equilibrium is defined to be the index of a small curve around it that doesn’t enclose another equilibrium.

Type of Equilibrium or Curve Index Diagram
node, focus, center +1

saddle -1

any closed orbit +1

a closed curve not encircling equilibria 0

The last claim (index = 0) follows from the following observations

  • continuously deforming a closed curve without crossing equilibria leaves its index unchanged
  • A curve not encircling equilibria can be shrunk to an arbitrarily small one, so f(x) can be considered constant

Theorem: Index The index of a closed curve is equal to the sum of indices of the equilibria inside.

Graphical Proof: Shrinking curve c to c' below without crossing equilibria does not change the index. The index of c' is the sum of the indices of the curves encircling the equilibria because the thin “pipes” connecting these curves do not affect the index of c'.

Index Theory

The following corollary is useful for ruling out periodic orbits (like Bendixson’s Theorem).

NoteCorollary

Inside any periodic orbit there must be at least one equilibrium and the indices of the equilibria enclosed must add up to +1.

Example (from Lecture 3):

\begin{align*} \dot x_1 &= x_2 \\ \dot x_2 &= -\delta x_2 + x_1 - x_1^3 + x_1^2 x_2 \quad \delta > 0 \end{align*}

Bendixson’s Criterion: No periodic orbit can lie entirely in one of the regions x_1 \leq -\sqrt{\delta}, -\sqrt{\delta} \leq x_1 \leq \sqrt{\delta}, or x_1 \geq \sqrt{\delta}.

Instead, let’s apply the index theory corollary.

Equilibria: (0,0), ( \pm 1, 0). To find their indices evaluate the Jacobian \left.\frac{\partial f}{\partial x}\right|_{x=(0, 0)} = \begin{bmatrix} 0 & 1 \\ 1 & -\delta \end{bmatrix} \quad \to \quad \lambda^2 + \delta - 1 = 0.

The eigenvalues are real and have opposite signs, therefore (0,0) is a saddle (index = -1).

\left.\frac{\partial f}{\partial x}\right|_{x=(\pm 1, 0)} = \begin{bmatrix} 0 & 1 \\ -2 & 1-\delta \end{bmatrix} \quad \to \quad \lambda^2 + (\delta-1) \lambda + 2 = 0.

The eigenvalues are either real with the same sign (node) or complex conjugates (focus or center), therefore (\pm 1,0) each has index +1.

Thus, the corollary above rules out the periodic orbit in the middle of the plot below. It does not rule out the others, but does not provide their existence either. Bendixson’s Criterion rules our neither of the three.

Index Theory Example (blue orbits are possible, orange orbit is not possible)
Show code
import numpy as np
import matplotlib.pyplot as plt

# Define the vector field
delta = 0.5  # Choose a positive value for delta

def f(x1, x2):
  dx1 = x2
  dx2 = -delta * x2 + x1 - x1**3 + x1**2 * x2
  return dx1, dx2

# Create grid
x1 = np.linspace(-2, 2, 25)
x2 = np.linspace(-2, 2, 25)
X1, X2 = np.meshgrid(x1, x2)

# Compute vector field
DX1, DX2 = f(X1, X2)

# Plot Phase Portrait
fig, ax = plt.subplots(figsize=(8, 6))
ax.streamplot(X1, X2, DX1, DX2, density=1.5, color='steelblue')

# Mark equilibria
ax.plot(0, 0, 'ro', markersize=8, label='Saddle (0,0)')
ax.plot(1, 0, 'go', markersize=8, label='Node/Focus (1,0)')
ax.plot(-1, 0, 'go', markersize=8, label='Node/Focus (-1,0)')

ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_title(f'Phase Portrait ($\\delta = {delta}$)')
ax.set_aspect('equal')
ax.legend()
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
plt.tight_layout()
plt.show()

Phase Portrait for the Example