Menggandakan kaskade

12

Pertama, selingan matematika, singkat, dan bernilai saat Anda:

Jika 0 < a < 4, fungsi logistik f(x) = ax(1-x) memetakan interval [0,1] di dalam dirinya sendiri. Ini berarti bahwa seseorang dapat memainkan game iterasi; misalnya, jika a = 2, nilai awal 0,3 menjadi 0,42, lalu 0,4872, dll.

Ketika parameter ameningkat, fungsi kuadrat fmenjadi lebih rumit dalam arti berikut:

  • 0 < a < 1 semua nilai awal beralih ke 0.
  • 1 < a < 3 0 menjadi menolak, tetapi ada titik tetap baru (a-1) / a yang menarik semua iterasi.
  • 3 < a < 1+sqrt(6) titik tetap baru menjadi menolak, tetapi siklus 2 poin menarik muncul.
  • 3.44949... < a < 3.54409... 2-siklus menjadi memukul mundur, tetapi siklus 4 poin menarik muncul.
  • dll.

Feigenbaum melihat bahwa panjang interval parameter ini menurun pada tingkat yang semakin dekat dan lebih dekat dengan 4.6692..., yang Feigenbaum konstan . Penemuan luar biasa adalah bahwa urutan bifurkasi periode 2 ini adalah fenomena umum yang dimiliki oleh setiap fungsi yang (seperti parabola kuadratik) meningkat, kemudian menurun. Ini adalah salah satu laporan pertama tentang universalitas kekacauan .

Sekarang untuk tantangan! Tulis kode sesingkat mungkin yang menghitung konstanta Feigenbaum untuk akurasi pilihan Anda. Intinya di sini bukan untuk menipu sistem dengan menyandikan nomor yang Anda cari di Google, tetapi agar komputer benar-benar menemukan nilainya. Untuk referensi, berikut adalah konstanta hingga 30 digit:

4.669201609102990671853203821578

Rodrigo A. Pérez
sumber
5
Saya terkejut kami belum memiliki tantangan untuk menghitung konstanta ini, ide bagus yang kami lewatkan. Tampaknya yang paling dekat adalah merencanakan penarik logistik . Saya menyarankan agar kode menerima kesalahan maksimum atau jumlah digit dan menghasilkan konstanta ke dalam akurasi itu (mengabaikan batas mesin melewati beberapa titik). Atau mungkin untuk menghitung rasio antara interval penggandaan i'th dan (i +1), seperti yang akan menyatu dengan konstanta. Para pegolf yang memilih keakuratan terlalu samar dan bukan hardcoding tidak dapat diterapkan.
xnor
Saya berpikir keras tentang bagaimana mengucapkan tantangan. Masalahnya adalah ini adalah hal yang terkenal sulit untuk dihitung secara akurat, jadi saya pikir orang akan lebih senang berfokus pada penerapan metode yang licin, daripada mendapatkan angka ekstra dengan kekuatan kasar. Jika orang merasa berbeda, saya akan mengubah aturan.
Rodrigo A. Pérez
1
Apa yang Anda cari sebagai metode yang licin atau menghindari kekerasan? Perhatikan bahwa secara default untuk golf kode, kami tidak memerlukan batasan waktu berjalan atau ruang, jadi jawaban cenderung sangat tidak efisien ketika dioptimalkan untuk menjadi pendek. Mungkin Anda ingin membuat kode tercepat atau tantangan kompleksitas terbatas?
xnor

Jawaban:

3

Javascript, 141 138 135 131 byte, 8 digit

Kurasa itu sesuatu. Ini harus diperbaiki sedikit. Jika ada yang membutuhkan awal: bagaimana cara menghitung Feigenbaum . Dan jika Anda lebih ingin tahu bagaimana melakukannya dengan bijaksana, lihat ini .

Salin tempel kode berikut di konsol Anda. Menghitung 4.6692016 68823243 (sehingga tidak benar-benar tepat).

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
sumber
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

Kredit berlaku untuk @ThomasW dengan jawaban javascript-nya.

Tambahkan print(d)ke output 4.669201673141983 . Membutuhkan beberapa detik, karena string panjang dihitung sebelum eksekusi.

Uriel
sumber
1

Arang , 84 byte

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

Cobalah online! Tautan ke kode verbose untuk penjelasan.

Gunakan algoritma dari sini .

Cetakan 4.66920 0975097843 (6 digit)

Khusus ASCII
sumber