Oszacowanie spodziewanej odległości euklidesowej między dwoma losowymi punktami na jednostce $n$-półkula
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
Użyj rozkładu normalnego do wygenerowania $n$wartości i Normalize
uzyskać 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 *)
Inny sposób pobierania próbek (wykorzystujący wbudowaną Sphere
funkcję i RandomPoint
funkcjonalność (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 *)