El conjunt de Mandelbrot¶
El conjunt de Mandelbrot és una coneguda forma fractal. Aquest conjunt es defineix usant una successió de nombres complexos. A partir d’un nombre complex c qualsevol, es defineix la successió Z(c) com
Llavors, el conjunt de Mandelbrot està format pels valors c pels quals la successió queda acotada (no divergeix). És a dir, un valor complex c pertany al conjunt de Mandelbrot si, en aplicar la iteració repetidament, els termes de la successió es mantenen dins uns límits independentment de com de gran sigui n.
Deseu al fitxer mandelbrot.py el generador i la funció següents:
Escriviu el generador següent:
- mandelbrot.seq_mandelbrot(c)¶
Donat un complex c, genera la seqüència (infinita) de complexos de la successió Z(c). Tant el paràmetre c com els elements de la seqüència produïts seran nombres complexos de Python.
Per exemple:
>>> import mandelbrot >>> it = mandelbrot.seq_mandelbrot(-0.5+0j) >>> for i in range(10): ... z = next(it) ... print("(%.4f %.4f)" % (z.real, z.imag)) (0.0000 0.0000) (-0.5000 0.0000) (-0.2500 0.0000) (-0.4375 0.0000) (-0.3086 0.0000) (-0.4048 0.0000) (-0.3362 0.0000) (-0.3870 0.0000) (-0.3502 0.0000) (-0.3773 0.0000)
Escriviu la funció següent:
- mandelbrot.divergeix(c, num)¶
Donat un complex c i un nombre màxim d’iteracions num, retorna:
el primer valor de n (0<=n<num) pel qual ja sabem segur que la seqüència Z(c) divergeix. Sabrem que divergeix si el mòdul del terme n-èssim de Z(c) és més gran que 2,
-1 si el mòdul de cap dels num primers termes de la seqüència Z(c) no és més gran que 2.
Per a resoldre el segon apartat cal que useu l’iterador del primer apartat.
Per exemple:
>>> mandelbrot.divergeix(0+0j, 10) -1 >>> mandelbrot.divergeix(2+5j, 10) 1 >>> mandelbrot.divergeix(0.2+0j, 100) -1 >>> mandelbrot.divergeix(0.2+1.4j, 100) 2
Disposeu dels fitxers mandelbrot-seq_mandelbrot.txt i mandelbrot-divergeix.txt amb jocs de prova.
Solució
Disposeu d’una solució al fitxer mandelbrot.py.