二項分布
参考文献「数学ガール 乱択アルゴリズム」のP161よりunityを利用して二項分布の検証を行う
実際に二項分布の公式より導かれた確率の値が正しいものなのかシミュレーションし体感する
まず文献中の問題5-1を具体例にしてみた
表が出る確率が60%(0.6)で、裏が出る確率が40%(0.4)のコインを5回投げる。表が3回出る確率を求めよ。
この問題を解く式は二項分布の公式を利用すると
\(\left( \begin{matrix} 5 \\ 2 \end{matrix} \right) { \times 0.6 }^{ 3 }\times { 0.4 }^{ 2 }\) となる
\(\left( \begin{matrix} 5 \\ 2 \end{matrix} \right) \)は「組み合わせ」を表し、\(_{ 5 }{ C }_{ 2 }\)と同じ意味である。計算すると、
\(\left( \begin{matrix} 5 \\ 2 \end{matrix} \right) { \times 0.6 }^{ 3 }\times { 0.4 }^{ 2 }\quad =\quad \frac { 5\times 4 }{ 1\times 2 } { \times 0.216 }\times 0.16\quad =\quad 10{ \times 0.216 }\times 0.16\quad =\quad 0.3456\quad =\quad 34.56\)%となる
コンピューターによる万単位を超えたオーダーのシミュレーションは非常に有効である。つまり実際にコインを数十万、数百万回投げ表の出る数をかぞえるのは大変だが、unityを利用して疑似的にシミュレーションしてやれば、ほんの一瞬で求めた確率の正当性が確認できる。実際に以下のコードを何度か実行して値を見比べると、その誤差はわずかである。数式の意味を体感する意味で数学とプログラムは同時に勉強した方が絶対に良い
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
-
-
!
-
-
!
|
!
|
-
!
-
|
|
-
|
!
|
!
|
-
!
-
|
|
-
|
!
|
!
|
-
!
-
|
|
!
|
-
!
-
|
|
|
|
|
-
|
|
!
|
!
!
| using UnityEngine;
using System.Collections;
public class Test4 : MonoBehaviour
{
void Start()
{
print("シミュレーション結果 : " + Pr(0.6f, 5, 3, 100000));
print("二項分布の公式利用 : " + nCr(5, 2) * Mathf.Pow(0.6f, 3) * Mathf.Pow(0.4f, 2));
}
private float Pr(float headPercent, int tossCount, int headCount, int Sampling)
{
float result = 0;
for (int i = 0; i < Sampling; i++)
{
if (GetHead(headPercent, tossCount) == headCount) result++;
}
return result / (float)Sampling; }
private int GetHead(float headPercent, int tossCount)
{
int head = 0;
for (int i = 0; i < tossCount; i++)
{
if (TossCoin(headPercent) == true) head++;
}
return head;
}
public bool TossCoin(float headPercent)
{
if (Random.value < headPercent) return true;
return false;
}
public int nCr(int n, int r)
{
if (n == r || r == 0) return 1;
int deno = n;
int nume = 1;
for (int i = 2; i <= r; n--, i++)
{
deno *= (n - 1);
nume *= i;
}
return deno / nume;
}
}
|
表が出る確率ごとの分布をpocketCasにて計算し最後にすべて加算してみた。総和は\(1\)となる
本の中で「僕」は「これは簡単だね」と言うがテトラは「不思議です」と言った。これはテトラが正しい。難しいから不思議なのだ
これは表裏のそれぞれの確率が変わっても同様に総和が\(1\)となる。例えば表が80%。裏が20%でも\(1\)になる。公式の条件である \(p+q=1\) なので当然なのだが…
この世の不思議を一つ知った気になるのは僕だけだろうか?
思うに「\(0,1,2,\aleph \)」という数字は哲学的な、原始的な力を持っているらしい。\(2\)があるから人は自分と他人を区別できるし物体の表や裏が区別できるようになる