Je suis en train d'écrire une fonction qui retourne la longueur d'un ensemble de Julia où avant qu'il ne passe un certain seuil, 2, avec un nombre maximum d'itérations de 255.Haskell: Julia Set fonction
j'ai fonction f z = z * z - (a :+ b)
J'itère cette fonction sur un nombre complexe jusqu'à ce que le magnitude
de a + bi
croise 2 puis compte le nombre d'itérations qu'il a fallu.
ma première tentative a été
iter1 = genericLength . take 255 . takeWhile ((<=2) . magnitude) . iterate f
mais il est très lent.
ma deuxième tentative est
iters2 x y = iters2' f ((<=2) . magnitude) (a :+ b)
iters2' f' p c = len c 0
where
len c acc = if p c && acc < 255 then len (f' c) (acc + 1) else acc
Ceci est encore lent, étant donné que je vais devoir faire des millions d'itérations.
Est-ce que quelqu'un peut vous aider à accélérer le processus?
En outre, y a-t-il list fusion
intégré dans les fonctions de liste ?
Comment faut-il des millions d'itérations si vous plafonner le nombre d'itérations à 255? – Glubus
'genericLength' est (ou était _?) Une expérience un peu idiote pour comparer des longueurs avec des types de nombres paresseux, et horriblement inefficace. En pratique, il est toujours préférable d'utiliser simplement la longueur (bien que la meilleure façon de vérifier les longueurs soit de les éviter). – leftaroundabout
Comment le compilez-vous? Avez-vous essayé le profilage? – MathematicalOrchid