Cascata dobrável

12

Primeiro, um interlúdio matemático, curto e que vale a pena:

Se 0 < a < 4, a função logística f(x) = ax(1-x) mapeia o intervalo [0,1] dentro de si. Isso significa que é possível jogar o jogo de iteração; por exemplo, se a = 2, o valor inicial 0,3 se torna 0,42, depois 0,4872, etc.

À medida que o parâmetro aaumenta, a função quadrática fse torna mais complicada no seguinte sentido:

  • 0 < a < 1 todos os valores iniciais iteram para 0.
  • 1 < a < 3 0 se repele, mas há um novo ponto fixo (a-1) / a que atrai todas as iterações.
  • 3 < a < 1+sqrt(6) o novo ponto fixo fica repelindo, mas um ciclo de 2 pontos de atração aparece.
  • 3.44949... < a < 3.54409... o ciclo 2 se repele, mas um ciclo de 4 pontos de atração aparece.
  • etc.

Feigenbaum notou que os comprimentos desses intervalos de parâmetros diminuem a uma taxa que se aproxima cada vez mais 4.6692...da constante Feigenbaum . A maravilhosa descoberta é que a sequência de bifurcação do período 2 é um fenômeno geral compartilhado por qualquer função que (como a parábola quadrática) esteja aumentando e depois diminuindo. Este foi um dos primeiros relatos sobre a universalidade do caos .

Agora, para o desafio! Escreva o código mais curto possível que calcule a constante Feigenbaum com a precisão de sua escolha. O ponto aqui não é enganar o sistema, codificando um número que você pesquisou no Google, mas fazer com que o computador encontre o valor. Para referência, aqui está a constante de 30 dígitos:

4.669201609102990671853203821578

Rodrigo A. Pérez
fonte
5
Estou surpreso por ainda não termos um desafio para calcular essa constante, uma boa idéia que perdemos. O mais próximo parece ser o plotador do atrator logístico . Eu sugeriria que o código desse erro máximo ou número de dígitos e produzisse a constante dentro dessa precisão (ignorando os limites da máquina além de algum ponto). Ou talvez para calcular essa razão entre o iésimo e (i + 1) st intervalos de duplicação, como convergiria para a constante. O jogador que escolhe uma precisão é muito vago e não codifica é inexequível.
xnor
Pensei muito em como expressar o desafio. A questão é que isso é uma coisa notoriamente difícil de calcular com precisão, então imaginei que as pessoas se divertiriam mais concentrando-se na implementação de um método liso, em vez de obter esse dígito extra pela força bruta. Se as pessoas se sentirem diferentes, mudarei as regras.
Rodrigo A. Pérez
1
O que você procura como um método eficiente ou para evitar a força bruta? Observe que, por padrão, para códigos de golfe, não exigimos limites no tempo de execução ou no espaço; portanto, as respostas tendem a ser muito ineficientes quando otimizadas por serem curtas. Talvez você queira criar um código mais rápido ou um desafio de complexidade restrita?
xnor

Respostas:

3

Javascript, 141 138 135 131 bytes, 8 dígitos

É algo que eu acho. Deve ser um pouco improvável. Se alguém precisa de um começo: como calcular Feigenbaum . E se você preferir saber como fazer isso em termos de código, confira isso .

Copie e cole o seguinte código no seu console. Calcula 4.6692016 68823243 (portanto, não é realmente 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)

Thomas W
fonte
2

Python, 127 bytes

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

O crédito vale para @ThomasW com sua resposta em javascript.

Adicionar print(d)à saída 4.669201673141983 . Demora alguns segundos, devido às longas seqüências de caracteres serem calculadas antes da execução.

Uriel
fonte
1

Carvão , 84 bytes

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

Experimente online! Link para código detalhado para explicação.

Usa algoritmo a partir daqui .

Impressões 4.66920 0975097843 (6 dígitos)

Somente ASCII
fonte