Tujuan dari tantangannya adalah sekitar plot penarik dari peta logistik sebagai fungsi dari parameter yang r (juga disebut bifurkasi diagram ), atau sub regional itu. Tampilan grafik dapat dilihat pada gambar berikut dari Wikipedia:
Latar Belakang
The peta logistik adalah fungsi matematika yang mengambil input x k dan peta untuk output x k + 1 didefinisikan sebagai
x k + 1 = r x k (1− x k )
di mana r adalah parameter peta, diasumsikan terletak pada interval [0, 4].
Mengingat r di [0,4], dan nilai awal x 0 pada interval [0,1], sangat menarik untuk berulang kali mengajukan permohonan fungsi untuk sejumlah besar N iterasi, menghasilkan nilai akhir x N . Perhatikan bahwa x N juga akan terletak pada [0,1] juga.
Sebagai contoh, pertimbangkan r = 3,2, N = 1000. Nilai awal x 0 = 0,01 memberi x 1000 = 0,5130. Untuk x 0 = 0,02 hasilnya adalah x 0 = 0,7995. Untuk setiap nilai awal lainnya x 0 nilai akhir x 1000 sangat dekat dengan baik 0,5130 atau 0,7995. Ini terlihat dalam grafik sebagai ketinggian dua garis pada posisi horisontal r = 3,2.
Ini tidak berarti bahwa untuk r = 3,2 setiap urutan konvergen ke salah satu dari dua nilai tersebut. Bahkan, untuk dua nilai awal yang dipertimbangkan di atas, urutannya adalah (perhatikan perilaku berosilasi):
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 ...
Apa yang benar adalah bahwa untuk cukup besar N , dan untuk hampir semua nilai awal x 0 , istilah x N akan mendekati salah satu elemen dari himpunan {0,5130, 0,7995}. Set ini disebut sebagai penarik r khusus ini .
Untuk nilai lain dari parameter r ukuran atractor set, atau elemen-elemennya, akan berubah. Grafik memplot elemen dalam penarik untuk setiap r .
Penarik untuk r tertentu dapat diperkirakan oleh
- menguji berbagai nilai awal x 0 ;
- membiarkan sistem berevolusi untuk sejumlah besar N iterasi; dan
- mencatat nilai akhir x N yang diperoleh.
Tantangan
Input
N : jumlah iterasi.
r 1 , r 2 dan s . Ini menentukan himpunan R dari nilai r , yaitu R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 2 }.
Prosedur
Set X dari nilai awal x 0 adalah tetap: X = {0,01, 0,02, ..., 0,99}. Opsional, 0 dan 1 juga dapat dimasukkan dalam X .
Untuk setiap r di R dan masing-masing x 0 di X , iterate logistik peta N kali untuk menghasilkan x N . Catat tupel yang diperoleh ( r , x N ).
Keluaran
Plot setiap tupel ( r , x N ) sebagai titik di bidang dengan r sebagai sumbu horizontal dan x N sebagai sumbu vertikal. Keluaran harus berupa grafik (bukan seni ASCII).
Aturan tambahan
- Prosedur yang ditunjukkan menentukan hasil yang diperlukan, tetapi tidak ditegakkan. Prosedur lain apa pun yang menghasilkan set tupel ( r , x N ) yang sama dapat digunakan.
- Input fleksibel seperti biasa.
- Kesalahan floating point tidak akan ditahan terhadap penjawab.
- Output grafis diperlukan, dalam format apa pun yang diterima . Secara khusus, output dapat ditampilkan di layar, atau file grafik dapat diproduksi, atau array nilai RGB mungkin output. Jika menghasilkan file atau array, silakan posting contoh seperti apa saat ditampilkan.
- Grafik dapat berupa vektor atau raster. Untuk grafik raster, ukuran gambar harus setidaknya 400 × 400 piksel.
- Setiap titik harus ditampilkan sebagai satu piksel, atau sebagai tanda dengan ukuran urutan satu piksel (jika tidak, grafik dengan cepat akan berantakan).
- Rentang sumbu harus [0,4] untuk r (sumbu horizontal) dan [0,1] untuk x N (sumbu vertikal); atau mungkin lebih kecil asalkan mencakup semua poin yang diperoleh.
- Timbangan sumbu bersifat arbitrer. Secara khusus, skalanya tidak harus sama untuk kedua sumbu.
- Garis kisi, label sumbu, warna, dan elemen serupa dapat diterima, tetapi tidak diperlukan.
- Kode terpendek dalam byte menang.
Uji kasus
Klik pada setiap gambar untuk versi resolusi tinggi.
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;
Pengakuan
Terima kasih kepada @FryAmTheEggman dan @AndrasDeak atas komentar bermanfaat mereka sementara tantangannya ada di kotak pasir.
Jawaban:
MATL,
32302827 byte4 byte disimpan berkat @Luis
Format input
r1
,s
,r2
, danN
Cobalah di MATL Online
Penjelasan
sumber
Mathematica, 65 byte
Fungsi murni mengambil argumen N, r1, r2, s dalam urutan itu.
Nest[r#(1-#)&,x,N]
iterates fungsi logistikr#(1-#)&
totalN
kali mulai darix
; di sini argumen pertama ke function (#
) adalahN
pertanyaan;Point@{r,...}
menghasilkanPoint
yangGraphics
akan senang untuk merencanakan.Table[...,{x,0,1,.01},{r,##2}]
menciptakan sejumlah besar poin-poin ini, denganx
nilai berjalan dari0
ke1
dalam peningkatan.01
; yang##2
di{r,##2}
Menandakan semua argumen fungsi asli mulai dari yang kedua, dan begitu{r,##2}
mengembang ke{r,r1,r2,s}
yang benar menetapkan jangkauan dan peningkatan untukr
.Contoh output, pada test case kedua: input
menghasilkan grafik di bawah ini.
sumber
Mathematica, 65 byte
Saya menggunakan beberapa trik Greg Martin dan ini adalah versi saya tanpa menggunakan Grafik
memasukkan
keluaran
memasukkan
keluaran
sumber
TI-Basic, 85 byte
Program TI-Basic lengkap yang mengambil input dalam urutan
r1,r2,s,N
dan kemudian menampilkan output secara real time pada layar grafik. Perhatikan bahwa ini cenderung sangat lambat .Berikut adalah contoh output tidak lengkap yang dihasilkan setelah sekitar 2,5 jam untuk input
3,4,0.01,100
:sumber
*
tanda - tandanya.Memproses JS,
125123120 byteTerima kasih kepada Kritixi Lithos untuk menghemat 3 byte.
Cobalah online! Panggilan menggunakan
f(N, r_1, r_2, s);
sumber
void
denganvar
karena Memproses JSx*=p*(1-x)
bisa menjadix*=p-p*x
var f(n,q,r,s){size(4e3,1e3);for(i=0;i<1;i+=.01)for(p=q;x=i,p<=r;point(p*1e3,1e3-x*1e3),p+=s)for(j=0;j<n;j++)x*=p-p*x;}
119 byteGEL , 158 byte
Ini mungkin bukan yang terpendek, tetapi menarik secara real time, meskipun bisa sangat lambat dengan input besar. Bagaimanapun, ini adalah fungsi anonim yang mengambil input dalam format
(N,r1,r2,s)
dan output plot di jendela baru. Perhatikan bahwa ini harus dijalankan dengan Genius versi GNOME.sumber
R,
159147 byteYang menghasilkan fungsi
plot(NA,...)
menciptakan kanvas kosong yang memiliki dimensi yang benar.q
adalah fungsi yang melakukan iterasi. Dibutuhkan nilair
, dan kemudian melakukann
iterasi untuk semua titik awal antara0.01
dan0.99
. Kemudian mengembalikan vektor yang dihasilkan.Untuk loop berlaku fungsi
q
untuk urutana
keb
dengan langkahs
. Alih-alih mengembalikan nilai, itu menambahkan mereka sebagai poin ke plot. Jika titik tarikan adalah satu nilai, semua poin akan tumpang tindih dan ditampilkan sebagai satu titik.cex=.1
adalah tambahan yang diperlukan untuk membuat poin sekecil mungkin.sumber