<jupyter_start><jupyter_text>Ejercicio simple - Newton Un ejercicio sencillo para pintar fractales de Newton (Secante), se utiliza el método numérico de Newton (Secante) para establecer a velocidad de convergencia  a una raíz desde un complejo $a+b i$. Un paquete muy importante para hacer gráficos y otro para generar imagenes (`matplotlib` y `PIL`)<jupyter_code>import matplotlib.pyplot as plt
from PIL import Image
imgx=800
imgy=800
image=Image.new("RGB",(imgx,imgy))
image.putpixel((100,100),(255,255,255))
image<jupyter_output><empty_output><jupyter_text>La definición de la imagen es una grilla, identificaremos cada pixel como un complejo en el cuadrado:$$ C=\{a+bi;-1\leq a \leq 1 \text{ y } -1\leq b \leq 1\}$$<jupyter_code>xa=-1
xb=1
ya=-1
yb=1
maxit=202 #máximo número de iteraciones
h=1e-6 
eps=1e-3<jupyter_output><empty_output><jupyter_text>Iniciaremos con la función $f(z)=z^3-1$.<jupyter_code>def f(z):
    return z**3-1<jupyter_output><empty_output><jupyter_text>Método de la secante:<jupyter_code>def secantemetodo(z):
    for i in range (maxit):
        dz=(f(z+complex(h,h))-f(z))/complex(h,h)
        z0=z-f(z)/dz
        if abs (z0-z)<eps:
            break
        z=z0
    return i,z
secantemetodo(-10+2j)<jupyter_output><empty_output><jupyter_text>Calculamos los valores en cada punto de la grilla representada en los pixeles:<jupyter_code>for y in range (imgy):
    zy=y*(yb-ya)/(imgy-1)+ya
    for x in range (imgx):
        zx=x*(xb-xa)/(imgx-1)+xa
        z=complex(zx,zy)
        i,z=secantemetodo(z)
        r=i*8
        g=i*8
        b=i*8
        image.putpixel((x,y),(r,g,b))<jupyter_output><empty_output><jupyter_text>Visualizamos la imagen obtenida<jupyter_code>image<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup