Trying to get Julia fractal to run fast in python [WIP].
Soit la suite $$ \left(z^2_i +c\right)_i,n\in \mathbb{N}. $$ l'ensemble de Julia qualifie les points définissant la frontière dans l'espace des \(z_0\) entre la zone où elle est bornée et celle où elle diverge. Cette frontière est fonction de la variable complexe \(c\).
Afin de visualiser l'ensemble fractal, nous allons effectuer une cartographie du domaine des \(z_0\) et tester la convergence de la suite en tout ces points. C'est à dire rechercher les ensembles $$ Q_c^{k} = \left\{z_0 : |z_k| \le R(c) \right\} $$ pour chaque niveau de convergence \(k\), chacun sera associé à un niveau de gris dans l'image finale. Pour calculer le niveau de convergence \(k\) d'un \(z_0\), nous pouvons écrire une fonction du style:
def suite(z0, c=0.0, kmax=25):
zk = z0
Rc = max(2, abs(c))
k = 0
while abs(zk) <= Rc and k < kmax:
zk = zk**2 + c
k += 1
return k
où \(k_{\text{max}}\) est un garde-fou pour éviter de rester coincé dans le cas où la suite n'est pas bornée.
Une fois cette suite définie, il nous reste à cartographier tous les \(z_0\) potentiellement intéressants
import numpy as np
resolution = 256
realpart = np.linspace(-2, 2, resolution)
imagpart = np.linspace(-2, 2, resolution)
z0 = np.vstack(np.meshgrid(realpart, imagpart))
L'axe des abscisses représente donc les parties réelles de \(z_0\) croissantes et l'axe des ordonnées, les parties imaginaires.
Nous pouvons enfin en finir en calculant le \(k\) de chaque pixel de cette carte des \(z_0\).
Ce résultat n'est pas exactement ce à quoi on s'attend quand on parle de fractal, la clé est de modififier la valeur de \(c\).
Il faudra aussi modifier la résolution et les valeurs de \(k_{max}\) pour bien visualiser le contraste et les détails.
Coming soon
home