Oszacuj spodziewaną odległość między dwoma losowymi punktami na urządzeniu $n$-kula [duplikat]

Nov 21 2020

Jakie jest najlepsze podejście do oszacowania, z Wolframem Mathematica, oczekiwanej odległości euklidesowej w a $(n+1)$-wymiarowa przestrzeń między dwoma punktami wybranymi jednakowo losowo na jednostce $n$-kula? 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

3 Roman Nov 21 2020 at 23:13

Nie jest to dokładna odpowiedź, ale sposób sprawdzenia dokładnych odpowiedzi metodą Monte Carlo.

Wygeneruj losowy punkt na jednostce $n$-kula:

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

Zmierz średnią odległość między przypadkowym punktem $P_0$ i kolejny losowy punkt na jednostce $n$-kula, uśredniając ponad $m$ losowe punkty:

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

Wypróbuj różne wartości $n$:

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

Wynik to 1.

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

To pasuje do wyniku @ flinty o wartości $4/\pi$.

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

To pasuje do wyniku @ flinty o wartości $4/3$.

Więcej wartości:

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}    *)

Aktualizacja

Myślę, że dokładna odpowiedź brzmi

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

Dla dużych $n$ średnia odległość jest zatem w przybliżeniu

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

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

Dla $n=3$:

Plik PDF jest $f(d) = d/2$lub w Mathematica TriangularDistribution[{0, 2}, 2]- rozkład w kształcie rampy. Możemy to przetestować numerycznie i otrzymamy wysoki$p$-wartość około 0,31, więc dobrze pasuje:

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}]]

Oczekiwana odległość jest tym, Mean[testdist]co daje$4/3$. Lub możesz to zrobić samodzielnie jako integralną część

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


Dla $n=2$:

Możesz zintegrować wokół koła, aby znaleźć średnią utrzymującą jeden punkt.

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

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

RandomPointmoże służyć do próbkowania z dowolnych Regiondefinicji i Sphereopisuje sfery jednostek w$R^n$(może to być zarówno region geometryczny, jak i prymityw graficzny). Oryginalne rozwiązanie @ flinty można uogólnić na dowolną liczbę wymiarów. Użycie tego typu podejścia pozwala uniknąć konieczności bardzo dużej wiedzy o problemie (jak w rozwiązaniu @ Roman).

Sposób oszacowania tego w oparciu o metodę Monte Carlo może wyglądać następująco:

(*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]

Daje to takie same wyniki, jak opisano powyżej.

Może też ułatwić generowanie regionu łączącego a Spherez a HalfPlanew celu realizacji kolejnego pytania w wątku komentarza o odległościach półkul, ale nie wiem wystarczająco dużo o$n>3$ geometria wymiarowa, aby poprawnie to zaimplementować ....