Un pacchetto Python, pubblicato su PyPI, che calcola lo spettro di Lyapunov di un sistema dinamico descritto da equazioni differenziali o da mappe discrete.

Stack: Python, NumPy, Numba, SciPy, Sphinx.

Perché

Per capire se un sistema è caotico si guardano gli esponenti di Lyapunov, che misurano quanto in fretta due traiettorie vicine si allontanano. Calcolarli in Python puro è lento. Ho scritto il pacchetto durante gli studi di fisica a Pisa, tra luglio 2021 e agosto 2022, e l'ho pubblicato perché potesse servire ad altri studenti.

Traiettoria del sistema di Lorenz, usato come esempio

Come funziona

  1. 01

    Il metodo

    Il metodo di Benettin, nella forma descritta da Sandri (1996), con la matrice variazionale.

  2. 02

    L'interfaccia

    Si chiama computeLE passando la funzione, la sua jacobiana e la condizione iniziale. Per il tempo continuo usa Runge-Kutta di ordine 4, per le mappe il passo della funzione; una fase transitoria è opzionale. Restituisce lo spettro nel tempo e la soluzione.

  3. 03

    Una versione con Numba

    Accanto a quella in Python c'è una versione compilata con Numba. Nel repository non ho misurato quanto sia più veloce, quindi non riporto numeri.

  • Cosa ho fatto io

    Tutto il pacchetto, da solo: circa 300 righe di Python, 50 commit, la documentazione con Sphinx su Read the Docs, un notebook di esempio e i test automatici su Travis CI.

  • Stato

    Concluso nell'agosto 2022. Pubblico su GitHub, con 5 stelle. Non conosco utenti reali oltre a me.