domingo, 23 de octubre de 2011

El conjunto de Mandelbrot

Selecciona un área con el ratón para ampliarla (click & drag).


Corria el año 1985 cuando cayo en mis manos un ejemplar de Scientific American de ese mismo año. En el, un excelente artículo de A.K. Dewdney me introducia por primera vez en el mundo de los fractales y en especial al conjunto de Mandelbrot. A pesar a la ingente candidad de horas que tuve ‘hechando humo’ a mi pobre Commodore 64 apenas pude visualizar unas toscas imágenes de algún rincon de ese precioso fractal . Este recibe el nombre de Benoit Mandelbrot, matemático que trabajo en los laboratorios de IBM. En realidad se considera el padre de los fractales a Gaston Julia, pero fue Mandelbrot quien puedo hacerlos famosos y accesibles gracias a la aparición de los ordenadores. Podemos decir que un fractal es un objeto semigeométrico cuya estructura básica se repite a diferentes escalas aunque no de manera exacta, sino irregular o fragmentada.

El conjunto de Mandelbrot es un subconjunto de los números complejos que cumple una determinada propiedad. Podemos situar los números complejos en un plano. El plano complejo esta formado por pares de números, el primero real y el segundo imaginario. En la imagen podemos ver un esquema con el resumen de las operaciones entre número complejos que utilizaremos.

Sabemos que un número pertenece al conjunto si el límite de aplicar repetidamente una determinada función sobre el no tiende al infinito. En realidad lo que vamos a hacer es aplicar la función un número finito de veces y ver que 2 situaciones podemos encontrarnos. En el momento que la distancia al centro del plano complejo del resultado sea igual o mayor que 2 podemos concluir que ese punto no pertenece al conjunto, pues ese es el punto de inflexión a partir del cual crecerá hacia el infinito. Si una vez alcanzado el límite de iteraciones su distancia al centro no excede de 2, podemos considerar que pertenece al conjunto.

La función utilizada para determinar si un número pertenece al conjunto es la de la imagen. Inicialmente consideramos z igual a 0 y c, es el número complejo del que estamos calculando su pertenencia al conjunto. Para comprobar la distancia del resultado al centro del plano obviaremos la raiz cuadrada y compararemos con 4, asi nos ahorramos un operación.

Como obtenemos esos magníficos dibujos ? Basta con calcular esta función para cada uno de los puntos en nuestra imagen. A la salida del bucle por alguno de los 2 motivos indicados arriba, coloreamos el punto correspondiente en la imagen según el el número de iteraciones necesarias para salir del bucle y su correspondencia con el color definido.

Os dejo una versión distinta del algoritmo realizada en LISP (Mandelbrot-LISP), aunque sin todas las funcionalidades de la versión flash. Hay que definir el area fijando las variables y la salida es por pantalla en modo caracter.


domingo, 9 de octubre de 2011

Introducción

Compartir los algoritmos y curiosidades informáticas por los que he sentido un interés especial o han ocupado un lugar destacado en mi carrera es el objetivo del presente blog. Algunos de estos trabajos se remontan al inicio de mis primeros programas con el Commodore 64. Trabajos que a pesar del tiempo transcurrido continúan estando tan vigentes y actuales como lo está el fractal del conjunto de Mandelbrot, objeto de mi primer post. He tomado la decisión de utilizar algunos lenguajes de programación en los que ofrecer alguna versión,siempre que me sea posible, de los algoritmos comentados. De entre todos los que he conocido y utilizado mi decisión se ha decantado por el LISP, a mi entender uno de los lenguajes más potentes y que es más asequible desde el punto de vista docente y el AS3 (flash) para crear alguna versión online de los programas. De entre todas las versiones de Common Lisp finalmente he escogido la versión Express de Allegro Lisp. Mi selección se ha basado principalmente porque ofrece un potente entorno de programación que no precisa de conocimientos tan expertos en informática para su puesta en marcha como otras versiones que he analizado.