Ecco una piccola sceneggiatura che ho scritto per creare frattali usando il metodo di Newton.Come velocizzare la generazione di frattali con gli array numpy?
import numpy as np
import matplotlib.pyplot as plt
f = np.poly1d([1,0,0,-1]) # x^3 - 1
fp = np.polyder(f)
def newton(i, guess):
if abs(f(guess)) > .00001:
return newton(i+1, guess - f(guess)/fp(guess))
else:
return i
pic = []
for y in np.linspace(-10,10, 1000):
pic.append([newton(0,x+y*1j) for x in np.linspace(-10,10,1000)])
plt.imshow(pic)
plt.show()
sto usando array NumPy, ma comunque ciclicamente ogni elemento 1000-by-1000 linspaces applicare la funzione newton()
, che agisce su un singolo indovinare e non un intero array.
La mia domanda è questa: Come posso modificare il mio approccio per sfruttare meglio i vantaggi degli array di numpy?
P.S .: Se si desidera provare il codice senza attendere troppo a lungo, è meglio utilizzare 100 per 100.
Sfondo aggiuntivo:
Vedere Metodo di Newton per trovare gli zeri di un polinomio.
L'idea di base del frattale è di verificare le ipotesi nel piano complesso e contare il numero di iterazioni per convergere a zero. Questo è il motivo della ricorsione in newton()
, che in definitiva restituisce il numero di passaggi. Un'ipotesi nel piano complesso rappresenta un pixel nell'immagine, colorato dal numero di passaggi alla convergenza. Da un semplice algoritmo, ottieni questi splendidi frattali.
grazie per avermelo chiesto. questo mi sta aiutando a capire come renderli –