確率と統計​/確率の基礎 のバックアップ差分(No.4)

Unity学習帳2冊目確率と統計 / 確率の基礎 のバックアップ差分(No.4)
« Prev  Next »
3: 2016-01-30 (土) 01:49:33 osinko ソース 4: 2016-01-30 (土) 03:29:49 osinko ソース
Line 39: Line 39:
に分ける。これは二項定理の に分ける。これは二項定理の
-\({ \left( H+T \right)  }^{ 3 }\quad =\quad _{ 3 }{ C }_{ 0 }{ H }^{ 3 }T^{ 0 }+_{ 3 }{ C }_{ 1 }{ H }^{ 2 }T^{ 1 }+_{ 3 }{ C }_{ 2 }{ H }^{ 1 }T^{ 2 }+_{ 3 }{ C }_{ 3 }{ H }^{ 0 }T^{ 3 }\)+\({ \left( H+T \right)  }^{ 3 }\quad =\quad _{ 3 }{ C }_{ 0 }{ H }^{ 3 }T^{ 0 }+_{ 3 }{ C }_{ 1 }{ H }^{ 2 }T^{ 1 }+_{ 3 }{ C }_{ 2 }{ H }^{ 1 }T^{ 2 }+_{ 3 }{ C }_{ 3 }{ H }^{ 0 }T^{ 3 }\quad =\quad \left( \begin{matrix} 3 \\ 0 \end{matrix} \right) { H }^{ 3 }+\left( \begin{matrix} 3 \\ 1 \end{matrix} \right) { H }^{ 2 }T^{ 1 }+\left( \begin{matrix} 3 \\ 2 \end{matrix} \right) { H }^{ 1 }T^{ 2 }+\left( \begin{matrix} 3 \\ 3 \end{matrix} \right) T^{ 3 }\quad \)
この右辺の掛け合わせた係数部分を利用する事により各パターン数を抽出できる事を利用する この右辺の掛け合わせた係数部分を利用する事により各パターン数を抽出できる事を利用する
Line 75: Line 75:
このひとつの式から確率を求める計算は非常に難しい「本当に問題と数え方を理解していないと計算ができない」事がよくわかる このひとつの式から確率を求める計算は非常に難しい「本当に問題と数え方を理解していないと計算ができない」事がよくわかる
では、この求めた値が正当な値であるかunityを使って検証し、その正しさを体感してみる では、この求めた値が正当な値であるかunityを使って検証し、その正しさを体感してみる
 +
 +#code(csharp){{
 +using UnityEngine;
 +using System.Collections;
 +
 +public class Test5 : MonoBehaviour
 +{
 +
 +   //求めた確率の値が正しい事を検証する
 +   void Start()
 +   {
 +       //コインを3回投げて
 +       //「表が1枚以上出ている場合の数」を母数に
 +       //「表が3枚出ている場合の数」を分子にして
 +       //確率を10万回のサンプリングで求めている
 +       print("シミュレーション結果 : " + Pr(100000));
 +       print("二項定理の公式利用 : " + ((float)nCr(3, 0) / (float)(nCr(3, 0) + nCr(3, 1) + nCr(3, 2))));
 +   }
 +
 +   //指定回数サンプリング後、確率を返す
 +   private float Pr(int Sampling)
 +   {
 +       float deno = 0;
 +       float nume = 0;
 +       for (int i = 0; i < Sampling; i++)
 +       {
 +           int coin = GetHead(0.5f, 3);
 +           if (coin >= 1) deno++;          //「表が1枚以上出ている場合の数」を母数に
 +           if (coin == 3) nume++;          //「表が3枚出ている場合の数」を分子にして
 +       }
 +       return (float)nume / (float)deno;    //確率を返す
 +   }
 +
 +   //指定した「表の確率」で試行回数コイントスし表が出た回数を返す
 +   private int GetHead(float headPercent, int tossCount)
 +   {
 +       int head = 0;
 +       for (int i = 0; i < tossCount; i++)
 +       {
 +           if (TossCoin(headPercent) == true) head++;
 +       }
 +       return head;
 +   }
 +
 +   //指定した表の確率でコイントスして表が出たらtrue、裏でfalseを返す
 +   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;
 +   }
 +
 +}
 +}}
 +
 +何度か実行してみて求めた値とシミュレーションの値が近似する事を確かめて欲しい
« Prev  Next »


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom