¡Muy buenas a todo el mundo!
Hace muuucho tiempo que me gusta estudiar y explorar el conjunto Mandelbrot y Julia cuando puedo. Creo entenderlo a nivel medio bastante bien pero no tanto a nivel de su álgebra y topología más profundas. Hace unos días que tenía mucho tiempo libre (cosa rara) y me puse a refrescar temas sobre como construirlo. De repente me dí cuenta de que una cosa que ya sabía, parecía tener un significado más importante del que pensaba: que la complejidad de también se “construye” desde fuera del conjunto, desde su complemento . Y es tan importante lo que pertenece al conjunto como lo que no. Intuyo que existe una dualidad matemática entre interior y el exterior pero es solo una especulación mía. De aquí me han surgido muchas ideas y dudas que iré exponiendo en sucesivos hilos. Empezaremos por el principio.
La función para “colorear” el exterior de (la que en W. Mathematica es “MandelbrotSetIterationCount”) es el número de interacciones necesarias para determinar que la sucesión diverge. Eso ocurre en la iteración más baja posible que cumpla .
Viene a ser una medida de la divergencia de la sucesión. Pero es una función con salida a los enteros positivos, por lo que no es continua ni derivable en muchos puntos del plano . Es una función escalonada con escalones planos y sin pendiente. Pero su manera de distribuirse invita a pensar que es la discretización de una función continua , y aunque sea una simple intuición, pienso que no es del todo descabellada.
Existen otras funciones en W. Mathematica sobre el conjunto que sí son continuas:
“MandelbrotSetDistance” mide la distancia euclidiana entre el punto de interés y el punto de más próximo. Pero resulta evidente que esta función no es la “versión suave” de “MandelbrotSetIterationCount”, solo es un artificio que permite visualizar el exterior de manera suave pero arbritaria. Supongo que tendrá otras aplicaciones pero no la que busco.
“MandelbrotSetBoettcher” parece tener propiedades como la que busco pero su salida está en y no solo en . El valor absoluto de la función se parece a lo que busco pero invertida y transformada a una escala diferente. La dirección de sus pendientes parecen coincidir con lo que busco pero no puedo estar seguro. Quizás la función contiene la información para crear la función que busco pero no logro entender como funciona. Sí que sé que se utiliza para buscar los “rayos externos” asociados a valores racionales y su función “Stream” parece tener los mismos “ríos/rayos” o siguen trayectorias parecidas a las de la función que busco. Toda la información que encuentro parece muy general y me cuesta entender algunos pasos y algunas nomenclaturas.
Como me encontré en un laberinto algebraico donde no parecía progresar, intenté encontrar la forma de aproximar la función que busco. Creo que he llegado a una respuesta satisfactoria pero no tengo manera de comprobarlo y no sé si se puede simplificar. Pongo una descripción de mis pasos para si he cometido algún error en el proceso y/o si mi resultado es erróneo:
La función tiene que “conectar” los escalones de “MandelbrotSetIterationCount” en una superficie suave y con unos ratios de crecimiento intrínsecamente coherentes con el crecimiento de los escalones. Asumo que tiene que existir esta función y tiene que tener solución única.
Partimos de la función original MandelbrotSetIterationCount=, donde es el punto a evaluar en , es el radio de escape, el círculo donde queda fuera por primera vez, siempre que , e es el número de iteraciones máximas para determinar si la sucesión ha divergido o no (curiosamente la función “MandelbrotSetIterationCount” en Mathematica no tiene la opción de variar el radio de escape y en cambio en la función “MandelbrotSetPlot” sí. Esto no me permite evaluar mis pasos con W. Mathematica de una manera fácil).
Vaya, que es el algoritmo de siempre con el radio de escape como variable en lugar de estar fijo en 2. Para cada r fijo, la función nos devuelve el número de iteraciones mínimas necesarias para rebasar el radio . Si se llega a y la sucesión no ha superado r, se considera que el punto pertenece a . Como solo evaluamos puntos en , la variable será finita y de momento la trataremos como una constante lo suficientemente alta.
Al hacer variar de manera continua, se observa que las fronteras entre enteros de la función se desplazan de manera continua y monocromática hacia fuera de . También se observa que cuando , toda frontera entre enteros ocupa el lugar de su vecino externo, o sea que se completa un ciclo. El nuevo lugar de cada frontera con no es exactamente igual que el de las fronteras vecinas con pero convergen a unas mismas trayectorias cuando .
Por lo tanto podemos construir de la suma continua entre y . Como vamos de a podemos parametrizar con una variable con la función para que todas las fronteras avancen un ciclo hacia afuera cuando recorre de 0 a 1, cubriendo todo el espacio en y acorde con su crecimiento intrínseco. El 1 estaría estictamente fuera pero eso no afecta al resultado.
Ahora podemos formular una integral sobre para y la llamaremos (el índice 0 solo indica que no es la función definitiva):
Pero para que las fronteras converjan exactamente, tiene que tender a infinito por lo que la función también tiende a infinito si no te alejas al infinito de . Por lo tanto tenemos que cancelar este infinito con otro igual. Por suerte, como cada se completa un solo ciclo, el valor de solo cambia en una unidad. Para se cumple que .
Además, determina la distancia natural entre escalones de la función . Si , dónde es una constante real. Por lo tanto crece igual que si no se limita a (0,1). Teniendo podemos obtener
,
y como queremos que esa crezca igual que , fijaremos (porqué es el radio mínimo posible) y lo pasaremos a que será el valor que haremos crecer. Quizás ese cambio sea arbitrario pero me sirve porqué es el valor inicial de la integral y es el que nos interesa que crezca. Así, la integral queda como
Y se mantiene en un rango 1 cuando crece.
Por lo tanto tomaremos el límite que :
Pero para describir el domino completo , las iteraciones deberán tender a infinito. Por lo que al final nos queda
Hasta aquí puedo llegar para encontrar su forma lo más "función continua" posible. Me gustaría estudiar el gradiente y he podido encontrar propiedades interesantes, pero mis limitaciones en programación y tiempo (solo uso W.Mathematica y no muy bien) no me permiten evaluar apropiadamente ni la función, ni su gradiente, divergencias, rotacionales, etc. pero esto es para otros hilos.
Por ahora, estas son mis dudas principales:
¿Son correctos los pasos que he seguido? ¿Llevan donde me proponía?
¿Existe alguna referencia de algo igual o parecido a que pueda ayudarme a profundizarlo?
¿Qué otros métodos podría haber para resolverlo?
¿Qué relación existe entre esta y la función “MandelbrotSetBoettcher”? Si es que existe.
Sé que son muchas cosas pero con fragmentos de información me conformo. Ni que sea como pulir mi poca rigurosidad y oxidada nomenclatura.
Muchas gracias y saludos!
Hace muuucho tiempo que me gusta estudiar y explorar el conjunto Mandelbrot y Julia cuando puedo. Creo entenderlo a nivel medio bastante bien pero no tanto a nivel de su álgebra y topología más profundas. Hace unos días que tenía mucho tiempo libre (cosa rara) y me puse a refrescar temas sobre como construirlo. De repente me dí cuenta de que una cosa que ya sabía, parecía tener un significado más importante del que pensaba: que la complejidad de también se “construye” desde fuera del conjunto, desde su complemento . Y es tan importante lo que pertenece al conjunto como lo que no. Intuyo que existe una dualidad matemática entre interior y el exterior pero es solo una especulación mía. De aquí me han surgido muchas ideas y dudas que iré exponiendo en sucesivos hilos. Empezaremos por el principio.
La función para “colorear” el exterior de (la que en W. Mathematica es “MandelbrotSetIterationCount”) es el número de interacciones necesarias para determinar que la sucesión diverge. Eso ocurre en la iteración más baja posible que cumpla .
Viene a ser una medida de la divergencia de la sucesión. Pero es una función con salida a los enteros positivos, por lo que no es continua ni derivable en muchos puntos del plano . Es una función escalonada con escalones planos y sin pendiente. Pero su manera de distribuirse invita a pensar que es la discretización de una función continua , y aunque sea una simple intuición, pienso que no es del todo descabellada.
Existen otras funciones en W. Mathematica sobre el conjunto que sí son continuas:
“MandelbrotSetDistance” mide la distancia euclidiana entre el punto de interés y el punto de más próximo. Pero resulta evidente que esta función no es la “versión suave” de “MandelbrotSetIterationCount”, solo es un artificio que permite visualizar el exterior de manera suave pero arbritaria. Supongo que tendrá otras aplicaciones pero no la que busco.
“MandelbrotSetBoettcher” parece tener propiedades como la que busco pero su salida está en y no solo en . El valor absoluto de la función se parece a lo que busco pero invertida y transformada a una escala diferente. La dirección de sus pendientes parecen coincidir con lo que busco pero no puedo estar seguro. Quizás la función contiene la información para crear la función que busco pero no logro entender como funciona. Sí que sé que se utiliza para buscar los “rayos externos” asociados a valores racionales y su función “Stream” parece tener los mismos “ríos/rayos” o siguen trayectorias parecidas a las de la función que busco. Toda la información que encuentro parece muy general y me cuesta entender algunos pasos y algunas nomenclaturas.
Como me encontré en un laberinto algebraico donde no parecía progresar, intenté encontrar la forma de aproximar la función que busco. Creo que he llegado a una respuesta satisfactoria pero no tengo manera de comprobarlo y no sé si se puede simplificar. Pongo una descripción de mis pasos para si he cometido algún error en el proceso y/o si mi resultado es erróneo:
La función tiene que “conectar” los escalones de “MandelbrotSetIterationCount” en una superficie suave y con unos ratios de crecimiento intrínsecamente coherentes con el crecimiento de los escalones. Asumo que tiene que existir esta función y tiene que tener solución única.
Partimos de la función original MandelbrotSetIterationCount=, donde es el punto a evaluar en , es el radio de escape, el círculo donde queda fuera por primera vez, siempre que , e es el número de iteraciones máximas para determinar si la sucesión ha divergido o no (curiosamente la función “MandelbrotSetIterationCount” en Mathematica no tiene la opción de variar el radio de escape y en cambio en la función “MandelbrotSetPlot” sí. Esto no me permite evaluar mis pasos con W. Mathematica de una manera fácil).
Vaya, que es el algoritmo de siempre con el radio de escape como variable en lugar de estar fijo en 2. Para cada r fijo, la función nos devuelve el número de iteraciones mínimas necesarias para rebasar el radio . Si se llega a y la sucesión no ha superado r, se considera que el punto pertenece a . Como solo evaluamos puntos en , la variable será finita y de momento la trataremos como una constante lo suficientemente alta.
Al hacer variar de manera continua, se observa que las fronteras entre enteros de la función se desplazan de manera continua y monocromática hacia fuera de . También se observa que cuando , toda frontera entre enteros ocupa el lugar de su vecino externo, o sea que se completa un ciclo. El nuevo lugar de cada frontera con no es exactamente igual que el de las fronteras vecinas con pero convergen a unas mismas trayectorias cuando .
Por lo tanto podemos construir de la suma continua entre y . Como vamos de a podemos parametrizar con una variable con la función para que todas las fronteras avancen un ciclo hacia afuera cuando recorre de 0 a 1, cubriendo todo el espacio en y acorde con su crecimiento intrínseco. El 1 estaría estictamente fuera pero eso no afecta al resultado.
Ahora podemos formular una integral sobre para y la llamaremos (el índice 0 solo indica que no es la función definitiva):
Pero para que las fronteras converjan exactamente, tiene que tender a infinito por lo que la función también tiende a infinito si no te alejas al infinito de . Por lo tanto tenemos que cancelar este infinito con otro igual. Por suerte, como cada se completa un solo ciclo, el valor de solo cambia en una unidad. Para se cumple que .
Además, determina la distancia natural entre escalones de la función . Si , dónde es una constante real. Por lo tanto crece igual que si no se limita a (0,1). Teniendo podemos obtener
,
y como queremos que esa crezca igual que , fijaremos (porqué es el radio mínimo posible) y lo pasaremos a que será el valor que haremos crecer. Quizás ese cambio sea arbitrario pero me sirve porqué es el valor inicial de la integral y es el que nos interesa que crezca. Así, la integral queda como
Y se mantiene en un rango 1 cuando crece.
Por lo tanto tomaremos el límite que :
Pero para describir el domino completo , las iteraciones deberán tender a infinito. Por lo que al final nos queda
Hasta aquí puedo llegar para encontrar su forma lo más "función continua" posible. Me gustaría estudiar el gradiente y he podido encontrar propiedades interesantes, pero mis limitaciones en programación y tiempo (solo uso W.Mathematica y no muy bien) no me permiten evaluar apropiadamente ni la función, ni su gradiente, divergencias, rotacionales, etc. pero esto es para otros hilos.
Por ahora, estas son mis dudas principales:
¿Son correctos los pasos que he seguido? ¿Llevan donde me proponía?
¿Existe alguna referencia de algo igual o parecido a que pueda ayudarme a profundizarlo?
¿Qué otros métodos podría haber para resolverlo?
¿Qué relación existe entre esta y la función “MandelbrotSetBoettcher”? Si es que existe.
Sé que son muchas cosas pero con fragmentos de información me conformo. Ni que sea como pulir mi poca rigurosidad y oxidada nomenclatura.
Muchas gracias y saludos!