Oszacowanie spodziewanej odległości euklidesowej między dwoma losowymi punktami na jednostce $n$-półkula

Nov 22 2020

Jakie jest najlepsze podejście do oszacowania, przy zastosowaniu Wolframa Mathematica, oczekiwanej odległości euklidesowej (w $(n+1)$-dimensional space) między dwoma punktami wybranymi równomiernie losowo na jednostce $n$- sfera hemi ?

Podejście, które mam na myśli, wykorzystuje wyrażenie, którego długość jest proporcjonalna do $n$, podczas gdy chciałbym prostszego i bardziej eleganckiego podejścia.

Odpowiedzi

5 flinty Nov 22 2020 at 00:45

Użyj rozkładu normalnego do wygenerowania $n$wartości i Normalizeuzyskać punkt na kuli. Upewnij się, że ostatnia współrzędna ma zawsze ten sam znak, używając Abs. Wygeneruj miliony tych punktów i oszacuj średnią odległość między parami:

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

Inny sposób pobierania próbek (wykorzystujący wbudowaną Spherefunkcję i RandomPointfunkcjonalność (zmodyfikowany z podobnego pytania o próbkowanie z powierzchni kuli

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]

(The $N=3$ wynik jest zgodny z wynikiem @ flinty *)