Mi fractal Julia (I)

  Los fractales son imágenes que tienen la particularidad de verse siempre iguales a distintas escalas. Es algo parecido a lo que sucedería si alguien sujetara una foto en la que sale el mismo sujetando esa misma foto, y esta imagen se fuese repitiendo indefinidamente a escalas tanto mayores como menores. Un ejemplo muy sencillo es el de una espiral. En cualquier caso hay autosimilitud, que es la característica comentada antes.

800px-Fractal_Broccoli

Es interesante comprobar en la naturaleza ejemplos de fractales. Realmente esta lleno de ellos, por ejemplo en los copos de nieve (en el contorno), en las raíces de los arboles (cada rama se separa en ramas que se separan en ramas…) o en la espiral de una caracola. La imagen que adjunto también es un ejemplo típico de fractal en la naturaleza bastante impresionante por cierto, el del brócoli Romanescu. Aunque estrictamente hablando esos fractales no estarían “completos”, ya que en teoría una imagen fractal no termina nunca de repetirse, y en la naturaleza si existe ese final (si haces mucho zoom la imagen si acaba repitiéndose , y si te alejas mucho también encuentras que se acaba).

Este tipo de imágenes se pueden representar gráficamente siguiendo algún patrón matemático relativamente simple, habitualmente basados en el cálculo de iteraciones e imponiendo alguna condición al valor final. Un caso particular es el conjunto Julia. Consiste en imponer una condición sobre el valor final de una ecuación en diferencias. Una ecuación en diferencias no es más que una sucesión, pero definida por recurrencia en lugar de explícitamente. Me explico. Primeros veamos que es una sucesión. Es un conjunto de valores discretos (es decir, que a diferencia de los continuos, entre ellos no hay infinitos valores) que tienen alguna relación entre si expresable matemáticamente. Por ejemplo: {1,2,4,6,8,10,…} son los primeros valores de la sucesión que puede representarse explícitamente como X(k)=2^k, (para cada valor de k empezando por k=0, el valor de la sucesión X en k es 2 elevado a k). Este ejemplo de sucesión también puede expresarse por recurrencia: X(k+1)=X(k)*2 (el valor siguiente de la sucesión es el anterior multiplicado por 2, empezando por X(0)=1). Esta última era la ecuación en diferencias. En este caso, la sucesión se puede expresar fácilmente de las dos formas, pero no siempre es así. Es más, en ocasiones una sucesión que se defina por recurrencia no tiene su expresión explícita. Realmente, encontrar la expresión explícita a partir de la ecuación en diferencias es resolver esa ecuación, y no siempre se puede. Analíticamente (es decir con papel, bolígrafo y unos cuantos pasos), sólo se pueden resolver con relativa facilidad las ecuaciones en diferencias que sea lineales (la incógnita X(k) y las sucesivas X(k+1),X(k+2),… aparecen sumadas entre si y multiplicadas por algún número) y que sean invariantes en el “tiempo” (se entiende de por “tiempo” el valor de k, invariantes en k significa que las constantes mencionadas antes no dependen de k). En el ejemplo puesto antes, X(k+1)=X(k)*2 es lineal e invariante en k, y su solución es X(k)=2^k.

Para dibujar el fractal de Julia, la ecuación en diferencias que se utiliza es la siguiente:

X(k+1) = X(k)^2 + C ,

donde C es un número complejo (un número complejo es un número con dos partes: la real (a) y la imaginaria (b) de manera que se puede expresar de la forma a+i*b, donde i es la raíz cuadrada de –1). Además, necesitamos un valor inicial, un X(0), para poder empezar a iterar. Para cada valor que escojamos de C y de X(0), tendremos una sucesión (una lista de valores discretos) diferente. Puede que esa sucesión, para valores de k cada vez mayores, se vaya acercando cada vez más a un cierto valor sin llegar jamás. A ese valor final le llamaremos límite, y si no tiende a infinito, diremos que la sucesión converge. Pues bien, para cada C, y para distintos valores de X(0), resulta que esta sucesión a veces es convergente y a veces no. Sobre esa particularidad se imponen las condiciones.

  El programa que utilizo para hacer los gráficos es MATLAB 6.5 (se que hay otros programas para dibujar fractales pero yo aprendí a hacerlos en este en un principio así que todo lo que he ido haciendo a sido en este). La regla para lograr el dibujo consiste en moverse a través del grafico como si fuese una cuadrícula. Como no puedo pasar por los infinitos puntos del gráfico (el ordenador tiene memoria finita, y aunque tuviera memoria infinita tardaría infinito tiempo en dibujarlo) voy dando pequeños ‘saltitos’ de entre los puntos escogidos del gráfico. Contra más puntos elija para dibujar, más detallado será el dibujo pero también más tiempo emplearé en dibujarlo (los informáticos lo saben mejor que yo, pero tengo entendido que el tiempo que necesita un programa para ejecutarse no siempre aumenta de forma lineal con el ‘trabajo’ que tiene que hacer. En ocasiones aumenta exponencialmente, con lo cual pedirle más trabajo del que necesito al ordenador me puede dejar esperando toda la mañana). Estos puntos del gráfico por los que voy pasando, tiene cada uno sus coordenadas (x,y). Si pienso en esas coordenadas x e y como los valores de la parte real e imaginaria de X(0) respectivamente, obtendré un mapa de valores posibles iniciales para iterar, algunos convergentes y otros no. Todo esto, habiendo fijado un valor de C. Ahora, para dibujar, solo queda imponer alguna condición sobre esos puntos (sobre cada valor inicial).

JULIA SENCILLO

  Empezaré con el caso más fácil. El valor de C escogido es C=0.3+i*0.5. No es casualidad que para este valor de C el dibujo salga bien. No es que tenga suerte, es que ya sabía de antemano que este valor no me daría “problemas”. Más adelante investigaré como cambia la cosa al cambiar C. De momento, veamos que pasa en este caso. La ventana que usé para dibujar el fractal fue un cuadrado de 2.4 de longitud, centrado en el origen de coordenadas. Es decir, imaginaos los dos ejes de coordenadas y un cuadrado  centrado en el origen, cuyos lados están en el –1.2 al 1.2 tanto para la x como para la y. Bien, ahora imaginad que dividimos cada lado en 500 partes iguales, y dibujamos la cuadrícula. Es la hora de dar los ‘saltitos’ a cada punto que obtenemos (las esquinas de la cuadrícula), y a cada punto imponer la condición del límite.

  Esa condición consiste en comprobar si la iteración converge o no. El problema es que no puedo calcular valores de X hasta llegar a k infinito, de manera que “sólo” calculo los 100 primeros valores de la sucesión. Estrictamente hablando, esto no serviría para comprobar si una sucesión converge o no. Puede que aparentemente los valores no tiendan a infinito y sí lo hagan, pero tan lentamente que 100 iteraciones no sean suficientes para comprobarlo. Pero a efectos prácticos, solo puede hacerse así. Siempre podría llegar a las 1000 iteraciones en lugar de 100, pero tendríamos el mismo problema a otra escala. De momento, el valor 100 da buenos resultados. ¿Cómo decidir, con el valor “final” de las 100 iteraciones, que una sucesión converge o no? Pues bien, el criterio consiste en mirar el módulo (recordemos que son números complejos. Si los representamos con la parte real en el eje x y la imaginaria en el y, el módulo sería equivalente a la distancia del punto al origen). Si el módulo es muy grande, se considera que la sucesión tendía a infinito (se alejaba cada vez más del origen) y era divergente para ese valor concreto de X(0). ¿Cuando considero que es muy grande? Pues, como en lo de las 100 iteraciones, la elección es arbitraria. En mi caso, si el módulo es mayor de 10, la considero divergente.

  Así, en mi ejemplo, si el valor inicial hace que sea divergente pinto el punto de negro, si hace que sea convergente lo pinto de rojo. Imponiendo la condición del módulo sobre el valor después de 100 iteraciones de cada sucesión (para cada valor inicial según la posición en la cuadrícula), el dibujo es el siguiente:

Julia

  En las siguientes entradas, describiré como son los límites de las iteraciones en función del valor inicial y probaremos otros valores de C, para crear nuevos fractales.

#206

¿Qué te parece?

Crea una web o blog en WordPress.com

Subir ↑

Descubre más desde CompuGlobal HiperMegaNet

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo