Estimation de la distance euclidienne attendue entre deux points aléatoires sur une unité $n$-hémisphère

Nov 22 2020

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

5 flinty Nov 22 2020 at 00:45

Utilisez une distribution normale pour générer $n$valeurs et Normalizepour 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 *)
2 JoshuaSchrier Nov 23 2020 at 10:02

Une autre façon de faire l'échantillonnage (en tirant parti de la Spherefonction et de la RandomPointfonctionnalité 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 *)