Introduction
Ce laboratoire vous guidera dans la génération d'une représentation ombrée et normalisée en puissance de l'ensemble de Mandelbrot à l'aide de la bibliothèque Matplotlib de Python.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques requises
Tout d'abord, nous devons importer les bibliothèques que nous allons utiliser : NumPy, Matplotlib et Colors.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
Définir la fonction de l'ensemble de Mandelbrot
Ensuite, nous allons définir une fonction qui génère l'ensemble de Mandelbrot. La fonction prend plusieurs paramètres :
xmin,xmax,ymin,ymax: les valeurs minimales et maximales pour les axes x et yxnetyn: le nombre de points à générer le long de chaque axemaxiter: le nombre maximum d'itérations à effectuer pour chaque pointhorizon: la valeur maximale à laquelle considérer qu'un point fait partie de l'ensemble
def mandelbrot_set(xmin, xmax, ymin, ymax, xn, yn, maxiter, horizon=2.0):
X = np.linspace(xmin, xmax, xn).astype(np.float32)
Y = np.linspace(ymin, ymax, yn).astype(np.float32)
C = X + Y[:, None] * 1j
N = np.zeros_like(C, dtype=int)
Z = np.zeros_like(C)
for n in range(maxiter):
I = abs(Z) < horizon
N[I] = n
Z[I] = Z[I]**2 + C[I]
N[N == maxiter-1] = 0
return Z, N
Générer l'ensemble de Mandelbrot
Maintenant, nous allons générer l'ensemble de Mandelbrot en appelant la fonction mandelbrot_set avec les paramètres souhaités. Cela nous donnera deux tableaux :
Z: les valeurs finales des nombres complexes sur lesquels nous avons itéréN: le nombre d'itérations effectuées pour chaque point avant qu'il ne soit déterminé comme faisant partie de l'ensemble
xmin, xmax, xn = -2.25, +0.75, 3000 // 2
ymin, ymax, yn = -1.25, +1.25, 2500 // 2
maxiter = 200
horizon = 2.0 ** 40
log_horizon = np.log2(np.log(horizon))
Z, N = mandelbrot_set(xmin, xmax, ymin, ymax, xn, yn, maxiter, horizon)
Normaliser les données
Pour créer une représentation ombrée et normalisée en puissance de l'ensemble de Mandelbrot, nous devons normaliser nos données. Nous le ferons en utilisant la formule suivante :
M = N + 1 - np.log2(np.log(abs(Z))) + log_horizon
with np.errstate(invalid='ignore'):
M = np.nan_to_num(N + 1 - np.log2(np.log(abs(Z))) + log_horizon)
Créer le graphique
Maintenant que nous avons nos données normalisées, nous pouvons créer le graphique. Nous utiliserons la fonction imshow pour afficher les données sous forme d'image, et nous ajouterons également du texte au graphique pour indiquer ce que nous regardons.
dpi = 72
width = 10
height = 10*yn/xn
fig = plt.figure(figsize=(width, height), dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1], frameon=False, aspect=1)
light = colors.LightSource(azdeg=315, altdeg=10)
M = light.shade(M, cmap=plt.cm.hot, vert_exag=1.5,
norm=colors.PowerNorm(0.3), blend_mode='hsv')
ax.imshow(M, extent=[xmin, xmax, ymin, ymax], interpolation="bicubic")
ax.set_xticks([])
ax.set_yticks([])
year = time.strftime("%Y")
text = ("L'ensemble fractal de Mandelbrot\n"
"Rendu avec matplotlib %s, %s - https://matplotlib.org"
% (matplotlib.__version__, year))
ax.text(xmin+.025, ymin+.025, text, color="white", fontsize=12, alpha=0.5)
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à générer une représentation ombrée et normalisée en puissance de l'ensemble de Mandelbrot à l'aide de la bibliothèque Matplotlib de Python. Nous avons accompli cela en définissant une fonction pour générer l'ensemble, en normalisant les données et en créant un graphique à l'aide des données normalisées. Cette technique peut être appliquée à d'autres ensembles de données pour créer des images visuellement attrayantes et informatives.