👻

ランダムに3点とって鋭角三角形となる確率をJulia で考える。(その3)

2021/08/04に公開

はじめに

いろいろとこの確率を調べていくと,\frac14=0.25と考えるものが多くありました。また,それ以外の考え方も多数見つかりました。私たちは,確率は決まったもので,1通りと考えがちです。しかし,そんなことはなく,『私たちがどれを採用するか?現実とマッチしそうなものは?』という事のようです。

http://math.a.la9.jp/ptri.htm

http://www.eonet.ne.jp/~kotani/sanpo.files/random-triangle2.pdf

https://hiraocafe.com/note/eikakuprobability.html

連続一様分布

\mathbb R=\{x|-\infty <x<\infty\}より,選ぶxa\leqq x\leqq bの範囲にある確率を

\int_{a}^{b}f(x)dx

で定義します。このとき,f(x)確率密度関数と呼びます。

ここで,

f(x)=C(一定,0\leqq X\leqq 1)

であるとします。

\int_{-\infty}^{\infty}f(x)dx=\lim_{x\to\infty}2Cx=\infty

なので,\int_{-\infty}^{\infty}f(x)dx=1となるようにできません。よって,このままでは確率を考えることはできません。

A=\{x|-1 <x<1\}ならばどうでしょうか?

\int_{-1}^{1}f(x)dx=2C=1
\therefore C=\frac12

なので,f(x)=\frac12とすれば,確率を考えられそうです。そこで

f(x)=\begin{cases}\frac{1}{b-a}\quad (a\leqq x\leqq b)\\0\quad(x<a,\,b<x)\end{cases}

と定めると,\int_{-\infty}^{\infty}f(x)dx=1となります。このように考えた分布を連続一様分布といいます。

となります。これは,正方形や円の内部にランダムに点をとって考えた時の点の分布となります。

1x1の正方形の内部に点をとる(連続一様分布)

square1.jl
n=1000000
k=0
for i=1:n
    a1=rand(2)
    a2=rand(2)
    a3=rand(2)
    x1=a2-a1
    x2=a3-a1
    t1=(x1[1]*x2[1]+x1[2]*x2[2])/(sqrt(x1[1]^2+x1[2]^2)*sqrt(x2[1]^2+x2[2]^2))
    x1=a1-a2
    x2=a3-a2
    t2=(x1[1]*x2[1]+x1[2]*x2[2])/(sqrt(x1[1]^2+x1[2]^2)*sqrt(x2[1]^2+x2[2]^2))
    x1=a1-a3
    x2=a2-a3
    t3=(x1[1]*x2[1]+x1[2]*x2[2])/(sqrt(x1[1]^2+x1[2]^2)*sqrt(x2[1]^2+x2[2]^2))
    if t1>0.0000001  && t2>0.0000001 && t3>0.0000001
        k+=1
    end
end
println(k,",",n,",",k/n)

274718,1000000,0.274718

鋭角三角形となるのは約27%でした。

これが,適しているかどうかは,冒頭に述べた,『私たちがどれを採用するか?現実とマッチしそうなものは?』 にかかってきます。上の定義は限定されているようにも思えますが,-10000\leqq x\leqq 10000など幅を広くとることが可能です。

まず,私たちの持っている,「ランダム」の感覚はこの「連続一様分布」に近いと考えられます。この時,確率を考えるには遠いところをカットします。あとはこの考え方を採用するかどうかです。
『遠いところをカットしない』ようにするにはどうしたらいいでしょうか?1つの答えは 『標準正規分布』 です。

標準正規分布

確率密度関数f(x)

f(x)=\frac{1}{\sqrt{2\pi}}\exp\left(-\frac{x^2}2\right)

で定義されたものです。標準正規分布 といいます。
\int_{-\infty}^{\infty}\frac{1}{\sqrt{2\pi}}\exp\left(-\frac{x^2}2\right)dx=1

となります。

この分布に対する乱数は標準正規乱数と呼ばれ,randn()で求まります。これを利用すると,平面上に標準正規乱数を用いて点をとることができます。

square2.jl
using Plots

function randunitdisk()
    y, x = randn(),randn()
end

randunitdisk(n) = [randunitdisk() for _ in 1:n]

scatter(randunitdisk(2^12); legend=false, msw=0, ms=3, alpha=0.5, size=(500, 500))

中心に寄っていることが分かります。

square3.jl
n=1000000
k=0
for i=1:n
    a1=randn(2)
    a2=randn(2)
    a3=randn(2)
    x1=a2-a1
    x2=a3-a1
    t1=(x1[1]*x2[1]+x1[2]*x2[2])/(sqrt(x1[1]^2+x1[2]^2)*sqrt(x2[1]^2+x2[2]^2))
    x1=a1-a2
    x2=a3-a2
    t2=(x1[1]*x2[1]+x1[2]*x2[2])/(sqrt(x1[1]^2+x1[2]^2)*sqrt(x2[1]^2+x2[2]^2))
    x1=a1-a3
    x2=a2-a3
    t3=(x1[1]*x2[1]+x1[2]*x2[2])/(sqrt(x1[1]^2+x1[2]^2)*sqrt(x2[1]^2+x2[2]^2))
    if t1>0.0000001  && t2>0.0000001 && t3>0.0000001
        k+=1
    end
end

println("標準正規乱数での確率は",k/n)

標準正規乱数での確率は0.250036

これは\frac14に近づきそうですね。
やはり,標準正規分布に従うようなモデル(中心の方が確率が高く,遠くにいくと確率が低くなる)であれば,\frac14といえそうです。

まとめ

このように,確率を考えるときにはどのような確率分布で考えるかが大切になってきます。そして,どの分布を採用するかは,私たちが考えなくてはなりません。

https://ja.wikipedia.org/wiki/確率分布

このページを見ると,t分布やβ分布など様々な分布があることが分かります。どの分布にするのかは私たちの判断です。

今回,『平面上に3点をとって鋭角三角形を作る確率』を考えましたが,『私たちがどの確率分布を採用するか?現実とマッチしそうなものは?』の2つを整理して話すのが良さそうです。

Discussion