Lo scopo della sfida è di tracciare approssimativamente l' attrattore della mappa logistica in funzione del suo parametro r (chiamato anche diagramma di biforcazione ) o di una sua sottoregione. L'aspetto del grafico può essere visto nella seguente immagine da Wikipedia:
sfondo
La mappa logistica è una funzione matematica che accetta un input x k e lo mappa su un output x k + 1 definito come
x k + 1 = r x k (1− x k )
dove r è il parametro della mappa, si presume si trovi nell'intervallo [0, 4].
Dato r in [0,4], e un valore iniziale x 0 nell'intervallo [0,1], è interessante applicare ripetutamente la funzione per un numero grande N di iterazioni, producendo un valore finale x N . Nota che x N si troverà necessariamente anche in [0,1].
Ad esempio, considera r = 3.2, N = 1000. Il valore iniziale x 0 = 0,01 indica x 1000 = 0,5130. Per x 0 = 0,02 il risultato è x 0 = 0,7995. Per qualsiasi altro valore iniziale x 0, i valori finali x 1000 sono estremamente vicini a 0,5130 o 0,7995. Questo è visto nel grafico come l'altezza delle due linee in posizione orizzontale r = 3.2.
Ciò non significa che per r = 3.2 ogni sequenza converge in uno di quei due valori. In effetti, per i due valori iniziali considerati sopra, le sequenze sono (notare il comportamento oscillante):
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 , ...
Ciò che è vero è che per N sufficientemente grande , e per quasi tutti i valori iniziali x 0 , il termine x N sarà vicino a uno degli elementi dell'insieme {0,5130, 0,7995}. Questo set è chiamato attrattore per questo specifico r .
Per altri valori del parametro r, le dimensioni del set di attrattori o dei suoi elementi cambieranno. Il grafico traccia gli elementi nell'attrattore per ogni r .
L'attrattore per una specifica r può essere stimato da
- test di una vasta gamma di valori iniziali x 0 ;
- lasciando evolvere il sistema per un grande numero N di iterazioni; e
- prendendo nota dei valori finali x N ottenuti.
La sfida
ingressi
N : numero di iterazioni.
r 1 , r 2 e s . Definiscono l'insieme R dei valori di r , ovvero R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 2 }.
Procedura
L'insieme X dei valori iniziali x 0 è fisso: X = {0,01, 0,02, ..., 0,99}. Opzionalmente, 0 e 1 possono anche essere inclusi in X .
Per ogni r in R e ogni x 0 in X , iterarlo logistici mappa N volte per produrre x N . Registra le tuple ottenute ( r , x N ).
Produzione
Traccia ogni tupla ( r , x N ) come punto nel piano con r come asse orizzontale e x N come asse verticale. L'output deve essere grafico (non arte ASCII).
Regole aggiuntive
- La procedura indicata definisce il risultato richiesto, ma non viene applicata. È possibile utilizzare qualsiasi altra procedura che proclami la stessa serie di tuple ( r , x N ).
- L'input è flessibile come al solito.
- Gli errori in virgola mobile non verranno mantenuti contro il risponditore.
- È richiesto un output grafico, in uno qualsiasi dei formati accettati . In particolare, l'output può essere visualizzato sullo schermo, oppure può essere prodotto un file grafico o può essere emesso un array di valori RGB. Se si genera un file o un array, si prega di pubblicare un esempio di come appare quando viene visualizzato.
- La grafica può essere vettoriale o raster. Per la grafica raster, la dimensione dell'immagine dovrebbe essere di almeno 400 × 400 pixel.
- Ogni punto dovrebbe essere mostrato come un singolo pixel o come un segno con le dimensioni dell'ordine di un pixel (altrimenti il grafico si ingombra rapidamente).
- L'intervallo degli assi deve essere [0,4] per r (asse orizzontale) e [0,1] per x N (asse verticale); oppure può essere più piccolo purché includa tutti i punti ottenuti.
- Le scale degli assi sono arbitrarie. In particolare, la scala non deve essere la stessa per entrambi gli assi.
- Le linee della griglia, le etichette degli assi, i colori e gli elementi simili sono accettabili, ma non richiesti.
- Vince il codice più breve in byte.
Casi test
Fare clic su ciascuna immagine per una versione ad alta risoluzione.
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;
Riconoscimento
Grazie a @FryAmTheEggman e @AndrasDeak per i loro utili commenti mentre la sfida era nella sandbox.