Phân tích
Hãy đoán và sau đó cải thiện hệ thống đoán cho đến khi chính xác.
Bắt đầu bằng cách đoán câu trả lời là . Tất nhiên đó là sai. Để xem sai như thế nào, hãy gắn nhãn một đối tác trong mỗi cặp "Đỏ" và "Màu xanh" khác. Từ góc nhìn của bất kỳ cá nhân Đỏ nào, có một cơ hội 1 / ( 2 n - 1 ) rằng đối tác (Xanh) của họ sẽ ngồi đối diện với họ. Vì có n cá thể màu đỏ, hãy trừ n × 1 / ( 2 n - 1 ) khỏi dự đoán ban đầu đó.11 / ( 2 n - 1 )nn × 1 / ( 2 n - 1 )
Nhưng chờ đã - điều đó vẫn chưa hoàn toàn đúng, bởi vì tất cả các cặp vợ chồng đã được tính hai lần. Nếu một cặp vợ chồng ngồi đối diện, vẫn còn cặp vợ chồng, 2 n - 2 địa điểm và theo quan điểm của bất kỳ cá nhân Đỏ nào, khả năng họ là một phần của cặp vợ chồng thứ hai là 1 / ( 2 n - 3 ) . Do đó, chúng ta cần thêm lại .n - 12 n - 21/(2n−3)(n2)×1/(2n−1)×1/(2n−3)
Nhưng bây giờ chúng tôi đã trải qua những đóng góp cho kết quả từ bộ ba của các cặp vợ chồng, mà chúng tôi cần phải sửa chữa. Và cứ thế, cho đến cuối cùng chúng tôi đã chứa được tất cả cặp vợ chồng trong công thức. (Tất nhiên, đây chỉ là Nguyên tắc Bao gồm - Loại trừ trong hành động.) n
Công thức kết quả là
∑i=0n(−1)i(ni)1(2n−1)(2n−3)…(2n−2i+1)=1F1(−n,−n+12,−12) .(1)
Tính toán
Đối với các số nguyên dương , hàm siêu bội của Kummer là một đa thức bậc theo . Từ sự biến đổi Kummer1 F 1 ( - n , - n + 1n nz1F1( - n , - n + 12, z)nz
1F1( - n , - n + 12, - 12) = e- 1 / 2 1F1( 12, - n + 12, 12)
thật đơn giản để suy ra rằng giá trị giới hạn của xác suất khi tăng lên là . Sự hội tụ chậm: bạn phải nhân với để đạt được một chữ số thập phân bổ sung. Tuy nhiên, các giá trị chính xác (độ chính xác kép) có thể nhanh chóng được tính cho bất kỳ nào bằng cách lưu ý rằng các thuật ngữ trong tổng số bên trái của tăng chậm hơn so với quyền hạn của . Do đó, khi đạt , các giá trị mới về cơ bản sẽ bằng 0 so với (và trên thực tế, một phân tích gần hơn cho thấy rằng dừng tổng cộng bằnge - 1 / 2 ≈ 0,6065306597 ... n 10 n ( 1 ) - 1 / 2 i 52 e - 1 / 2 i = 45ne- 1 / 2≈ 0,6065306597 ...n10n( 1 )- 1 / 2Tôi52e- 1 / 2i = 45 sẽ làm việc).
Công thức này sẽ phá vỡ cho lớn hơn 10.000.000 trong môi trường tính toán nhất định do không chính xác trong bản ghi Gamma chức năng. Vấn đề phát sinh từ sự hủy bỏ trong các khác biệt phát sinh khi tính toán các thuật ngữ trong chuỗi. Một xấp xỉ tuyệt vời cho những khác biệt khi đủ lớn có thể được tìm thấy theo , trong đó là đạo hàm của ( hàm digamma ). Điều đó được thực hiện trong mã dưới đây, với chi phí nhỏ trong thời gian tính toán.n ψ ( n - 1 / 4 ) ψ đăng nhập Γnnψ ( n - 1 / 4 )ψđăng nhậpΓ
Thực hiện
Đoạn R
mã sau tính toán khoảng 20.000 giá trị độ chính xác kép mỗi giây.
f <- function(n) {
h <- function(n) {
ifelse(n < 1e6, lfactorial(n) - lfactorial(n-1/2), digamma(n+3/4)/2)
}
m <- min(n, 46)
k <- 0:m
x <- exp(h(n) - h(n-k) - lfactorial(k) - k*log(2)) * (-1)^k
sum(x)
}
Ví dụ, chúng ta hãy theo dõi mức log(f(n))
độ giới hạn của giá trị đối với lớn . Như đã nêu ở trên, mỗi hệ số trong thêm một vị trí thập phân của độ chính xác giới hạn. Vì vậy, chớ nhìn vào nơi thập phân trong logarit của tỷ lệ để , cho toàn bộ quyền hạn của từ qua :n 10 n n th f ( n ) e - 1 / 2 10 n = 10 1 n = 10 14−1/2n10nnthf(n)e−1/210n=101n=1014
> round(sapply(1:14, function(n) 10^n * (log(f(10^n)) + 1/2)), 3)
[1] -0.255 -0.251 -0.250 ... -0.250 -0.249 -0.249 -0.400
(Bảy giá trị đã được bỏ qua từ giữa, tất cả đều bằng -0.250
.) Mẫu không đổi rõ ràng. Cuối cùng, với , nó bắt đầu bị hỏng, cho thấy mất độ chính xác. Cải thiện điều này có thể sẽ yêu cầu số học có độ chính xác cao.n=1014