M y J en Fractint

 
Si acabas de entrar en Fractint ya tendrás al conjunto de Mandelbrot como imagen por defecto en tu pantalla. Si no es así, selecciónalo en formula fractal como mandel o bien selecciona Fractals/Reset All Options. Este es el aspecto que presenta:
Como ya sabemos, Fractint interpreta cada punto (x,y) de la pantalla como un número complejo: c=x+i*y. Toma un z0=0 y un pixel c.  Computa z1=z02+c. E itera zn+1=zn2+c.
Por defecto en el menú de opciones básicas, Fractint itera la ecuación maxiter = 150 veces. Podemos cambiar este parámetro pulsando " X" y cambiando el valor en el menú.

El conjunto de puntos cuyo módulo es menor que 2 después de 150 iteraciones (o maxiter ) forman el conjunto de Mandelbrot: el color azul central. Todos los contornos rugosos y  más allá (el exterior a bandas en la imagen), son puntos que exceden el valor 2 después de 149 iteraciones (el contorno más cercano al conjunto de Mandelbrot mismo, 148 iteraciones el siguiente, etc.).

En realidad Fractint testa que x2+y2 sea menor que 4. De modo que se evita extraer la raíz cuadrada para calcular el módulo. Así computa más rápido. Al valor 4 se le conoce como bailout value (en este caso el 0 por defecto corresponde a 4). Cuando la iteración alcanza este valor se detiene. Podemos cambiarlo en las opciones del menú Z. A esta forma de computar el fractal se le denomina de tiempo de escape. Por tiempo de escape se entiende el número de iteraciones necesarias para superar el bailout value (4 en este caso). Para el conjunto M estamos detectando las órbitas  de los puntos del plano complejo que no escapan a un círculo centrado en (0,0) de radio 2. Si en maxiter iteraciones, la órbita (valores de las iteraciones sucesivas) no nos conduce a valores del módulo mayores que 2 pintamos el punto con color Inside Color. El valor por defcto es el azul (número 1).

Observa en la imagen la diferencia al iterar 150 o 10.000 veces. A medida que hacemos zoom en la imagen un número menor de iteraciones desdibuja el resultado "real". Lo ideal es alcanzar un compromiso entre número de iteraciones (tiempo de cómputo) y resolución. Fractint utiliza maxiter para determinar que si en ese número de iteraciones la órbita no ha escapa entonces jamás lo hará. Pero eso no tiene por qué ser cierto, depende de la velocidad de escape. Justamente los puntos frontera son los más delicados en este sentido. Un punto que no escape en 150 iteraciones puede llegar a hacerlo en 10000.
 

maxiter = 150 
 
maxiter=10000 
 
 
 
 
 
 
 

Hagamos hincapié en que el conjunto de Mandelbrot es la zona interior pintada en azul. Las barrocas bandas multicolores que contornean a M no pertenecen a él.

Para verlo con claridad, en el menú X coloca Outside en Color (eso hará que no dependa del tiempo de escape como ocurre cuando la opción está en Iter ) y fija el color que quieras para el interior y el exterior en: Inside Color y Outside Color. De hecho, los programadores de Fractint desarrollaron estas opciones al recibir la carta de una profesora. En ella expresaba su deseo de ver solamente el conjunto de Mandelbrot y no las franjas exteriores, para dejar bien claro a sus alumnos qué era exactamente el conjunto M. En el siguiente ejemplo hemos puesto valores 0=negro y 255=blanco respectivamente.

En esta imagen se aprecia la complejidad de la frontera del conjunto de Mandelbrot. Mitsuhiro Shishikura probó en 1991 que la dimensión fractal del borde es 2. Aún nadie ha demostrado que el conjunto sea localmente conexo y, suponiéndolo, no se conoce tampoco el valor exacto del área. Aunque a base de computación se sabe que es 1,50659177 ...

   
Habrás observado que si sigues las instrucciones anteriores el resultado que obtienes es:   
   
