
Gli insiemi di Julia sono un famoso esempio di frattali, che formano una classe di oggetti matematici complessi e intricati. Sono definiti come l’insieme dei punti nel piano complesso che rimangono limitati sotto l’iterazione di una funzione quadratica complessa del tipo ( f(z) = z^2 + c ), dove ( c ) è un parametro complesso. Variazioni nel valore di c producono frattali con strutture estremamente diverse e spesso sorprendenti.
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 | import numpy as np import matplotlib.pyplot as plt # Impostazioni width, height = 800 , 800 max_iter = 256 xmin, xmax = - 1.5 , 1.5 ymin, ymax = - 1.5 , 1.5 # Lista di numeri complessi c c_values = [ complex ( - 0.7 , 0.27015 ), complex ( 0.355 , 0.355 ), complex ( - 0.4 , 0.6 ), complex ( 0.37 , 0.1 ), complex ( - 0.70176 , - 0.3842 ), complex ( - 0.835 , - 0.2321 ), complex ( - 0.8 , 0.156 ), complex ( - 0.7269 , 0.1889 ), complex ( 0.3 , 0.5 ) ] # Creare una griglia di valori complessi x, y = np.linspace(xmin, xmax, width), np.linspace(ymin, ymax, height) z_values = np.array(np.meshgrid(x, y)).reshape( 2 , - 1 ).T z_values = z_values[:, 0 ] + 1j * z_values[:, 1 ] # Inizio del grafico 3x3 fig, axes = plt.subplots( 3 , 3 , figsize = ( 12 , 12 )) for i, c in enumerate (c_values): row = i / / 3 col = i % 3 ax = axes[row, col] # Calcolo del frattale Julia z = z_values.copy() image = np.zeros(z.shape, dtype = float ) mask = np.ones(z.shape, dtype = bool ) for k in range (max_iter): z[mask] = z[mask] * z[mask] + c mask = np.logical_and(mask, np. abs (z) < 8 ) image + = mask.astype( float ) image = image.reshape((width, height)) # Visualizzazione del frattale Julia ax.imshow(image, extent = (xmin, xmax, ymin, ymax), cmap = "hot" ) ax.set_title(f "c = {c}" ) plt.show() |
Il codice fornito rappresenta una visualizzazione grafica di nove diversi insiemi di Julia utilizzando la libreria Matplotlib
in Python
. Ecco una spiegazione dettagliata delle componenti principali:
- Impostazione della Griglia: La griglia di valori complessi è creata utilizzando
np.linspace
per generare vettori di valori reali e immaginari, e questi sono combinati in un array di numeri complessi. La griglia rappresenta i punti nel piano complesso che verranno iterati. - Iterazione e Calcolo del Frattale: Per ogni valore di ( c ) nell’elenco di numeri complessi
c_values
, l’algoritmo itera la funzione ( f(z) = z^2 + c ) su ogni punto della griglia. Utilizza una maschera logica (mask
) per tracciare quali punti rimangono limitati attraverso le iterazioni. L’immagine finale viene costruita sommando i valori della maschera attraverso le iterazioni, dando un’indicazione della velocità con cui i punti divergono. - Visualizzazione: La griglia di output è ridimensionata in una forma che corrisponde alla risoluzione dell’immagine e viene visualizzata utilizzando
imshow
. La mappa dei colori “hot” è scelta per rappresentare i valori, con i colori che indicano la velocità di divergenza dei punti. - Strutturazione del Grafico: Il codice utilizza una griglia di grafici 3×3, utilizzando
plt.subplots
, per mostrare i nove diversi frattali associati ai valori inc_values
. Ogni grafico è etichettato con il valore corrispondente di ( c ).
Il codice, in estrema sintesi, sfrutta le capacità di calcolo vettoriale di NumPy
e le funzionalità di visualizzazione di Matplotlib
per esplorare e visualizzare una famiglia di frattali complessa e affascinante. Le scelte di progettazione mirano a fornire un’analisi efficiente e una rappresentazione chiara e accattivante degli insiemi di Julia, illustrando come piccole variazioni nel parametro ( c ) possano produrre strutture notevolmente diverse.