Une analyse
Supposons, puis améliorons systématiquement la supposition jusqu'à ce qu'elle soit correcte.
Commencez par deviner que la réponse est . Bien sûr, c'est faux. Pour voir à quel point, étiquetez un partenaire dans chaque paire "Rouge" et l'autre "Bleu". Du point de vue de tout individu rouge, il y a chance que son partenaire (bleu) s'assoie en face d'eux. Parce qu'il y a individus rouges, soustrayons de cette supposition initiale.11/(2n−1)nn×1/(2n−1)
Mais attendez - ce n'est toujours pas tout à fait raison, car toutes les paires de couples ont été comptées deux fois. Si un couple est assis en face, il reste couples, places, et du point de vue de tout individu rouge, la chance qu'ils fassent partie d'un deuxième couple est de . Par conséquent, nous devons rajouter .n−12n−21/(2n−3)(n2)×1/(2n−1)×1/(2n−3)
Mais maintenant, nous avons sous-estimé les contributions au résultat des triplets de couples, que nous devons corriger. Et il en va ainsi, jusqu'à ce que nous ayons finalement accueilli les couples dans la formule. (Ceci, bien sûr, n'est que le principe d'inclusion-exclusion en action.) n
La formule résultante est
∑i=0n(−1)i(ni)1(2n−1)(2n−3)…(2n−2i+1)=1F1(−n,−n+12,−12).(1)
Calcul
Pour les entiers positifs , la fonction hypergéométrique confluente de Kummer est un polynôme de degré en . De la transformation de Kummern 1F1(−n,−n+12,z)nz
1F1(−n,−n+12,−12)=e−1/2 1F1(12,−n+12,12)
il est simple de déduire que la valeur limite de la probabilité lorsque grandit est . La convergence est lente: vous devez multiplier par pour atteindre un chiffre décimal supplémentaire. Néanmoins, des valeurs précises (double précision) peuvent être rapidement calculées pour tout en notant que les termes dans la somme de gauche croissent plus lentement que les puissances de . Ainsi, au moment où atteint , les nouvelles valeurs seront essentiellement nulles par rapport à (et en fait une analyse plus approfondie suggère que l'arrêt de la sommation parne−1/2≈0.6065306597…n10n(1)−1/2i52e−1/2i=45 marchera).
Cette formule se décomposera pour supérieur à 10 000 000 dans certains environnements informatiques en raison de l'imprécision de la fonction log Gamma. Le problème provient de l'annulation des différences survenant lors du calcul des termes dans la série. Une excellente approximation de ces différences lorsque est suffisamment grand peut être trouvée en termes de , où est la dérivée de (la fonction digamma ). Cela est implémenté dans le code ci-dessous, à un faible coût en temps de calcul.nnψ(n−1/4)ψlogΓ
la mise en oeuvre
Le R
code suivant calcule environ 20 000 valeurs de double précision par seconde.
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)
}
À titre d'exemple, suivons à quel point log(f(n))
sa valeur limite de est proche pour le grand . Comme revendiqué ci-dessus, chaque facteur de dans ajoute une décimale de précision limite. Examinons donc la décimale dans le logarithme du rapport de à , pour des puissances entières de de à :−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
(Sept valeurs ont été omises du milieu, toutes égales à -0.250
.) Le motif constant est clair. À la fin, avec , il commence à se décomposer, indiquant une perte de précision. Améliorer cela nécessiterait probablement une arithmétique de haute précision.n=1014