Berechnet dieser Code den Lyapunov Exponent richtig?
the10 = 2
the20 = 0
the1_d0 = 10
the2_d0 = 10
initial_conditions = [the10, the1_d0, the20, the2_d0]
t = np.linspace(0, 100, 3000)
pertubation = 0.01
initial_conditions_perturbed = [the10 + pertubation, the1_d0 + pertubation, the20 + pertubation, the2_d0+pertubation]
ans = solve_ivp(dSdt, (0, t.max()), t_eval=t, args=(k, l0, m1, m2, r1, r2, M0), y0=initial_conditions, method='DOP853', rtol=1e-10, atol=1e-10)
ans_perturbed = solve_ivp(dSdt, (0, t.max()), t_eval=t, args=(k, l0, m1, m2, r1, r2, M0), y0=initial_conditions_perturbed, method='DOP853', rtol=1e-10, atol=1e-10)
diff = ans.y - ans_perturbed.y
betrag_diff = np.linalg.norm(diff, axis=0)
lyapunov_array =[]
for time_index, val in enumerate(t):
if time_index != 0:
lyapunov_array.append(np.log(betrag_diff[time_index]/pertubation)/val)
else:
lyapunov_array.append(0)
lyapunov_exponent = np.mean(lyapunov_array)
Die Simulationen (ans, ans_pertubated) sind korrekt. Das Problem das ich habe ist dass wenn ich Lyapunov_array gegen die Zeit plote, es gegen 0 konvertiert.
Je länger ich die Simulation also laufen lassen würde desto kleiner wäre der Lyapunov Exponent, was ja nicht sein kann.