Lesson 14 of 15

Bifurcation Theory

Bifurcation Theory

A bifurcation occurs when a small change in a parameter causes a qualitative change in a dynamical system's behavior — new fixed points appear, disappear, or change stability.

Saddle-Node Bifurcation

The normal form is: dxdt=μ+x2\frac{dx}{dt} = \mu + x^2

Fixed points satisfy μ+x2=0x=±μ\mu + x^{*2} = 0 \Rightarrow x^* = \pm\sqrt{-\mu}:

  • μ<0\mu < 0: two fixed points (one stable, one unstable)
  • μ=0\mu = 0: one fixed point (bifurcation point)
  • μ>0\mu > 0: no real fixed points — they annihilate

Transcritical Bifurcation

dxdt=μxx2\frac{dx}{dt} = \mu x - x^2

Fixed points: x=0x^* = 0 and x=μx^* = \mu (always two). They exchange stability at μ=0\mu = 0.

Pitchfork Bifurcation (Supercritical)

dxdt=μxx3\frac{dx}{dt} = \mu x - x^3

Fixed points:

  • μ0\mu \leq 0: only x=0x^* = 0 (stable)
  • μ>0\mu > 0: x=0x^* = 0 (unstable) and x=±μx^* = \pm\sqrt{\mu} (stable)

The stable state splits into two — like a pitchfork — as μ\mu crosses zero.

Period-Doubling in the Logistic Map

xn+1=rxn(1xn)x_{n+1} = r x_n (1 - x_n)

As rr increases, the fixed point loses stability and period-2 cycles appear at r=3r = 3 (first period-doubling bifurcation). This cascade continues to chaos at r3.569r \approx 3.569.

Implementation

import math

def saddle_node_fps(mu):
    # Return list of real fixed points: [sqrt(-mu), -sqrt(-mu)] if mu < 0
    # Return [0.0] if mu == 0, [] if mu > 0
    ...

def transcritical_fps(mu):
    # Always return [0.0, float(mu)]
    ...

def pitchfork_fps(mu):
    # Return [0.0] if mu <= 0
    # Return [0.0, sqrt(mu), -sqrt(mu)] if mu > 0
    ...

def logistic_bifurcation_r():
    # Return the first period-doubling bifurcation value
    ...
Python runtime loading...
Loading...
Click "Run" to execute your code.