2016-06-19 52 views
0

私はこのような10Kのデータポイントがあります。私はそのためのリアプノフ指数を計算したいリアプノフ指数のPython実装

0.010222 
0.010345 
0.010465 
0.010611 
0.010768 
0.010890 
0.011049 
0.011206 
0.011329 
0.011465 
0.011613 
0.11763 
0.011888 
0.012015 
0.012154 
0.012282 
0.012408 
0.012524 
.... 

を。これは私がこれまで何をやったかである:

lyapunovs = [] 
eps = 0.0001 
for i in range(N): 
    for j in range(i + 1, N): 
     if np.abs(data[i] - data[j]) < eps: 
      for k in range(1, min(N - i, N - j)): 
       d0 = np.abs(data[i] - data[j]) 
       dn = np.abs(data[i + k] - data[j + k]) 
       lyapunovs.append(math.log(dn) - math.log(d0)) # problem 

私の問題は、私は、平均で最初のリアプノフ指数を知らないということですすべてlyapunovsときdata[i] - data[j] < epsその最初の時間のためのすべてのlyapunovsk = 1または平均?

リアプノフ指数の正しい実装ですか?

そして、これがあるNumerical Calculation of Lyapunov Exponent

答えて

0

Iだろう、このようにリアプノフ指数を計算して、出力ファイル内のタプルような結果は、ブログを参照してください。

https://blog.abhranil.net/2014/07/22/calculating-the-lyapunov-exponent-of-a-time-series-with-python-code/

from math import log 
import numpy as np 

with open('data.txt', 'r') as f: 
    data = [float(i) for i in f.read().split()] 

N = len(data) 
eps = 0.001 
lyapunovs = [[] for i in range(N)] 

for i in range(N): 
    for j in range(i + 1, N): 
     if np.abs(data[i] - data[j]) < eps: 
      for k in range(min(N - i, N - j)): 
       lyapunovs[k].append(log(np.abs(data[i+k] - data[j+k]))) 

with open('lyapunov.txt', 'w') as f: 
    for i in range(len(lyapunovs)): 
     if len(lyapunovs[i]): 
      string = str((i, sum(lyapunovs[i])/len(lyapunovs[i]))) 
      f.write(string + '\n') 
+0

このルックス次のブログのように:https://blog.abhranil.net/2014/07/22/calculating-the-lyapunov-exponent-of-a-time-series-with-python-code/ – Mai

+0

これは、道 – Lucifer