ユニット上の2つのランダムなポイント間の予想距離を推定します $n$-球[複製]

Nov 21 2020

Wolfram Mathematicaを使って、予想されるユークリッド距離を推定するための最良のアプローチは何ですか? $(n+1)$-ユニット上でランダムに均一に選択された2点間の次元空間 $n$-球?私が考えているアプローチでは、長さがに比例する式を使用します$n$、よりシンプルでエレガントなアプローチが欲しいのですが。

回答

3 Roman Nov 21 2020 at 23:13

正確な答えではなく、正確な答えをチェックするモンテカルロの方法。

ユニットにランダムなポイントを生成します $n$-球:

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

ランダムな点間の平均距離を測定します $P_0$ ユニット上の別のランダムなポイント $n$-球体、平均化することにより $m$ ランダムポイント:

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

のさまざまな値を試してください $n$

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

結果は1です。

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

これは@flintyの結果と一致します $4/\pi$

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

これは@flintyの結果と一致します $4/3$

その他の値:

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

更新

正確な答えは

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

大用 $n$ したがって、平均距離はおよそ

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

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

にとって $n=3$

PDFは $f(d) = d/2$またはMathematicaではTriangularDistribution[{0, 2}, 2]-ランプ型の分布。これを数値的にテストすることができ、$p$-値は約0.31なので、適切です。

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

予想される距離はMean[testdist]与えます$4/3$。または、これを統合として自分で行うことができます

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


にとって $n=2$

円の周りを統合して、1点を固定した平均を見つけることができます。

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

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

RandomPoint任意のRegion定義からサンプリングするために使用できSphere、単位球を$R^n$(幾何学的領域とグラフィックスプリミティブの両方にすることができます)。したがって、@ flintyの元のソリューションは、任意の数の次元に一般化できます。このタイプのアプローチを使用すると、(@ Romanのソリューションのように)問題についてあまり知る必要がなくなります。

これを推定するモンテカルロベースの方法は、次のようになります。

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

これにより、上記と同じ結果が得られます。

また、半球の距離に関するコメントスレッドで後続の質問を実装するために、Sphereとを組み合わせた領域を生成するのが簡単になる場合もありHalfPlaneますが、私は十分に知りません$n>3$ それを正しく実装するための次元ジオメトリ...