Fractais de Newton Versão 2026.04.27 f(z)=z^5 -1
####################################################### # Fractais de Newton # v. 2026.04.27 ############################################################## # # Carlos Paulo A. Freitas (cpaulofonline@gmail.com) # https://zonaexacta.blogspot.com # https://sites.google.com/view/cpaulof-prog-calc # ####################################################### import kandinsky,math LARGURA = 320 ALTURA = 222 # Area a percorrer X_MIN = -2.0 X_MAX = 2.0 deltaX=(X_MAX-X_MIN)/(LARGURA-1) Y_MIN =-ALTURA/2*(X_MAX-X_MIN)/LARGURA Y_MAX = ALTURA/2*(X_MAX-X_MIN)/LARGURA deltaY=(Y_MAX-Y_MIN)/(ALTURA-1) M = 45 # maximo de iteracoes E = 1E-14# E (epsilon)= margem de erro ...vou usar a mesma para tudo #Cores: vou deixar 9 cores F=255 cores = [ [0,0,0], #0 preto [F,F,F], #1 branco [F,0,0], #2 vermelho [0,F,0], #3 verde [0,0,F], #4 azul [F,0,F], #5 violeta [F,F,0], #6 vermelho+verde= [0,F,F], #7 [204,153,0] #8 ] N_COLORS=9 # Funcao complexa def f(z): return z*z*z*z*z-1 # Derivada def df(z): return 5*z*z*z*z def FractalNewton(): # desenhar o fractal nzeros=0 #numero de zeros que ja apareceram zero=[] #lista dos zeros que ja apareceram zero_=-1 #posicao do zero actual na lista for k in range(LARGURA): C=0 #nivel de escuridao x = X_MIN + k*deltaX oldx = x - deltaX for l in range(ALTURA): y = Y_MIN+(ALTURA-l)*deltaY z = complex(x, y) oldz = complex(oldx, y+deltaY) m=0 print("(",k,",",l,"), nzeros=",nzeros) while(m<M and (abs(z-oldz))>=E): oldz=z z = z - f(z) / df(z) # Formula recursiva do metodo de Newton if (abs(z-oldz) < E): # Testar se z ja a variar pouco if nzeros==0: zero_=0 zero.append(z) nzeros = nzeros + 1 print("Numero de zeros=",nzeros,":",z) else: estanalista=False for j in range(nzeros): estanalista=(abs(z-zero[j])<1E-7) if estanalista: zero_=j break if( not estanalista ): zero.append(z) zero_=nzeros nzeros = nzeros + 1 print("Numero de zeros=",nzeros,":",z) break cor=zero_ if (zero_==0): cor=6 #amarelo elif zero_==1: cor=4 #azul elif zero_==2: cor=2 #vermelho elif zero_==4: cor=5 C=m/(M+0.0);C=1-math.sin(C*math.pi/2); col = kandinsky.color(int(C*cores[cor][0]),int(C*cores[cor][1]),int(C*cores[cor][2])) kandinsky.set_pixel(k, l, col) else: col = kandinsky.color(cores[0][0],cores[0][1],cores[0][2]) kandinsky.set_pixel(k, l, col) m=m+1 FractalNewton()