9 votos

Cómo dibujar un fractal de $z \mapsto z^2 + c$ explicado por un simple mortal?

Estoy interesado en:

1) la Comprensión en detalle de cómo los fractales son sorteo.

2) la Codificación de un programa de ordenador para dibujar un fractal.

Puede alguien explicar las habilidades de cuidar de 1) para mí? No creo que este enlace hace un buen trabajo. Yo paso-por-paso ejemplo sería fantástico o un enlace/vídeo con un buen paso-por-paso de la explicación. THX!


Sé que los números complejos y el plano complejo. Mi entendimiento es que elijas un número complejo, para empezar y mantener la alimentación de vuelta el resultado en la ecuación (es decir, la iteración). Ahora mi pregunta: ¿cómo a partir de los resultados sacas algo? Usted acaba de poner un punto negro para cada resultado en el plano complejo?

5voto

Chris Farmiloe Puntos 7769

La respuesta es sí, sólo tienes que poner un poco de punto negro si el resultado dice que es en el conjunto de Mandelbrot, y no tiene sentido si no.

Pero el hecho es, usted tendría que recorrer una cantidad infinita de puntos para hacer eso! En su lugar, algo como la siguiente se realiza habitualmente. Algunos pseudo-código:

$$ \color{blue}{\text{for }x_{\text{min}} \to x, x \neq x_{\text{max}}, x+\Delta \to x}: $$ $$ \color{green}{\text{for }y_{\text{min}} \to y, y \neq y_{\text{max}}, y+\Delta \to y}: $$ $$ \color{red}{\text{If Number In Set}(x+yi)}:$$ $$ \color{red}{\text{Color}(x+yi)} $$ $$ \color{green}{\text{Repeat}}$$ $$ \color{blue}{\text{Repeat}}$$

Donde $\Delta$ es un número pequeño, pero no demasiado pequeño. Dependiendo del tamaño de la imagen, generalmente en algún lugar alrededor de $\Delta = 0.05$ es bueno.

4voto

zeroasterisk Puntos 165

chrisapotek escribió, "... estoy interesado en la matemática de la lógica detrás de la imagen..."

La Julia imagen para c=0 es bastante simple, y forma la base matemática para la comprensión de otros conjuntos de Julia. La iteración $z\gets z^2+0$, todos los puntos dentro del círculo unitario ir a cero, y todos los puntos fuera del círculo unidad de ir hasta el infinito. En el círculo unidad en sí misma, en cada iteración se duplica el ángulo de $\theta\gets 2\theta$ desde $(\exp(2\pi i \theta))^2=\exp(2\times 2\pi i \theta)$. La unidad de círculo es el límite, que separa los puntos que ir hasta el infinito, el conjunto de Fatou, a partir de los puntos que van a cero, el conjunto de Julia.

Hay un conjunto de Fatou de puntos que ir hasta el infinito para Julia/Fatou conjunto para recorrer $z\gets z^2+c$ con otros valores de c así. Para casi todos estos casos, el límite es un fractal, a menos que el z=0 punto va a infinito, en cuyo caso es un cantor de polvo. Resulta que para otros valores de "c", el Bottcher ecuación que se puede poner el conjunto de Fatou en correspondencia 1 a 1 con el conjunto de Fatou de z^2, y el fractal límite corresponde a los límites de la analítica Bottcher función. El conjunto de puntos para los que la Bottcher ecuación está definida matemáticamente equivalente al conjunto de puntos de ir a infinito cuando se itera z=z^2+c. Así que esta es la base matemática para el solo recorrer y ver qué puntos de ir hasta el infinito, para colorear conjuntos de Julia. Similar mucho más complicado argumentos se aplican al conjunto de Mandelbrot.

Milnor del libro, en la Dinámica de Una Variable Compleja, es probablemente la mejor referencia.

1voto

Hassan Kamrul Puntos 21

En general depende del fractal. No todos los fractales uso de números complejos. Hay un montón de diferentes tipos de fractales, e incluso para el mismo fractal no puede ser completamente diferente tipo de algoritmos. Ejemplo: el Triángulo de Sierpinski a través de L-systems y el Triángulo de Sierpinski a través del caos de juego.


El criterio para un punto en el conjunto de Mandelbrot es que no divergen hacia el infinito después de un número infinito de iteraciones. Claro que esto es imposible (estrictamente hablando) para hacer en un ordenador, pero para un algoritmo de práctico si se ejecuta al menos un par de docenas de iteraciones se puede hacer una muy buena conjetura acerca de si el punto está o no dentro del conjunto.

Dado un número complejo $z$, si la distancia desde el origen (que se podría llamar el valor absoluto de a$z$) $<$ 2, luego de que la serie puede o no puede ir hasta el infinito. Pero si la distancia desde el origen es $\ge$ 2, entonces ese número se va a ir definitivamente a infinito (porque después de esto la distancia solo aumenta).

