Schätzen Sie den erwarteten Abstand zwischen zwei zufälligen Punkten auf der Einheit $n$-Kugel [Duplikat]
Was ist der beste Ansatz, um mit Wolfram Mathematica die erwartete euklidische Entfernung in a zu schätzen? $(n+1)$-dimensionaler Raum zwischen zwei Punkten, die gleichmäßig zufällig auf der Einheit ausgewählt werden $n$-Kugel? Der Ansatz, an den ich denke, verwendet einen Ausdruck, dessen Länge proportional zu ist$n$, während ich einen einfacheren und eleganteren Ansatz wünschen würde.
Antworten
Keine genaue Antwort, sondern eine Monte-Carlo-Methode, um die genauen Antworten zu überprüfen.
Generieren Sie einen zufälligen Punkt auf der Einheit $n$-Kugel:
P[n_Integer?Positive] := Normalize[RandomVariate[NormalDistribution[], n]]
Messen Sie den mittleren Abstand zwischen einem zufälligen Punkt $P_0$ und ein weiterer zufälliger Punkt auf der Einheit $n$-Kugel durch Mittelung über $m$ zufällige Punkte:
M[n_Integer?Positive, m_Integer?Positive] := With[{P0 = P[n]},
Mean[Table[Norm[P[n] - P0], {m}]]]
Versuchen Sie es mit verschiedenen Werten von $n$::
M[1, 10^6]
(* 0.998648 *)
Das Ergebnis ist 1.
M[2, 10^6]
(* 1.27374 *)
Dies entspricht dem Ergebnis von @ flinty von $4/\pi$.
M[3, 10^6]
(* 1.33315 *)
Dies entspricht dem Ergebnis von @ flinty von $4/3$.
Weitere Werte:
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} *)

Aktualisieren
Ich denke die genaue Antwort ist
d[n_] = 2^(n-1)*Gamma[n/2]^2/(Sqrt[π]*Gamma[n-1/2])
Für große $n$ Der mittlere Abstand beträgt daher ungefähr
Series[d[n], {n, ∞, 1}]
(* Sqrt[2] - 1/(4 Sqrt[2] n) + O(1/n)^2 *)
Zum $n=3$::
Das PDF ist $f(d) = d/2$oder in Mathematica TriangularDistribution[{0, 2}, 2]
- eine rampenförmige Verteilung. Wir können dies numerisch testen und bekommen ein High$p$-Wert von ungefähr 0,31, also passt es gut:
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}]]

Die erwartete Entfernung ist Mean[testdist]
die, die gibt$4/3$. Oder Sie können dies selbst als integraler Bestandteil tun
$$ \int_{0}^{2} x\cdot\frac{x}{2} dx = \frac{4}{3} $$
Zum $n=2$::
Sie können um den Kreis herum integrieren, um den Durchschnitt zu finden, der einen Punkt festhält.
Integrate[
EuclideanDistance[{0, 1}, {Cos[θ], Sin[θ]}],
{θ, 0, 2 π}]/(2 π)
(* result: 4/Pi *)
RandomPoint
kann verwendet werden, um aus beliebigen Region
Definitionen abzutasten, und Sphere
beschreibt die Einheitskugel in$R^n$(Es kann sowohl ein geometrischer Bereich als auch ein Grafikprimitiv sein). Die ursprüngliche Lösung von @ flinty kann also auf eine beliebige Anzahl von Dimensionen verallgemeinert werden. Mit diesem Ansatz müssen Sie nicht viel über das Problem wissen (wie in der Lösung von @ Roman).
Eine Monte-Carlo-basierte Methode zur Schätzung kann folgendermaßen aussehen:
(*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]
Dies ergibt die gleichen Ergebnisse wie oben angegeben.
Es kann auch einfacher sein, eine Region zu generieren, die a Sphere
mit a kombiniert HalfPlane
, um die nachfolgende Frage im Kommentarthread über Hemisphärenabstände zu implementieren, aber ich weiß nicht genug darüber$n>3$ Maßgeometrie, um das richtig umzusetzen ....