El propósito del desafío es trazar aproximadamente el atractor del mapa logístico en función de su parámetro r (también llamado diagrama de bifurcación ), o una subregión del mismo. La apariencia del gráfico se puede ver en la siguiente imagen de Wikipedia:
Fondo
El mapa logístico es una función matemática que toma una entrada x k y lo asigna a una salida x k + 1 define como
x k + 1 = r x k (1− x k )
donde r es el parámetro del mapa, se supone que se encuentra en el intervalo [0, 4].
Dada r en [0,4], y un valor inicial x 0 en el intervalo [0,1], es interesante para aplicar repetidamente la función para un número grande N de iteraciones, produciendo un valor final x N . Tenga en cuenta que x N necesariamente estará en [0,1] también.
Como ejemplo, considere r = 3.2, N = 1000. El valor inicial x 0 = 0.01 da x 1000 = 0.5130. Para x 0 = 0.02 el resultado es x 0 = 0.7995. Para cualquier otro valor inicial x 0, los valores finales x 1000 son extremadamente cercanos a 0.5130 o 0.7995. Esto se ve en el gráfico como la altura de las dos líneas en la posición horizontal r = 3.2.
Esto no significa que para r = 3.2 cada secuencia converja a uno de esos dos valores. De hecho, para los dos valores iniciales considerados anteriormente, las secuencias son (tenga en cuenta el comportamiento oscilante):
x 0 = 0.01, ..., x 1000 = 0.5130, x 1001 = 0.7995, x 1002 = 0.5130, ...
x 0 = 0.02, ..., x 1000 = 0.7995, x 1001 = 0.5130, x 1002 = 0.7995 , ...
Lo que es cierto es que para N suficientemente grande , y para casi todos los valores iniciales x 0 , el término x N estará cerca de uno de los elementos del conjunto {0.5130, 0.7995}. Este conjunto se llama atractor para este r específico .
Para otros valores del parámetro r, el tamaño del conjunto de atractor, o sus elementos, cambiará. El gráfico traza los elementos en el atractor para cada r .
El atractor para un r específico se puede estimar por
- probar un amplio rango de valores iniciales x 0 ;
- dejando que el sistema evolucione para un gran número N de iteraciones; y
- tomando nota de los valores finales x N que se obtienen.
El reto
Entradas
N : número de iteraciones.
r 1 , r 2 y s . Estos definen el conjunto R de valores de r , es decir, R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 2 }.
Procedimiento
El conjunto X de valores iniciales x 0 es fijo: X = {0.01, 0.02, ..., 0,99}. Opcionalmente, 0 y 1 también pueden incluirse en X .
Para cada r en R y cada x 0 en X , Iterar los logísticos mapa N veces para producir x N . Registre las tuplas obtenidas ( r , x N ).
Salida
Grafica cada tupla ( r , x N ) como un punto en el plano con r como eje horizontal y x N como eje vertical. La salida debe ser gráfica (no arte ASCII).
Reglas adicionales
- El procedimiento indicado define el resultado requerido, pero no se aplica. Se puede utilizar cualquier otro procedimiento que genere el mismo conjunto de tuplas ( r , x N ).
- La entrada es flexible como de costumbre.
- Los errores de coma flotante no se mantendrán contra el respondedor.
- Se requiere salida gráfica, en cualquiera de los formatos aceptados . En particular, la salida puede mostrarse en la pantalla, o puede producirse un archivo de gráficos, o puede enviarse una matriz de valores RGB. Si genera un archivo o una matriz, publique un ejemplo de cómo se ve cuando se muestra.
- Los gráficos pueden ser vectoriales o de trama. Para gráficos ráster, el tamaño de la imagen debe ser de al menos 400 × 400 píxeles.
- Cada punto debe mostrarse como un solo píxel, o como una marca con un tamaño del orden de un píxel (de lo contrario, el gráfico se abarrotará rápidamente).
- El rango del eje debe ser [0,4] para r (eje horizontal) y [0,1] para x N (eje vertical); o puede ser más pequeño siempre que incluya todos los puntos obtenidos.
- Las escalas del eje son arbitrarias. En particular, la escala no necesita ser la misma para ambos ejes.
- Las líneas de cuadrícula, etiquetas de eje, colores y elementos similares son aceptables, pero no obligatorios.
- El código más corto en bytes gana.
Casos de prueba
Haga clic en cada imagen para obtener una versión de alta resolución.
N = 1000; r1 = 2.4; r2 = 4; s = 0.001;
N = 2000; r1 = 3.4; r2 = 3.8; s = 0.0002;
N = 10000; r1 = 3.56; r2 = 3.59; s = 0.00002;
Reconocimiento
Gracias a @FryAmTheEggman y @AndrasDeak por sus útiles comentarios mientras el desafío estaba en el cajón de arena.