Así que básicamente lo que hace es, para un punto dado, repetir un número de veces, digamos de 20, y si en cualquier iteración de la distancia del número complejo desde el origen es $\ge$ 2, entonces simplemente parar e ir al siguiente punto. Pero si usted lo hace a través de los 20 iteraciones y el punto es que aún dentro de un radio de 2, a continuación, seguir adelante y sacar a ese punto.


Recuerde que para calcular la distancia desde el origen, puede utilizar el teorema de Pitágoras. Si $z = x + i y$, luego de que un punto es, por el momento, salvo si:

$$\sqrt {x^2 + y^2} < 2$$

For the purposes of writing the algorithm, notice that the following is equivalent:

$$x^2 + y^2 < 4$$

Es por eso que la Wikipedia algoritmo @RahulNarain ha vinculado a este:

x*x + y*y < 2*2

Usted puede obtener más elegante si, en lugar de sólo el dibujo de un punto o no el dibujo de un punto, puede variar el color de todos los puntos (incluso aquellos que normalmente no dibujar como parte del conjunto) dependiendo de lo rápido que divergen más allá de un radio de 2. Así que si un punto está en el conjunto, bien, pero si no en el conjunto, entonces hacer el color más rojizo o más oscuro o lo que sea dependiendo de cuántas iteraciones se tarda en ir más allá de un radio de 2. Esto es lo que la Wikipedia algoritmo hace y es uno de los sistemas utilizados para dar color a las diversas conjunto de Mandelbrot fotos que he visto.

1voto

Sam DeHority Puntos 4252

El fractal que estamos hablando es el conjunto de Julia para el polinomio $z \mapsto z^2 +c$. Si $f:\Bbb{C} \rightarrow \Bbb{C}$ es este polinomio, el conjunto $K(f) \subset \Bbb{C}$ es definida de la siguiente manera: $$K(F) = \{x |\lim_{n\to\infty} |f^n(x)| < \infty \}$$

where $f^n$ denotes the $n$th composition of $f$, that is $f \circ f \circ \dots \circ f(x)\,\, n $ times.

The Julia set, $J(f)$ which has far more exciting properties and is a little easier to calculate is simply $\partial K(f)$ the boundary of $K(x)$. The 'why' of this set forming a fractal for $c \neq 0$ is quite challenging and I can't go into that here. I will however refer you to a number of excellent resources that will help you. The book that requires pretty light prerequisites and is spectacular in regards to the geometry of fractals is this one by Kenneth Falconer. The best monograph on the subject of complex dynamics is that of Milnor, here.

But I digress now back to the subject of how to draw the Julia set for $z \mapsto z^2 +c$. The first method I will describe is the most straightforward. Idiomatically it goes like: for each pixel iterate $f$ and if it goes outise of the circle with radius 2, then color it some color depending on the number of iterations it takes to escape this circle, otherwise color it black. Here is my mathematica code for this:

f[z_] := z^2 - 0.53 - 0.53*I;
bailOut = 50;
test[z_] := Abs[z] <= 2;
JuliaCount[z0_] := Length[NestWhileList[f, N[z0], test, 1, bailOut]];
DensityPlot[JuliaCount[x + I*y], {x, -1.6, 1.6}, {y, -1.2, 1.2}, 
 AspectRatio -> Automatic, Mesh -> None, PlotPoints -> 1000, 
 ColorFunction -> (If[# == 1, RGBColor[0, 0, 0], Hue[#]] &)]

which produces the following image, albeit very slowly: enter image description here

If we want to make this faster, there are some interesting properties of Julia sets for polynomials that we can use in order to draw them with more reasonable computation. I'm going to list some watered down versions of the facts we'll need here and reference you to the Falconer book if you want more details and information.

$$1.\quad J(f^n) = J(f) \text{ y } J(f) \text{ es un repelente de conjunto fijo de } f\\ 2.\quad \text{órbitas Periódicas de } f \text{ son densos en} J(f)\\ 3.\quad J(f) = \parcial E(f), \text{ los puntos que se escapan al infinito}\\ 4. \quad J(f) \text{ es atraer a un conjunto estable de } f^{-1} $$

Using these facts and basic properties of $f$, it should be easy to see that if we apply $f^{-1} : z \mapsto \sqrt{z-c} $ to some point outside of the circle of radius 2, we will eventually get a point arbitrarily close to $J(f)$ and successive iteration will 'likely' produce many points far within one pixel of the of the set. So if we pick 10 points at random outside of the circle with radius 2, and perform the following idiomatic algorithm on them, we should get a nice drawing of the Julia set:

Perform $f^{-100}$ on $s_0$, the first starting point. Call this point $a_0$.

Color this point, as well as $f^{-1}(a_0) = a_1$, $f^{-1}(a_1) = a_2$ and so on for some number of iterations.

Repeat for other $s_i$ on the same drawing to get a picture of $J(f)$.

Esto debería producir un cuadro similar, con la importante diferencia de que no va a ser de color y por lo tanto, probablemente no será tan bonito.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X