Fractal de Julia

Descripción

Los fractales son patrones geométricos que se repiten a diferentes escalas y que muestran autosimilitud, es decir, la misma estructura se encuentra en diferentes niveles de detalle.

Informalmente, el conjunto Julia (en el contexto de sistema complejos) es el conjunto de funciones que dado un pequeño cambio produce cambios drásticos, esto es, el comportamiento de las funciones es caótico. Por lo que exite una gran variedad de funciones que cumplen estas condiciones.

La formal general para 2D del conjunto de Julia está asociado a esos puntos zCz\in \mathbb{C} tales que para una serie zn+1=f(z)z_{n+1}=f(z) con parámetro cCc\in \mathbb{C} no divergen (no tienden a infinito), siendo el punto inicial z0z_0 el punto del plano.

Modelo

En este reporte, nos centraremos en la polinomios cuádraticos (el más popular sistema complejo) para modelar una versión simple de los fractales de Julia. Tales polinomios cuádraticos pueden ser expresados como:

f(z)=z2+cf(z)=z^2+c

donde zz y c c (un parámetro) son números complejos.

El fractal de Julia se genera graficando los valores de c que producen conjuntos de Julia conectados. Los puntos del plano complejo se evalúan en la fórmula de iteración y se determina si el valor de z converge o diverge. Los puntos que convergen se suelen colorear de negro o se dejan sin color, mientras que los puntos que divergen se colorean de diferentes colores dependiendo de la rapidez de divergencia.

Para crear el procedimiento computacional usamos

zn+1=zn2+cz0=z=x+iyx,yRz_{n+1}=z_n^2+c\\ z_0=z=x+iy\\ x,y\in \mathbb{R}

donde para simular o graficar establecemos que x,yx,y son cada pixel de una región rectangular del plano complejo. Asumimos que la serie converge para efectos computacionales cuando zn+1<100|z_{n+1}|<100 y n=10n=10. Está decisión está determinada por el compromiso entre precisión y tiempo.

Pseudocódigo:

let c a complex number
let julia_set = {}
let pixels = [for i for j vec2(i,j)]
let pseudoconverge_value = 100
f = (z,n) => n == 0 ? z : f(z,n-1)**2+c
for each z=(x,y) pixel
   result = f(z,10)
   if abs(result) < pseudoconverge_value:
	     julia_set = julia_set.union(result)

// plot julia set
scale julia set
for each element in julia set
    draw black

Código

Usamos Javascript, WebGL, RXJS y MathJS para lograr graficar fractal de Julia.

let c = new Complex()
let pixels = [for i in n for j in n vec2(i,j)]
let julia_set = new Set([])
f = (z) => n == 0 ? z : f(z,n-1)**2+c
pixels
   .map(pixel => f(z,10)) 
   .filter(result => abs(result) < 100)
   .forEach(result => julia_set.add(result))

gl.drawArrays(gl.POINTS, 0, nvertices);

Resultados

Un círculo

globalThis.c = 0;
globalThis.f = function(complex) {
    return complex.mul(complex).add(globalThis.c);
}
globalThis.pseudoInfinity = 100;
globalThis.iterations = 10;

El psicodélico, no tan psicodélico

globalThis.c = math.complex('0.7885e^i');
globalThis.f = function(complex) {
    return complex.mul(complex).add(globalThis.c);
}
globalThis.pseudoInfinity = 100;
globalThis.iterations = 10;

Conclusiones

En conclusión, los conjuntos de Julia son un tipo de fractal que se generan a partir de la iteración de una función compleja parametrizada por una constante compleja. Los conjuntos de Julia tienen una estructura fractal muy similar a la del conjunto de Mandelbrot, y se caracterizan por tener detalles finos y complejos. La exploración de los conjuntos de Julia es fascinante, ya que cada valor de la constante de Julia produce un fractal diferente con patrones y detalles únicos.

Referencias

Bourke, Paul. "Julia set fractal (2D)" (personal site).

Sawyer, Jamie (6 April 2007). "Julia sets" (blog).

Papers, MathArg. "Conjuntos de Julia." YouTube, 30 July 2021, www.youtube.com/watch?v=PBpPw24I4U8&ab_channel=MathArgPapers.

"Exercise 7 - Julia Set." Computer Vision and Graphics, 14 Mar. 2023, cg.sanchezcarlosjr.com/2023/03/14/computer-graphics-exercise7.html.