Raddoppio in cascata


12

Innanzitutto, un interludio matematico, breve e che valga la pena:

Se 0 < a < 4, la funzione logistica f(x) = ax(1-x) mappa l'intervallo [0,1] al suo interno. Ciò significa che si può giocare al gioco di iterazione; ad esempio, se a = 2, il valore iniziale 0,3 diventa 0,42, quindi 0,4872, ecc.

All'aumentare del parametro a, la funzione quadratica fdiventa più complicata nel senso seguente:

  • 0 < a < 1 tutti i valori iniziali ripetono verso 0.
  • 1 < a < 3 0 diventa repellente, ma c'è un nuovo punto fisso (a-1) / a che attira tutte le iterazioni.
  • 3 < a < 1+sqrt(6) il nuovo punto fisso diventa repellente, ma appare un ciclo di 2 punti attrattivi.
  • 3.44949... < a < 3.54409... il 2-ciclo diventa repellente, ma appare un ciclo di 4 punti attrattivi.
  • eccetera.

Feigenbaum ha notato che le lunghezze di questi intervalli di parametri diminuiscono ad un tasso che si avvicina sempre più al 4.6692..., la costante Feigenbaum . La meravigliosa scoperta è che questa sequenza di biforcazione del periodo 2 è un fenomeno generale condiviso da qualsiasi funzione che (come la parabola quadratica) sta aumentando, quindi diminuendo. Questo è stato uno dei primi rapporti sull'universalità del caos .

Ora per la sfida! Scrivi il codice più breve possibile che calcola la costante di Feigenbaum con una precisione a tua scelta. Il punto qui non è imbrogliare il sistema codificando un numero su cui hai cercato su Google, ma fare in modo che il computer trovi il valore. Per riferimento, ecco la costante di 30 cifre:

4,669201609102990671853203821578


5
Sono sorpreso che non abbiamo già una sfida per calcolare questa costante, una bella idea che ci siamo persi. Il più vicino sembra essere quello di tracciare l'attrattore logistico . Suggerirei che il codice riceva un errore massimo o un numero di cifre e produca la costante entro tale precisione (ignorando i limiti della macchina oltre un certo punto). O forse per calcolare quel rapporto tra l'i e il (i + 1) raddoppiando gli intervalli, come converrebbe alla costante. Il golfista che sceglie un'accuratezza è troppo vago e non è difficile stabilire un codice hard.
xnor

Ho pensato molto a come esprimere la sfida. Il problema è che questa è una cosa notoriamente difficile da calcolare con precisione, quindi ho pensato che le persone si sarebbero divertite di più a concentrarsi sull'implementazione di un metodo fluido, piuttosto che ottenere quella cifra extra con la forza bruta. Se le persone si sentono diversamente, cambierò le regole.
Rodrigo A. Pérez,

1
Cosa stai cercando come metodo slick o evitando la forza bruta? Si noti che per impostazione predefinita per i golf di codice non abbiamo bisogno di limiti sul runtime o sullo spazio, quindi le risposte tendono ad essere molto inefficienti quando ottimizzate per essere brevi. Forse stai cercando di creare un codice più veloce o una sfida di complessità limitata?
xnor

Risposte:


3

Javascript, 141 138 135 131 byte, 8 cifre

È qualcosa che immagino. Dovrebbe essere migliorabile un po '. Se qualcuno ha bisogno di un inizio: come calcolare Feigenbaum . E se preferisci sapere come farlo in termini di codice, dai un'occhiata a questo .

Copia incolla il seguente codice nella tua console. Calcola 4.6692016 68823243 (quindi non proprio preciso).

b=1;c=0;e=3.2;for(i=2;i<13;i++){z=b-c;a=b+z/e;j=4;while(j--){x=y=0;k=2**i;while(k--){y=1-2*y*x;x=a-x*x;}a-=x/y}e=z/(a-b);c=b;b=a;e}

b=1;c=0;e=3.2;for(i=2;i<13;i++){z=b-c;a=b+z/e;j=4;while(j--){x=y=0;k=2**i;while(k--){y=1-2*y*x;x=a-x*x;}a-=x/y}e=z/(a-b);c=b;b=a;e}
console.log(e)


2

Python, 127 byte

c,b,e=0,1,2
for i in range(2,13):a=b+(b-c)/e;exec(("x=y=0;"+"y,x=1-2*y*x,a-x*x;"*2**i+"a=a-x/y;")*17);d,c,b=(b-c)/(a-b),b,a;e=d

Il merito va a @ThomasW con la sua risposta javascript.

Aggiungi print(d)all'output 4.669201673141983 . Richiede alcuni secondi, a causa delle lunghe stringhe calcolate prima dell'esecuzione.


1

Carbone , 84 byte

A¹βA⁰εA³·²δF…²¦¹³«A⁺β∕⁻βεδαFχ«A⁰ξA⁰ψFX²ι«A⁻¹××ψ²ξψA⁻α×ξξξ»A⁻α∕ξψα»A∕⁻βε⁻αβδAβεAαβ»Iδ

Provalo online! Link al codice dettagliato per la spiegazione.

Utilizza l'algoritmo da qui .

Stampe 4.66920 0975097843 (6 cifre)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.