Donde no aparecen todos los filamentos de la figura que os mostramos. Da más iteraciones en el menú X. Por ejemplo: maxiter=15000. Para corregirlo además has de acceder al menú de opciones extendidas pulsando la tecla Y . Ahí encontrarás la opción Distance Estimator a 0. Colocalá a 1 y voilà:
   
El método simplemente hace de un pixel de ancho los puntos de los filamentos que de otra manera no serían exhibidos. Aún así perdemos la lanza de la izquierda. Para remediarlo vuelve al menú X y escoge Passes/2-Pass.

¿Por qué ahora sí aparece la lanza? Existen varios algoritmos a la hora de dibujar (opción Passes) la imagen fractal escogida en Formula Fractal: Single-pass (1-Pass), Dual-pass (2-Pass), Solid-guessing (S-Guess), Boundary Tracing (B-Trace) o Tesseral. En principio, si eres un purista, deberías utilizar uno de los dos primeros métodos que trabajan dibujando punto a punto a partir de la iteración. Por defecto Fractint escoge Solid-guessing que es más rápido pintando, pues estima colores de un pixel por interpolación de su vecinaje ya computado por iteración. Por ese motivo la punta de lanza se hacía invisible. Cada uno de los restantes métodos utiliza algún tipo de interpolación que aumenta la velocidad de dibujo pero que puede introducir resultados que no son estrictamente reales. Si quieres comprobar la cantidad de imagen que estos algoritmos dejan sin calcular accede a la opción Fill Color del menú X, asigna un valor (color) y así utilizarán ese color fijado en todos los puntos interpolados. Aquí te presentamos B-trace y Tesseral con Fill Color=25. Para más información consulta la ayuda on-line o el help de Fractint.

 
Recordemos que el conjunto M es como un catálogo infinito de todos los conjuntos J de ecuacion fc(z)=z2+c. Fractint nos ofrece una forma sencilla de observar el conjunto de Julia asociado a cada punto del conjunto M. Simplemente sitúa el puntero del ratón en un punto del gráfico y pulsa el botón derecho. Inmediatamente aparecerá el conjunto J con valor c igual a la coordenada en que estabas situado. Para determinar exactamente las coordenadas en las que te encuentras ves a View/Coordinate Box. En la tabla de abajo te presentamos cuatro ejemplos con los color interno a 0 y externo a 255 como vimos anteriormente.
  
Coordenadas (0,0)
 
Coordenadas (0.25,0)   
Coordenadas (-1.22, 0) 
 
Coordenadas (-0.11,-0.63) 
 
 
@ El conjunto de Mandelbrot es conexo. Utiliza el zoom y la paleta de color que encuentres más adecuada para comprobarlo con aquellas zonas que parecen isoladas. Comprobarás que en realidad no lo están.
 
@ ¿Quieres printar un conjunto de Mandelbrot tamaño gigante? Accede a la página de M. Romera del  Instituto de Física Aplicada del Consejo Superior de Investigaciones Científicas.El libro sobre sitemas dinámicos es...
 
@ Observa que maravillas de conjuntos de Mandel, de Julia y cuencas de Newton.
@ Explora el efecto que produce variar el número de iteraciones en la coloración del conjunto de Mandelbrot. Aquí tienes maxiter=10. ¿Puedes explicar el por qué de la variación de los colores en el contorno? 
 
