Estimation de la distance euclidienne attendue entre deux points aléatoires sur une unité $n$-hémisphère
Quelle est la meilleure approche pour estimer, avec Wolfram Mathematica, la distance euclidienne attendue (en $(n+1)$-espace dimensionnel) entre deux points sélectionnés uniformément au hasard sur une unité $n$- hémi sphère ?
L'approche que j'ai en tête utilise une expression dont la longueur est proportionnelle à $n$, alors que je souhaiterais une approche plus simple et plus élégante.
Réponses
Utilisez une distribution normale pour générer $n$valeurs et Normalize
pour obtenir un point sur la sphère. Assurez-vous que la dernière coordonnée a toujours le même signe en utilisant Abs
. Générez des millions de ces points et estimez la distance moyenne entre les paires:
n = 3;
topt[p_] := MapAt[Abs, Normalize[p], -1]
points = topt /@ RandomVariate[NormalDistribution[0, 1], {1000000, n}];
distances = EuclideanDistance @@@ Partition[points, 2];
Histogram[distances]
Mean[distances]
(* 1.13137 *)
Une autre façon de faire l'échantillonnage (en tirant parti de la Sphere
fonction et de la RandomPoint
fonctionnalité intégrées (modifiée à partir d' une question similaire sur l'échantillonnage à partir de la surface de la sphère
distanceDistributionOnHalfSphere[dimensionality_, nSamples_:10^5] :=
With[{
(* take a few extra samples account for loss *)
randomPointsOnSurfaceOfNSphere = RandomPoint[Sphere[dimensionality], {4*nSamples, 2}],
(* define an operator that deletes points when either last coordinate is negative *)
upperHemisphere = DeleteCases[{{___, x_}, {___, y_}} /; (Negative[x] || Negative[y])]
},
(* apply operator to the list and compute list of distances *)
EuclideanDistance @@@ upperHemisphere @ randomPointsOnSurfaceOfNSphere
]
(* Evaluate mean of the sample *)
MeanAround /@ distanceDistributionOnHalfSphere /@ Range[10]
(Le $N=3$ le résultat est en accord avec le résultat de @ flinty *)