Estimer la distance attendue entre deux points aléatoires sur l'unité $n$-sphere [dupliquer]

Nov 21 2020

Quelle est la meilleure approche pour estimer, avec Wolfram Mathematica, la distance euclidienne attendue dans un $(n+1)$-espace dimensionnel entre deux points sélectionnés uniformément au hasard sur l'unité $n$-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

3 Roman Nov 21 2020 at 23:13

Pas une réponse exacte mais une manière Monte-Carlo de vérifier les réponses exactes.

Générer un point aléatoire sur l'unité $n$-sphère:

P[n_Integer?Positive] := Normalize[RandomVariate[NormalDistribution[], n]]

Mesurer la distance moyenne entre un point aléatoire $P_0$ et un autre point aléatoire sur l'appareil $n$-sphère, en faisant la moyenne sur $m$ points aléatoires:

M[n_Integer?Positive, m_Integer?Positive] := With[{P0 = P[n]},
    Mean[Table[Norm[P[n] - P0], {m}]]]

Essayez différentes valeurs de $n$:

M[1, 10^6]
(*    0.998648    *)

Le résultat est 1.

M[2, 10^6]
(*    1.27374    *)

Cela correspond au résultat de @ flinty $4/\pi$.

M[3, 10^6]
(*    1.33315    *)

Cela correspond au résultat de @ flinty $4/3$.

Plus de valeurs:

Table[M[n, 10^6], {n, 1, 10}]
(*    {0.998648, 1.27374, 1.33315, 1.35903, 1.37166,
       1.37969, 1.38504, 1.38929, 1.39232, 1.39459}    *)

Mettre à jour

Je pense que la réponse exacte est

d[n_] = 2^(n-1)*Gamma[n/2]^2/(Sqrt[π]*Gamma[n-1/2])

Pour les grands $n$ la distance moyenne est donc d'environ

Series[d[n], {n, ∞, 1}]

(*    Sqrt[2] - 1/(4 Sqrt[2] n) + O(1/n)^2    *)
2 flinty Nov 21 2020 at 22:21

Pour $n=3$:

Le PDF est $f(d) = d/2$ou dans Mathematica TriangularDistribution[{0, 2}, 2]- une distribution en forme de rampe. Nous pouvons tester cela numériquement et nous obtenons un$p$-valeur d'environ 0,31 donc c'est un bon ajustement:

points = RandomPoint[Sphere[], {1000000, 2}];
distances = EuclideanDistance @@@ points;
testdist = TriangularDistribution[{0, 2}, 2];
DistributionFitTest[distances, TriangularDistribution[{0, 2}, 2]]
Show[Histogram[distances, 1000, "PDF"], 
 Plot[PDF[testdist, x], {x, 0, 2}], Plot[d/2, {d, 0, 2}]]

La distance attendue est Mean[testdist]ce qui donne$4/3$. Ou vous pouvez le faire vous-même en tant qu'intégrale

$$ \int_{0}^{2} x\cdot\frac{x}{2} dx = \frac{4}{3} $$


Pour $n=2$:

Vous pouvez intégrer autour du cercle pour trouver la moyenne tenant un point fixe.

Integrate[
  EuclideanDistance[{0, 1}, {Cos[θ], Sin[θ]}],
  {θ, 0, 2 π}]/(2 π)

(* result: 4/Pi *)
1 JoshuaSchrier Nov 22 2020 at 01:09

RandomPointpeut être utilisé pour échantillonner à partir de Regiondéfinitions arbitraires et Spheredécrit la sphère unitaire dans$R^n$(il peut s'agir à la fois d'une région géométrique et d'une primitive graphique). Ainsi, la solution originale de @ flinty peut être généralisée à des nombres arbitraires de dimensions. Utiliser ce type d'approche évite d'avoir à en savoir beaucoup sur le problème (comme dans la solution de @ Roman).

Une méthode basée sur Monte Carlo pour estimer cela peut ressembler à ceci:

(*sample Euclidean distances of pairs of points*)
distanceDistributionOnSphere[dimensionality_, nSamples_ : 10^5] := 
 With[
  {randomPointsOnSurfaceOfNSphere = RandomPoint[Sphere[dimensionality], {nSamples, 2}]},
  EuclideanDistance @@@ randomPointsOnSurfaceOfNSphere]

(*Evaluate mean of the sample*)
MeanAround /@ distanceDistributionOnSphere /@ Range[10]

Cela donne les mêmes résultats que ceux indiqués ci-dessus.

Cela peut également faciliter la génération d'une région qui combine un Sphereavec un HalfPlaneafin de mettre en œuvre la question suivante dans le fil de commentaires sur les distances d'hémisphère, mais je n'en sais pas assez sur$n>3$ géométrie dimensionnelle pour implémenter cela correctement ...