背景
X(t+1)=F(X(t))のような離散時間力学系に対しては、QR分解の方法とかがいろんな所で書かれているけど、 X˙=F(X,t)のような連続時間力学系に対しては、あまりリアプノフ指数を計算する方法が書かれていないので、メモしておく。
リアプノフ指数
X˙=F(X,t)に対してM˙=DF(X(t),t)Mで定義される、Mの特異値 αi を用いて、リアプノフ指数 λi は以下で定義される。
λi=T→∞limT1log(αi)
最大リアプノフ指数だけ計算する方法
適当なvを用意して、 v(t)の拡大率を計算すればいい。
v˙=DF(X(t),t)v
で計算できる。少しでもリアプノフベクトル方向の成分を持っていれば、十分時間が経った時に、その方向だけにずば抜けて指数的に拡大するので、そこからわかる。
上位k個ののリアプノフ指数だけ計算する方法
島田,長島(1979)の方法
k本のランダムベクトル d0(1)(0),…,d0(2)(0) を用意する。ただし、d0(i)(0)Td0(j)(0)=δijである。
τ秒時間発展させて、 d0(1)(τ),…,d0(2)(τ) を得る。ここで、ノルム降順に並び替える。
そこで、Gram-Schmitの方法で、直行化してを d0⊥(1)(τ),…,d0⊥(k)(τ)を得る。
これをつかって、d1(i)(0)=∣d0⊥i(τ)∣∣d0(i)(0)∣d0⊥i(τ)を計算して、ワンステップが終わる。
m∑λm=n→∞limn1k∑n−1lndk(1)(0),…,dk(m)(0)が作る超平行m面体の体積dk(1)(τ),…,dk(m)(τ)が作る超平行m面体の体積
リアプノフ指数を全部計算する方法
QR分解を使った方法を挙げておく。計算の中で指数関数的に拡大する項がないので、計算が安定する。
M=QRとQR分解をする。この時、QとRをそれぞれ別々に時間発展することを考える。
QTQ˙−QTDF(X(t),t)Q=−R˙R−1
この時間発展方程式では、右辺は上三角行列であり、QTQ˙は反対称行列になっている(QTQ=Iを微分すればわかる)。そこからS:=QTQ˙としたときに、Sの下三角成分はQTDF(X(t),t)Q と一致していて、反対称なので上三角成分もこれで決まる。よって、S=triu(QTDF(X(t),t)Q)−triu(QTDF(X(t),t)Q)Tなので、
Q˙=QS
からQを時間発展できる。
また、右辺の対角成分は Rii˙/Rii=log(Rii)˙なので、
d(log(Rii))/dt=diag(QTDF(X(t),t)Q)
で log(Rii)を時間発展させることができる。RiiはMの特異値に一致するため、これから、λi=limT→∞T1log(Rii)でリアプノフ指数を計算できる。
まとめると、
- 目的の力学系を数値積分して、X(t)を解く
-
Qとlog(Rii)を上の方程式に従って数値積分する
-
λi=T1log(Rii(T))で十分大きな$T$を取ればリアプノフ指数に収束させることができる。
参考
[1] Lyapunov Exponents for Continuous-Time Dynamical Systems; Janaki T M, et al; India; 2003
Discussion