Il modello di Lorenz è un sistema di equazioni differenziali ordinarie (EDO) che descrive il movimento di fluidi in riscaldamento. Fu sviluppato da Edward Lorenz nel 1963 come semplificazione di modelli più complessi del tempo atmosferico. Il modello è noto per il suo comportamento caotico, che era un fenomeno poco compreso all’epoca.
Il sistema di Lorenz è definito dalle seguenti tre equazioni differenziali non-lineari per le variabili x, y e z, che rappresentano lo stato del sistema in funzione del tempo t:
dx/dt = σ(y – x)
dy/dt = x(ρ – z) – y
dz/dt = xy – βz
Le costanti σ, ρ e β sono parametri positivi. Nella scoperta originale di Lorenz, σ (sigma) rappresentava il numero di Prandtl, che è un parametro senza dimensioni utilizzato in fluidodinamica, ρ (rho) rappresentava la differenza di temperatura tra l’alto e il basso della colonna d’aria e β (beta) era proporzionale al rapporto tra l’altezza e la larghezza della colonna d’aria.
Per risolvere numericamente il sistema di Lorenz, si utilizzano metodi numerici per le equazioni differenziali, come il metodo di Euler, il metodo di Runge-Kutta o altri metodi più avanzati. Questi metodi approssimano la soluzione del sistema di equazioni avanzando passo dopo passo nel tempo. A ogni passo, le derivate vengono stimate dalle equazioni del sistema e utilizzate per calcolare i valori delle variabili al passo successivo.
Per esempio, nel metodo di Euler (il più semplice), i passaggi sarebbero i seguenti:
- Iniziare con valori iniziali per x, y, z e t.
- Calcolare le derivate dx/dt, dy/dt e dz/dt utilizzando le equazioni del sistema.
- Aggiornare i valori di x, y e z utilizzando le derivate e un piccolo passo di tempo Δt: x = x + dx/dt * Δt, y = y + dy/dt * Δt, z = z + dz/dt * Δt.
- Aggiornare il tempo t = t + Δt.
- Ripetere i passaggi 2-4 per il numero desiderato di passi.
Questo metodo produce un’approssimazione della traiettoria del sistema nel tempo. Tuttavia, a causa del comportamento caotico del sistema di Lorenz, piccole differenze nelle condizioni iniziali o negli errori di arrotondamento possono portare a grandi differenze nei risultati, un fenomeno noto come “effetto farfalla“. Pertanto, è necessario scegliere attentamente il passo di tempo Δt e gestire accuratamente gli errori di arrotondamento quando si risolve numericamente il sistema di Lorenz.
Di seguito, si propone un semplice script in Python per integrare numericamente il sistema di equazioni di Lorenz:
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Definizione del sistema di Lorenz
def lorenz_system(current_state, t, sigma, beta, rho):
x, y, z = current_state
dx_dt = sigma * (y - x)
dy_dt = x * (rho - z) - y
dz_dt = x * y - beta * z
return [dx_dt, dy_dt, dz_dt]
# Parametri del sistema di Lorenz
sigma = 10.0
beta = 8.0 / 3.0
rho = 28.0
# Condizioni iniziali
initial_state = [1.0, 1.0, 1.0]
# Creazione di un array di punti temporali per l'integrazione
t = np.arange(0.0, 50.0, 0.01)
# Risoluzione del sistema di Lorenz con odeint
solution = odeint(lorenz_system, initial_state, t, args=(sigma, beta, rho))
# Estrazione delle soluzioni x, y, z
x = solution[:, 0]
y = solution[:, 1]
z = solution[:, 2]
# Creazione di un plot 3D dei risultati
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Lorenz Attractor')
plt.show()
Questo script risolve il sistema di Lorenz per un intervallo di tempo da 0 a 50 con un passo di 0.01, partendo dalle condizioni iniziali (1,1,1). Viene quindi generato un plot 3D che mostra l’attrattore di Lorenz, ovvero la traiettoria del sistema nel tempo. Le forme a spirale complesse che vedi nel grafico sono tipiche dei sistemi caotici come il sistema di Lorenz.