Takens' Theorem

Motivation:

  1. We cannot directly observe the state \(x_k\in X\) of a dynamical system.

  2. Measurements/observations are completely determined by system states: \(\phi: X\to \mathbb{R}\).

  3. Can we reconstruct the system based on observation \(Y=(y_0, y_1, ...)=(\phi(x_0),\phi(x_1),...)\)?

Taken’s Theorem

Let \(M\) be a compact manifold of dimension \(m\). For pairs \((\phi ,y)\), with \(\phi\in Diff^2(M), y\in C^2(M,\mathbb{R})\), it is a generic (open and dense) property that the map \[ \Phi_{(\phi ,y)} : M \to \mathbb{R}^{2m+1} \]

defined by

\[ \Phi_{\phi ,y}(x) = (y(x), y(\phi(x)),...,y(\phi^{2m}(x))) \]

is an embedding.

A Demo of Takens’ Therorem

When applying Takens’ Theorem to a Lorentz system:

Blue: The original Lorentz system Green: The shadow manifold on \(X\) Orange: The shadow manifold on \(Y\) Red: The shadow manifold on \(Z\)

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from mpl_toolkits.mplot3d import Axes3D
rho = 28.0
sigma = 10.0
beta = 8.0 / 3.0
def f(state, t):
x, y, z = state # unpack the state vector
return sigma * (y - x), x * (rho - z) - y, x * y - beta * z # derivatives
state0 = [1.0, 1.0, 1.0]
t = np.arange(0.0, 40.0, 0.01)
tau = 5
states = odeint(f, state0, t)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(states[:,0], states[:,1], states[:,2])
#plt.show()
for i in range(3):
a = states[:,i][:-2*tau]
b = states[:,i][tau:-tau]
c = states[:,i][2*tau:]
ax.plot(a,b,c)
plt.show()