Analisis
Mari kita tebak dan kemudian secara sistematis meningkatkan tebakan itu sampai benar.
Mulailah dengan menebak jawabannya 1. Tentu saja itu salah. Untuk melihat betapa salahnya, beri label satu pasangan di setiap pasangan "Merah" dan lainnya "Biru". Dari sudut pandang setiap individu Merah, ada a1 / ( 2 n - 1 )kemungkinan pasangan (Biru) mereka akan duduk di hadapan mereka. Karena adan individu merah, mari kita kurangi n × 1 / ( 2 n - 1 ) dari tebakan awal itu.
Tapi tunggu - itu masih kurang tepat, karena semua pasangan dari pasangan telah ganda dihitung. Jika satu pasangan duduk berseberangan, masih adan - 1 pasangan, 2 n - 2 tempat, dan dari sudut pandang individu Merah mana pun, kemungkinan bahwa mereka adalah bagian dari pasangan kedua 1 / ( 2 n - 3 ). Karena itu kita perlu menambahkan kembali .(n2) ×1/(2n-1)×1/(2n-3)
Tetapi sekarang kami telah menghitung kontribusi yang kurang untuk hasil dari tiga kali lipat pasangan, yang perlu kita koreksi. Dan begitu seterusnya, sampai akhirnya kami telah ditampung semua pasangan dalam formula. (Ini, tentu saja, hanya Prinsip Inklusi-Pengecualian dalam tindakan.) n
Formula yang dihasilkan adalah
∑i = 0n( - 1)saya(nsaya)1( 2 n - 1 ) ( 2 n - 3 ) … ( 2 n - 2 i + 1 )=1F1( - n , - n +12, -12) .(1)
Komputasi
Untuk bilangan bulat positif , fungsi hypergeometric confluent Kummer adalah polinomial derajat dalam . Dari Transformasi Kummern 1F1( - n , - n +12, z)nz
1F1( - n , - n +12, -12) =e- 1 / 2 1F1(12, - n +12,12)
mudah untuk menyimpulkan bahwa nilai pembatas probabilitas ketika bertambah besar adalah . Konvergensi lambat: Anda harus mengalikan dengan untuk mendapatkan digit desimal tambahan. Namun demikian, nilai-nilai akurat (presisi ganda) dapat dengan cepat dihitung untuk setiap dengan mencatat bahwa istilah-istilah dalam jumlah kiri tumbuh lebih lambat daripada kekuatan . Jadi, pada saat mencapai , nilai-nilai baru pada dasarnya akan nol dibandingkan dengan (dan pada kenyataannya analisis yang lebih dekat menunjukkan bahwa menghentikan penjumlahan denganne- 1 / 2≈ 0.6065306597 …n10n( 1 )- 1 / 2saya52e- 1 / 2i = 45 akan bekerja).
Formula ini akan dipecah untuk lebih dari 10.000.000 di lingkungan komputasi tertentu karena ketidaktepatan dalam fungsi log Gamma. Masalah muncul dari pembatalan perbedaan yang timbul saat menghitung istilah dalam seri. Perkiraan yang sangat baik untuk perbedaan-perbedaan tersebut ketika cukup besar dapat ditemukan dalam hal , di mana adalah turunan dari ( fungsi digamma ). Itu diimplementasikan dalam kode di bawah ini, dengan sedikit biaya dalam waktu perhitungan.nnψ(n−1/4)ψlogΓ
Penerapan
RKode berikut menghitung sekitar 20.000 nilai presisi ganda per detik.
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)
}
Sebagai contoh, mari kita lacak seberapa dekat log(f(n))nilai pembatasnya untuk besar . Seperti diklaim di atas, masing-masing faktor in menambahkan satu tempat desimal untuk membatasi akurasi. Oleh karena itu mari kita lihat tempat desimal dalam logaritma rasio ke , untuk seluruh kekuatan dari hingga :−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
(Tujuh nilai telah dihilangkan dari tengah, semua sama dengan -0.250.) Pola konstannya jelas. Pada akhirnya, dengan , itu mulai rusak, menunjukkan hilangnya presisi. Memperbaiki ini kemungkinan akan membutuhkan aritmatika presisi tinggi.n=1014