Nhân đôi thác


12

Đầu tiên, một phép toán xen kẽ, ngắn và đáng để bạn sử dụng:

Nếu 0 < a < 4, hàm logistic f(x) = ax(1-x) ánh xạ khoảng [0,1] bên trong chính nó. Điều này có nghĩa là người ta có thể chơi trò chơi lặp; chẳng hạn, nếu a = 2, giá trị ban đầu 0,3 trở thành 0,42, sau đó là 0,4872, v.v.

Khi tham số atăng, hàm số bậc hai ftrở nên phức tạp hơn theo nghĩa sau:

  • 0 < a < 1 tất cả các giá trị ban đầu lặp về 0.
  • 1 < a < 3 0 trở thành đẩy lùi, nhưng có một điểm cố định mới (a-1) / a thu hút tất cả các lần lặp.
  • 3 < a < 1+sqrt(6) điểm cố định mới trở thành đẩy lùi, nhưng xuất hiện chu kỳ 2 điểm thu hút.
  • 3.44949... < a < 3.54409... chu kỳ 2 trở nên đẩy lùi, nhưng chu kỳ 4 điểm thu hút xuất hiện.
  • Vân vân.

Feigenbaum nhận thấy rằng độ dài của các khoảng tham số này giảm với tốc độ ngày càng gần hơn 4.6692..., hằng số Feigenbaum . Khám phá tuyệt vời là chuỗi phân chia giai đoạn 2 này là một hiện tượng chung được chia sẻ bởi bất kỳ chức năng nào (như parabola bậc hai) đang tăng lên, sau đó giảm dần. Đây là một trong những báo cáo đầu tiên về tính phổ biến của sự hỗn loạn .

Bây giờ cho thử thách! Viết mã ngắn nhất có thể tính hằng số Feigenbaum theo độ chính xác mà bạn chọn. Vấn đề ở đây không phải là lừa đảo hệ thống bằng cách mã hóa một số mà bạn đã googled, mà là để máy tính thực sự tìm thấy giá trị. Để tham khảo, đây là hằng số đến 30 chữ số:

4.669201609102990671853203821578


5
Tôi ngạc nhiên khi chúng tôi không có một thách thức nào để tính toán hằng số này, một ý tưởng hay mà chúng tôi đã bỏ lỡ. Gần nhất dường như là để âm mưu thu hút logistic . Tôi khuyên bạn nên để mã nhận được một lỗi hoặc số chữ số tối đa và tạo ra hằng số trong phạm vi chính xác đó (bỏ qua các giới hạn máy qua một số điểm). Hoặc có thể để tính tỷ lệ đó giữa các lần nhân đôi thứ i và (i + 1), như sẽ hội tụ đến hằng số. Các golfer chọn độ chính xác là quá mơ hồ và không mã hóa cứng là không thể thực hiện được.
xnor

Tôi đã suy nghĩ rất kỹ về cách diễn đạt thử thách. Vấn đề là đây là một điều khó nổi tiếng để tính toán chính xác, vì vậy tôi cho rằng mọi người sẽ vui hơn khi tập trung vào việc thực hiện một phương pháp khéo léo, thay vì lấy thêm chữ số đó bằng vũ lực. Nếu mọi người cảm thấy khác nhau, tôi sẽ thay đổi các quy tắc.
Rodrigo A. Pérez

1
Bạn đang tìm kiếm một phương pháp khéo léo hoặc tránh lực lượng vũ phu? Lưu ý rằng theo mặc định cho các mã golf, chúng tôi không yêu cầu bất kỳ giới hạn nào về thời gian chạy hoặc không gian, vì vậy câu trả lời có xu hướng rất kém hiệu quả khi được tối ưu hóa vì ngắn. Có lẽ bạn đang muốn tạo một mã nhanh nhất hoặc thử thách độ phức tạp bị hạn chế?
xnor

Câu trả lời:


3

Javascript, 141 138 135 131 byte, 8 chữ số

Đó là điều tôi đoán. Nó nên được ứng biến khá nhiều. Nếu ai cần bắt đầu: cách tính Feigenbaum . Và nếu bạn muốn biết làm thế nào để viết mã, hãy kiểm tra cái này .

Sao chép dán đoạn mã sau trong bảng điều khiển của bạn. Tính 4.6692016 68823243 (nên không thực sự chính xác).

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

Tín dụng dành cho @ThomasW với câu trả lời javascript của anh ấy.

Thêm print(d)vào đầu ra 4.669201673141983 . Mất vài giây, do các chuỗi dài được tính toán trước khi thực hiện.


1

Than , 84 byte

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

Hãy thử trực tuyến!Liên kết với mã verbose để giải thích.

Sử dụng thuật toán từ đây .

In 4.66920 0975097843 (6 chữ số)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.