@ En la versión para Windows de Fractint no existe la opción para ver órbitas, pero en la versión para DOS sí. Si has instalado esta versión puedes comprobarlo pulsando la tecla O. Aparecerá entonces una pequeña ventana con una espiral formada por puntos. Se tratan de los sucesivos valores que toma z al ser iterada. El z inicial concreto que aparece hace referencia al punto donde tienes situado el puntero de ratón. La tecla C dibuja círculos en vez de puntos y la tecla L los une através de líneas. De hecho en la versión de DOS puedes explorar los conjuntos J con mayor comodidad. Apretando la barra espaciadora aparece una ventanilla semejante a la de órbitas, pero que esta vez muestra el conjunto J asociado al punto señalado por el ratón. Para ver el conjunto J ocupando toda la pantalla pulsa de nuevo la barra. Y para volver al conjunto M pulsa una vez más.
Ya que estamos, otra opción interesante que tampoco está presente en la versión para Windows es la de ciclo de color. Si apretas la tecla C la paleta de colores predeterminada para la imagen que tienes en pantalla irá rotando. El efecto es verdaderamente impresionante. Puedes aumentar la velocidad de rotación con las flechas de teclado arriba/abajo. Las teclas +/- invierten el sentido de giro. Apreta la barra espaciadora si quieres congelar la imagen y Esc para salir del modo de rotación de colores.  
  
 
Observa que en la opción Outside del menú X existen otras opciones: Real, Imag, Mult, Summ. Cada una de ellas (representadas sucesivamente en esta columna) asigna el color a cada pixel de la pantalla mediante un algoritmo diferente al de tiempo de escape de Ite. Estas opciones pueden proporcionar efectos de profundidad interesantes en algunos fractales que representados clásicamente no poseen un interés estético especial. Experimenta con mapas de color distintos. ¿Puedes explicarnos como funcionan?
   
   
   
  
     
 
@ Escoge lambda en Fractal Formula. En menú Z pon Real Part of Parameter= 0.5. Pon el interior en color azul (1) y el exterior a color negro (0). El resultado es la primera imagen. Ahora vayamos al menú de opciones extendidas Y. Pica en Finite Attractor . El resultado es la segunda imagen. Fractint nos muestra los distintos puntos atractores del conjunto prisionero con sus cuencas de atracción coloreadas.
 
 
 
@ Decomposition. En la pantalla de opciones básicas X nos encontramos con esta opción . Es una manera de colorear el resultado de nuestras iteraciones de acuerdo con el cuadrante del plano complejo en que se encuentra el valor complejo final de nuestra iteración. 
Si usamos el valor 4 como parámetro se asigna a cada cuadrante un color diferente. Si escogemos 2 (descomposición binaria), puntos en cuadrantes alternos poseen el mismo color. El parámetro de descomposición determina el número de secciones en las que se divide el plano complejo. Aquí tienes ejemplos del conjunto M en mapa painjet.map con valor decomposition =2, 4 y 8 respectivamente.
 

   
 
@ El algoritmo descrito anteriormente es lento. Existe una alternativa que se denomina el algoritmo inverso o Julia inverso. Repitamos otra vez lo visto. La ecuación básica que estamos iterando es:
zn+1 =zn2 +c.  
Donde c está fijada y especifica un conjunto J particular.  Lo que queremos saber es si el z inicial del plano complejo es atraído por el (0,0) o repelido al infinito (de hecho podemos tomar al infinito como un punto atractor y decir: "atraído por el infinito". Así en el lenguaje de sistemas dinámicos, que ya empleamos al hablar del método de Newton, estamos hablando de cuencas de atracción. Estamos determinando cuáles son las cuencas de atracción del (0,0) (el llamado conjunto prisionero) y del infinito (conjunto de escape). Los restantes puntos que no pertenecen a la cuenca de uno u otro conforman el conjunto J propiamente dicho.

El truco del algoritmo inverso consiste en invertir la ecuación que estamos iterando. Eso la convierte en:  

zn+1 = sqrt(zn -c).  
Y para esta ecuación iterada, lo que antes eran puntos atractores, se convierten en repulsivos y la frontera se convierten en atractor. Así el propio conjunto J se convierte en el atractor de la iteración. Y bajo este proceso se nos dibujará directamente el contorno.

Lamentablemente, ciertas partes del conjunto J poseen cuencas de atracción ostensiblemente mayores que otras. Y así, por este método, algunos puntos serán redibujados muchas veces. Existe un problema añadido y es que cada vez que realizamos la raíz cuadrada obtenemos dos posibles resultados (si el valor no es degenerado). Fractint sortea estos problemas con variantes distintas.

Roger Bagula y  Paul Bourke utilizan el algoritmo inverso para generar estas estrellas de Julia: