L'Insieme di Mandelbrot, indicato con il simbolo matematico $\mathbb{M}$, è l'insieme dei numeri complessi $c$ per i quali la successione definita per ricorrenza non diverge all'infinito. Visivamente, rappresenta la "mappa" della stabilità dei sistemi dinamici quadratici.
Sebbene le basi teoriche siano state gettate da Gaston Julia e Pierre Fatou all'inizio del '900, la prima visualizzazione moderna risale al 1980 grazie a Benoît Mandelbrot. Egli utilizzò i calcolatori IBM per esplorare questa struttura, scoprendo che la complessità del bordo è infinita: non importa quanto si ingrandisca, appariranno sempre nuove strutture simili alla principale (auto-similarità).
Consideriamo un punto $c$ nel piano complesso. Definiamo la funzione iterativa:
Partendo dal valore iniziale $z_0 = 0$, costruiamo la successione:
Formalmente, l'insieme $\mathbb{M}$ è definito come:
Un teorema fondamentale stabilisce che se in un qualsiasi momento $|z_n| > 2$, la successione divergerà sicuramente all'infinito. Pertanto, l'insieme è contenuto interamente nel disco di raggio 2 del piano complesso.
Per generare graficamente il frattale, dobbiamo tradurre i numeri complessi in coordinate reali $(x, y)$. Sia $z = x + iy$ e $c = a + bi$. L'operazione $z^2 + c$ si sviluppa come:
L'algoritmo procede così:
Di seguito è riportata la formalizzazione logica dell'algoritmo in un linguaggio simil-C. Questo codice analizza ogni pixel della finestra di visualizzazione (di dimensioni WIDTH x HEIGHT) e determina se appartiene all'insieme $\mathbb{M}$.
// Parametri dello schermo e del piano complesso
for (int Px = 0; Px < WIDTH; Px++) {
for (int Py = 0; Py < HEIGHT; Py++) {
// 1. Mappatura del pixel (Px, Py) sul piano complesso (a, b)
// Solitamente l'insieme di Mandelbrot è centrato in (-0.5, 0)
double a = map(Px, 0, WIDTH, -2.0, 1.0);
double b = map(Py, 0, HEIGHT, -1.2, 1.2);
double x = 0.0; // Parte reale di z
double y = 0.0; // Parte immaginaria di z
int iteration = 0;
int max_iteration = 1000;
// 2. Ciclo di iterazione del sistema dinamico
// Condizione: modulo al quadrato <= 4 AND iterazioni < limite
while (x*x + y*y <= 4.0 && iteration < max_iteration) {
double x_temp = x*x - y*y + a;
y = 2*x*y + b;
x = x_temp;
iteration++;
}
// 3. Determinazione del colore
if (iteration == max_iteration) {
drawPixel(Px, Py, BLACK); // Il punto appartiene all'insieme
} else {
// Colore proporzionale alla velocità di fuga
Color color = palette[iteration % palette_size];
drawPixel(Px, Py, color);
}
}
}
x_temp. Se aggiornassimo x prima di calcolare y, il valore di y verrebbe calcolato usando la $x_{n+1}$ invece della $x_n$, invalidando la formula $2xy$.x*x + y*y evita la funzione sqrt() (radice quadrata), che è computazionalmente costosa.long double o librerie per l'alta precisione, poiché i double standard esauriscono i bit di precisione oltre i $10^{15}$ ingrandimenti.L'Insieme di Mandelbrot non è solo "complesso", è un oggetto che sfida la geometria euclidea tradizionale:
L'insieme è un frattale, il che significa che contiene copie in miniatura di se stesso. Se si ingrandisce il bordo della "cardioide" principale, si troveranno dei piccoli "mini-Mandelbrot" che sembrano identici all'originale, ma sono circondati da decorazioni sempre diverse e più complesse.
Mentre una linea ha dimensione 1 e un quadrato dimensione 2, il bordo dell'insieme di Mandelbrot è così frastagliato da occupare spazio in modo anomalo. È stato dimostrato (da Mitsuhiro Shishikura) che:
Questo significa che il confine dell'insieme, sebbene sia una "linea", è così densamente ripiegato su se stesso da avere la stessa dimensione di un'area piana.
Esiste una connessione profonda tra l'insieme di Mandelbrot e gli Insiemi di Julia ($J_c$). L'insieme di Mandelbrot può essere pensato come un "indice" o una "mappa" per tutti i possibili insiemi di Julia:
In sintesi, $\mathbb{M}$ ci dice "come sono fatti" gli infiniti insiemi di Julia possibili.
L'insieme di Mandelbrot è legato alla Teoria del Caos. Se osserviamo i "bulbi" lungo l'asse reale negativo, la loro dimensione decresce seguendo un rapporto preciso:
Questa è la costante di Feigenbaum, la stessa che governa la transizione verso il caos nei sistemi biologici (come la crescita delle popolazioni) e fisici.
La generazione dell'Insieme di Mandelbrot è un compito ad alta intensità computazionale (CPU-intensive). La fluidità della visualizzazione dipende da una complessa interazione tra hardware e software:
<canvas>, i browser moderni delegano parte del lavoro alla scheda video. Poiché le GPU sono progettate per gestire migliaia di pixel simultaneamente, questa sinergia garantisce una velocità superiore rispetto al calcolo puramente software.Se la matematica delle "iterazioni" sembra ostica, possiamo immaginare l'Insieme di Mandelbrot come un test di resistenza per i numeri.
Prendiamo un punto sul piano. Lo eleviamo al quadrato e gli sommiamo la sua posizione iniziale. Poi ripetiamo l'operazione con il risultato ottenuto, ancora e ancora.
I numeri che restano "calmi" e non diventano enormi fanno parte dell'Insieme (la macchia nera). Quelli che "esplodono" verso l'infinito vengono scartati.
Perché quei colori spettacolari?
I colori che vedi nelle immagini non appartengono all'Insieme, ma descrivono i "perdenti". Rappresentano quanto velocemente un numero è diventato enorme: il blu potrebbe indicare un numero che è esploso subito, il rosso uno che ha resistito più a lungo prima di scappare via.
Un'opera d'arte infinita: L'Insieme di Mandelbrot è stato definito "l'oggetto più complesso dell'universo". Contiene al suo interno infiniti dettagli: più ti avvicini, più scopri nuove forme, galassie e versioni in miniatura di se stesso.