The Butterfly Effect, formulated in 1972 by mathematician and meteorologist Edward Lorenz, is part of chaos theory that illustrates the interdependence between seemingly insignificant events and large-scale phenomena. Contrary to common belief, chaos is not random but deterministic and highly sensitive to initial conditions, with well-defined boundaries. Using Lorenz’s attractor, it is possible to simulate and visualize this effect through a system of differential equations that represents the complexity and interconnectedness of the world. Chaos theory goes beyond the simple image of a butterfly flapping its wings, providing a profound understanding of nature and the universe through the beauty and complexity of the fundamental laws of mathematics and physics.
L’Effetto Farfalla è una metafora che ha catturato l’immaginazione del pubblico fin dalla sua prima formulazione nel 1972 da parte del matematico e meteorologo Edward Lorenz. Ma cosa significa davvero questa enigmatica frase, “… una farfalla che sbatte le ali in Brasile potrebbe scatenare un tornado in Texas”? E come possiamo sviscerare gli errori comuni che avvolgono questa affascinante idea?
L’Effetto Farfalla: Un’Introduzione
La descrizione dell’Effetto Farfalla fa parte di quella che viene comunemente chiamata teoria del caos. Il concetto può essere inteso come un segno dell’interdipendenza di eventi apparentemente insignificanti e fenomeni su larga scala, ma ci sono due importanti distinzioni che spesso vengono trascurate nella cultura popolare:
- Il Caos non è Casuale: Contrariamente alla credenza comune, il termine “caotico” in questo contesto non significa “casuale”. Il caos è deterministico e segue regole precise, ma è altamente sensibile alle condizioni iniziali. Una piccola variazione nelle condizioni di partenza può portare a risultati radicalmente diversi.
- Il Futuro non è Completamente Non-Deterministico: L’Effetto Farfalla non significa che qualsiasi cosa possa succedere in qualsiasi momento. Ci sono limiti ben definiti entro i quali i fenomeni possono variare.
Il Codice: Simulando l’Effetto Farfalla
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import glob
import os
save_folder = 'images/lorenz'
if not os.path.exists(save_folder):
os.makedirs(save_folder)
initial_state = [ 0.5 , 0 , 0 ]
sigma = 10
rho = 28
beta = 8 / 3
start_time = 1
end_time = 80
interval = 1000
time_points = np.linspace(start_time, end_time, end_time * interval)
def lorenz_system(current_state, t):
x, y, z = current_state
xdot = sigma * (y - x)
ydot = x * (rho - z) - y
zdot = x * y - beta * z
return [xdot, ydot, zdot]
def plot_lorenz(xyz, interval, save_folder):
for n in range ( 0 , len (xyz), interval):
fig = plt.figure(figsize = ( 12 , 9 ))
ax = fig.add_subplot( 111 , projection = '3d' )
x = xyz[:n, 0 ]
y = xyz[:n, 1 ]
z = xyz[:n, 2 ]
ax.plot(x, y, z, color = 'purple' , alpha = 0.7 , linewidth = 0.7 )
ax.set_xlim(( - 30 , 30 ))
ax.set_ylim(( - 30 , 30 ))
ax.set_zlim(( 0 , 50 ))
plt.savefig(f '{save_folder}/{n:03d}.png' , dpi = 60 , bbox_inches = 'tight' , pad_inches = 0.1 )
plt.close()
points = odeint(lorenz_system, initial_state, time_points)
plot_interval = 20
plot_lorenz(points, interval = plot_interval, save_folder = save_folder)
standard_duration = 10
durations = [standard_duration] * ( len (points) / / plot_interval)
image_filenames = sorted (glob.glob( '{}/*.png' . format (save_folder)), key = lambda x: int (x.split( '/' )[ - 1 ].split( '.' )[ 0 ]))
images = [Image. open (image) for image in image_filenames]
gif_filepath = 'images/animated-lorenz-attractor.gif'
for i, image in enumerate (images[ 1 :]):
image.info[ 'duration' ] = durations[i]
images[ 0 ].save(fp = gif_filepath, format = 'gif' , save_all = True , append_images = images[ 1 :], loop = 0 )
|
Attraverso il codice fornito, possiamo simulare e visualizzare l’Effetto Farfalla utilizzando l’attrattore di Lorenz, un sistema di equazioni differenziali. Ecco come il codice funziona:
1. Definire le Condizioni Iniziali
Prima di tutto, impostiamo le condizioni iniziali del sistema, come le costanti \sigma, \rho, e \beta, e lo stato iniziale delle variabili x, y, e z:
1 2 3 4 | initial_state = [ 0.5 , 0 , 0 ]
sigma = 10
rho = 28
beta = 8 / 3
|
2. Creare il Sistema di Equazioni
Il cuore della simulazione è un sistema di equazioni differenziali che descrive il comportamento del sistema nel tempo:
1 2 3 4 5 6 | def lorenz_system(current_state, t):
x, y, z = current_state
xdot = sigma * (y - x)
ydot = x * (rho - z) - y
zdot = x * y - beta * z
return [xdot, ydot, zdot]
|
3. Risolvere il Sistema
Utilizziamo la funzione odeint
da SciPy per risolvere il sistema di equazioni nel tempo, ottenendo una traiettoria che mostra come il sistema evolve:
1 | points = odeint(lorenz_system, initial_state, time_points)
|
4. Visualizzare i Risultati
Infine, possiamo visualizzare i risultati utilizzando Matplotlib, creando una rappresentazione grafica tridimensionale dell’evoluzione del sistema:
1 | plot_lorenz(points, interval = plot_interval, save_folder = save_folder)
|
Conclusione
L’Effetto Farfalla è un potente promemoria della complessità e dell’interconnessione del mondo che ci circonda. Non è un concetto di puro caso o anarchia, ma piuttosto una descrizione della natura intrinsecamente imprevedibile e sensibile di sistemi complessi.
La teoria del caos e l’Effetto Farfalla offrono una lente attraverso cui possiamo esplorare concetti profondi come la determinazione, la casualità, e la connettività. E attraverso la simulazione e la visualizzazione, possiamo iniziare a toccare con mano la bellezza e la complessità che emergono dalle leggi fondamentali della matematica e della fisica.
Mentre il nome “teoria del caos” potrebbe aver contribuito a malintesi, la realtà è che offre una profonda comprensione della natura e dell’universo, una comprensione che va ben oltre la semplice immagine di una farfalla che sbatte le ali.