두배 캐스케이드


12

먼저, 수학적 해석, 짧고 가치가 있습니다.

경우 0 < a < 4는 로지스틱 함수는 f(x) = ax(1-x) 자체의 내부에 간격 [0,1]를 매핑한다. 이것은 반복 게임을 할 수 있다는 것을 의미합니다. 예를 들어, a = 2 인 경우 초기 값 0.3은 0.42, 0.4872 등이됩니다.

매개 변수가 a증가함에 따라 2 차 함수 f는 다음과 같은 의미에서 더 복잡해집니다.

  • 0 < a < 1 모든 초기 값은 0으로 반복됩니다.
  • 1 < a < 3 0은 반발하지만 모든 반복을 끌어들이는 새로운 고정 소수점 (a-1) / a가 있습니다.
  • 3 < a < 1+sqrt(6) 새로운 고정 포인트는 반발하지만, 2 개의 유치 포인트 사이클이 나타납니다.
  • 3.44949... < a < 3.54409... 2주기는 격퇴되지만 4 회 유인 포인트주기가 나타납니다.
  • 기타

파이 겐 바움은 이러한 매개 변수 간격의 길이가 점점 더 가까이에 도착 비율로 감소 것으로 나타났습니다 4.6692...의 파이 겐 바움 상수 . 놀라운 발견은이 2 분기 분기 시퀀스는 2 차 포물선과 같은 함수가 증가하고 감소하는 모든 기능에 의해 공유되는 일반적인 현상이라는 것입니다. 이것은 혼돈 의 보편성에 관한 첫 번째 보고서 중 하나였습니다 .

이제 도전하십시오! Feigenbaum 상수를 원하는 정확도로 계산 하는 가장 짧은 코드를 작성하십시오 . 여기서 요점은 없습니다 당신이 봤하는 숫자를 인코딩하여 시스템을 속임수, 실제로 가지고있는 컴퓨터가 값을 찾을 수 있습니다. 참고로 다음은 30 자리의 상수입니다.

4.669201609102990671853203821578


5
이 상수를 계산하는 데 어려움을 겪지 않은 것에 놀랐습니다. 우리가 놓친 좋은 생각입니다. 로지스틱 어 트랙터 를 플로팅하는 것이 가장 가깝습니다 . 코드가 최대 오류 또는 자릿수를 가져 와서 그 정확도 내에서 상수를 생성하도록 제안합니다 (어떤 점을 지나면 기계 한계를 무시하십시오). 또는 상수에 수렴하는 것처럼 i 번째와 (i + 1) 배가 간격 사이의 비율을 계산할 수도 있습니다. 정확도를 선택하는 골퍼가 너무 모호하며 하드 코딩이 불가능합니다.
— xnor

나는 도전을 표현하는 방법에 대해 열심히 생각했다. 문제는 이것이 정확하게 계산하기 어려운 것으로 악명 높기 때문에 사람들이 잔인한 힘으로 여분의 숫자를 얻는 것보다 매끄러운 방법을 구현하는 데 더 재미있을 것이라고 생각했습니다. 사람들이 다르게 느끼면 규칙을 바꾸겠습니다.
— Rodrigo A. Pérez

1
매끄러운 방법이나 무차별 한 힘을 피하기 위해 무엇을 찾고 있습니까? 코드 골프의 경우 기본적으로 런타임 또는 공간에 대한 경계가 필요하지 않으므로 짧게 최적화하면 응답이 매우 비효율적 인 경향이 있습니다. 아마도 가장 빠른 코드를 만들거나 복잡성 문제를 해결하려고하십니까?
— xnor

답변:


3

자바 스크립트, 141 138 135 131 바이트의 8 자리

내가 추측하는 것입니다. 상당히 개선 가능해야합니다. 누구든지 시작이 필요한 경우 : Feigenbaum 계산 방법 . 코드 방식으로 수행하는 방법을 알고 싶다면 this을 확인 하십시오 .

콘솔에 다음 코드를 붙여 넣습니다. 4.6692016 68823243을 계산합니다 (정확하지는 않습니다).

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

파이썬, 127 바이트

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

크레딧은 자바 스크립트 답변으로 @ThomasW에게갑니다.

print(d)출력에 추가 4.669201673141983 . 실행 전에 긴 문자열이 계산되어 몇 초가 걸립니다.


1

숯 , 84 바이트

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

온라인으로 사용해보십시오! 자세한 설명을 위해 자세한 코드로 연결하십시오.

여기 에서 알고리즘을 사용합니다 .

인쇄 4.66920 0975097843 (6 자리)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.