Der Zweck der Herausforderung besteht darin, den Attraktor der logistischen Karte als Funktion seines Parameters r (auch als Bifurkationsdiagramm bezeichnet ) oder eines Teilbereichs davon ungefähr zu zeichnen . Das Aussehen des Graphen ist auf dem folgenden Bild von Wikipedia zu sehen:
Hintergrund
Die logistische Abbildung ist eine mathematische Funktion, die eine Eingabe x k auf eine Ausgabe x k + 1 abbildet, die als definiert ist
x k + 1 = r x k (1 - x k )
Dabei ist r der Parameter der Karte, der im Intervall [0, 4] liegen soll.
Bei gegebenem r in [0,4] und einem Anfangswert x 0 im Intervall [0,1] ist es interessant, die Funktion wiederholt für eine große Anzahl N von Iterationen anzuwenden , wodurch ein Endwert x N erzeugt wird . Beachten Sie, dass x N notwendigerweise auch in [0,1] liegt.
Als Beispiel sei r = 3,2, N = 1000 angenommen. Der Anfangswert x 0 = 0,01 ergibt x 1000 = 0,5130. Für x 0 = 0,02 ist das Ergebnis x 0 = 0,7995. Für alle anderen Anfangswerte x 0 liegen die Endwerte x 1000 extrem nahe an 0,5130 oder 0,7995. Dies ist in der Grafik als die Höhe der beiden Linien bei horizontaler Position r = 3,2 zu sehen.
Dies bedeutet nicht , dass für r = 3,2 jede Sequenz zu einem dieser beiden Werte konvergiert. Tatsächlich sind für die beiden oben betrachteten Anfangswerte die Sequenzen (beachte das oszillierende Verhalten):
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 , ...
Was ist wahr , dass für hinreichend große N , und für fast alle Anfangswerte x 0 , der Begriff x N schließen sein wird, eines der Elemente der Menge {0,5130, 0,7995}. Diese Menge wird der Attraktor für dieses spezifische r genannt .
Bei anderen Werten des Parameters r ändert sich die Größe des Atraktorsatzes oder seiner Elemente. Das Diagramm zeigt die Elemente im Attraktor für jedes r .
Der Attraktor für ein bestimmtes r kann geschätzt werden durch
- Testen eines weiten Bereichs von Anfangswerten x 0 ;
- Entwickeln lassen des Systems für eine große Anzahl N von Iterationen; und
- Kenntnis nehmend von den Endwerte x N , die erhalten werden.
Die Herausforderung
Eingänge
N : Anzahl der Iterationen.
r 1 , r 2 und s . Diese definieren die Menge R von Werten von r , nämlich R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 2 }.
Verfahren
Die Menge X der Anfangswerte x 0 ist fest: X = {0,01, 0,02, ..., 0,99}. Optional können auch 0 und 1 in X enthalten sein .
Für jedes r in R und jedes x 0 in X iteriere die logistische Abbildung N- mal, um x N zu erzeugen . Notiere die erhaltenen Tupel ( r , x N ).
Ausgabe
Zeichnen Sie jedes Tupel ( r , x N ) als Punkt in der Ebene mit r als horizontale Achse und x N als vertikale Achse. Die Ausgabe sollte grafisch sein (keine ASCII-Grafik).
Zusätzliche Regeln
- Die angegebene Prozedur definiert das erforderliche Ergebnis, wird jedoch nicht erzwungen. Es kann jede andere Prozedur verwendet werden, die dieselbe Menge von ( r , x N ) Tupeln enthält.
- Die Eingabe ist wie gewohnt flexibel.
- Gleitkommafehler werden nicht gegen den Antwortenden gehalten.
- Eine Grafikausgabe ist in jedem der akzeptierten Formate erforderlich . Insbesondere kann die Ausgabe auf dem Bildschirm angezeigt werden, oder es kann eine Grafikdatei erzeugt werden, oder es kann ein Array von RGB-Werten ausgegeben werden. Wenn Sie eine Datei oder ein Array ausgeben, veröffentlichen Sie bitte ein Beispiel dafür, wie es bei der Anzeige aussieht.
- Grafiken können Vektoren oder Raster sein. Für Rastergrafiken sollte die Bildgröße mindestens 400 × 400 Pixel betragen.
- Jeder Punkt sollte als einzelnes Pixel oder als Markierung mit einer Größe in der Größenordnung von einem Pixel angezeigt werden (andernfalls wird das Diagramm schnell unübersichtlich).
- Der Achsenbereich sollte für r (horizontale Achse) [0,4] und für x N (vertikale Achse) [0,1] betragen . oder es kann kleiner sein, solange es alle erhaltenen Punkte enthält.
- Achsenskalen sind beliebig. Insbesondere muss der Maßstab nicht für beide Achsen gleich sein.
- Rasterlinien, Achsenbeschriftungen, Farben und ähnliche Elemente sind zulässig, jedoch nicht erforderlich.
- Kürzester Code in Bytes gewinnt.
Testfälle
Klicken Sie auf jedes Bild, um eine hochauflösende Version zu erhalten.
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;
Wissen
Vielen Dank an @FryAmTheEggman und @AndrasDeak für ihre hilfreichen Kommentare, während die Herausforderung im Sandkasten lag.