確率と統計​/二次方程式と確率 のバックアップの現在との差分(No.1)

Unity学習帳2冊目確率と統計 / 二次方程式と確率 のバックアップの現在との差分(No.1)
  Next »
1: 2016-05-19 (木) 20:03:16 osinko ソース 現: 2016-05-25 (水) 21:35:36 osinko ソース
Line 1: Line 1:
-TITLE:プログレス3+TITLE:二次方程式と確率 
 +#jsmath
**二次方程式と確率 [#sb757614] **二次方程式と確率 [#sb757614]
虚数の情緒P480から7.3.2 虚根の確率より 虚数の情緒P480から7.3.2 虚根の確率より
 +
 +まず、基本的な確認。実根と虚根を持つ二次方程式の例を以下に挙げる
 +
 +<公式>
 +\(判別式 D={ b }^{ 2 }-4ac\quad ,\quad 根の公式 \frac { -b\pm \sqrt { { b }^{ 2 }-4ac }  }{ 2a } \)
 +
 +<実根の例>
 +\({ x }^{ 2 }+2x-8=0\quad \Leftrightarrow \quad (x+4)(x-2)\\ x=-4,2\quad D={ 2 }^{ 2 }-4\times -8=36\)
 +
 +<虚根の例>
 +\({ x }^{ 2 }+3x+3=0\quad \Leftrightarrow \quad \frac { -3\pm \sqrt { { 3 }^{ 2 }-4\times 3 }  }{ 2 } =\frac { -3\pm \sqrt { 3 } i }{ 2 } \\ x=\frac { -3-\sqrt { 3 } i }{ 2 } ,\frac { -3+\sqrt { 3 } i }{ 2 } \quad \quad D={ 3 }^{ 2 }-4\times 3=-3 \)
 +
 +<pocketCasでグラフを見て定量、定性を確認>
 +&ref(siki1.png);
 +
 +***本に書いてある仕組みのプログラムをunityで書く [#x4d4f581]
 +
 +#code(csharp){{
 +using UnityEngine;
 +using System.Collections;
 +
 +public class Niji_rand : MonoBehaviour
 +{
 +   void Start()
 +   {
 +       int sampling = 1000000;
 +       for (int i = 0; i < 5; i++)
 +       {
 +           print(Test(sampling));
 +       }
 +   }
 +
 +   private float Test(int sampling)
 +   {
 +       int count = 0;
 +
 +       for (int i = 0; i < sampling; i++)
 +       {
 +           int b = RandomNum();
 +           int c = RandomNum();
 +
 +           if (D(b, c)) count++;  //判別式がマイナスの場合虚根となるのでカウントアップ
 +       }
 +       return (float)count / (float)sampling;    //確率を求める
 +   }
 +
 +   //判別式でマイナスの値で真を返す
 +   private bool D(int b, int c)
 +   {
 +       return (b * b - 4 * c < 0) ? true : false;
 +   }
 +
 +   //-9~9の乱数を返す
 +   private int RandomNum()
 +   {
 +       return Random.Range(-9, 9 + 1);
 +   }
 +
 +}
 +}}
 +出力は、ほぼ0.2022...周辺に収束されている
 +%%・・・理論値から多少ズレるのは+-0の重複分があるから??%%(読み進めるとこんな事を気にしても仕方がない事に気が付く)
 +
 +この後の順次実行のコードの場合
 +
 +#code(csharp){{
 +using UnityEngine;
 +using System.Collections;
 +using System.Collections.Generic;
 +
 +public class Prob : MonoBehaviour
 +{
 +
 +   void Start()
 +   {
 +       //intの範囲的に9999で止めている。https://msdn.microsoft.com/ja-jp/library/exx3b86w.aspx?f=255&MSPPError=-2147217396
 +       //?? unityは値のオーバーフローをすると実行が無警告で止まる ??? 試しに99999を追加すると無警告ノーコンソールで画面が固まる
 +       //この場合のクラッシュの特徴としてunity上のインターフェイスの▷ボタン(再生ボタン)を押して処理を中断できなくなる。ちょっと憶えておくとデバックの時困らないかも
 +       int[] h = { 4, 9, 16, 25, 36, 49, 64, 81, 99, 999, 9999, };
 +
 +       foreach (int n in h)
 +       {
 +           int count = 0;
 +           int D_count = 0;
 +
 +           for (int b = -n; b < n + 1; b++)
 +           {
 +               for (int c = -n; c < n + 1; c++)
 +               {
 +                   count++;
 +                   if ((b * b - 4 * c) < 0) D_count++;
 +               }
 +           }
 +           print(string.Format("方程式の総数={0}  虚根の場合={1}  虚根の確率={2}", count, D_count, (float)D_count / (float)count));
 +       }
 +   }
 +}
 +}}
 +
 +この実験からわかることは
 +&font(150%){虚根は係数b,cの範囲の拡大とともに減少していく};
 +
 +***要考察 [#k585a753]
 +この章は、最初は整数で考え次に実数で考えている
 +
 ++判別式を関数とみなしてb,cのグラフ上に描いたとき放物線の内側の面積が虚根であり外側が実根となる(この理屈をよく考える)。その外側の正方形が係数を計測している範囲になっている&br;(どんな現象もグラフにした途端に実数で定量、定性を判断するようになる。また面積で定量的に考えることもできる。これは大きな利点となっている)
 ++この面積比が整数h、実数kを大きくすることによって面積比がどんどん小さくなる理屈は視覚的にわかりやすい・・・
 +
 +1.がよくわからない
 +
 +***考察1 [#x1281923]
 +
 +&font(150%){確率は「起こり得る全体の中で希望するものの割合である」};
 +
 +-平面上の座標とみなされたbとcは均等に起こり得ると考える
 +-判別式を関数と見なしb入力c出力、つまりc(b)と考える
 +-希望するものの条件をc(b)として、全体をbとcの&font(Red){試行範囲};と考える
 +-&font(Red){成功条件関数};が描くグラフ内部の面積と平面上の均等に起こり得る座標の関係、矩形面積との面積比により確率が導ける
 +
 +-二次方程式は条件である判別式を導くために利用されている。あくまで確率だけを考えるなら成功条件と全体の関係を考えるだけでよい
 +
 +***例 [#n6ce6b47]
 +
 +簡単な例を考えてみる。\(x\)と\(y\)軸のグラフがある。成功条件を \(D=2x-3y\) で\(D\)がマイナス値になった時とする。試行範囲を \(0\le x\le 6\) 、\(0\le y\le 4\) とする。
 +
 +以上のことから成功条件関数は\(D=2x-3y=0\quad \rightarrow \quad 2x-3y=0\quad \rightarrow \quad -3y=-2x\quad \rightarrow \quad y=\frac { 2 }{ 3 } x\)
 +これらの事をグラフで確認すると以下になる
 +&ref(grp1.png);
 +
 +6×4の長方形の矩形の範囲面積が全体。画像で青色で示されている三角形の範囲が\(y=\frac { 2 }{ 3 } x\)の内部側の面積となっている
 +この様子を視覚的に眺めていると、ほぼ50%の確率で成功条件を満たすことが予想できる。実際にプログラムコードで乱数を作成し、その挙動を確かめる
 +
 +#code(csharp){{
 +using UnityEngine;
 +using System.Collections;
 +
 +public class prob2 : MonoBehaviour
 +{
 +   void Start()
 +   {
 +       int sampling = 1000000;
 +       for (int i = 0; i < 5; i++)
 +       {
 +           print(Test(sampling));
 +       }
 +   }
 +
 +   private float Test(int sampling)
 +   {
 +       int count = 0;
 +
 +       for (int i = 0; i < sampling; i++)
 +       {
 +           float x = Random.Range(0, 6f);  //floatの場合6fギリギリに近い小数点を含む数字、例えば5.98f等の数がランダムで出力されるので1加算しなくていい
 +           float y = Random.Range(0, 4f);
 +
 +           if (((2f * x) - (3f * y)) < 0) count++;  //判別式がマイナスの場合、成功と見なしてカウントアップ
 +       }
 +       return (float)count / (float)sampling;    //確率を求める
 +   }
 +}
 +}}
 +出力
 +0.500461
 +0.499495
 +0.499841
 +0.500345
 +0.499351
 +
 +やはり50%になる。考えれば当たり前のことなのだが成功関数や試行範囲によって複雑になることが考えられる
 +こういった考えを「一様分布」と呼ぶ
 +
 +資料:[[一様分布:https://ja.wikipedia.org/wiki/%E4%B8%80%E6%A7%98%E5%88%86%E5%B8%83]]
 +
 +***考察2 [#n8d103ab]
 +
 +本で行っている計算を別のやり方、具体的には微積分を使って求めてみる
 +まず、\(c=\frac { 1 }{ 4 } { b }^{ 2 }\) の第一象限での面積を考える
 +&ref(grp4.png);
 +\(c=\frac { 1 }{ 4 } { b }^{ 2 }\) のグラフ上の点は\(c\)を\(k\)とした時、 \(k=\frac { 1 }{ 4 } { b }^{ 2 }\quad \Leftrightarrow \quad { b }^{ 2 }=4k\quad \Leftrightarrow \quad b=2\sqrt { k } \) なので \(\left( b=2\sqrt { k } ,c=k \right) \) となる
 +この放物線の外側の面積は積分で考えると \(\displaystyle \int _{ 0 }^{ 2\sqrt { k }  }{ \frac { 1 }{ 4 } { b }^{ 2 }db } \) となる。この式を解くと
 +
 +\(\displaystyle \int _{ 0 }^{ 2\sqrt { k }  }{ \frac { 1 }{ 4 } { b }^{ 2 }db } \quad \mapsto \quad { \left[ \frac { 1 }{ 4 } \cdot \frac { 1 }{ 2+1 } { b }^{ 2+1 } \right]  }_{ 0 }^{ 2\sqrt { k }  }\quad \mapsto \quad { \left[ \frac { 1 }{ 12 } { b }^{ 3 } \right]  }_{ 0 }^{ 2\sqrt { k }  }\mapsto \quad \frac { 1 }{ 12 } { \left( 2\sqrt { k }  \right)  }^{ 3 }-\frac { 1 }{ 12 } { 0 }^{ 3 }\quad \mapsto \quad \frac { 8 }{ 12 } k\sqrt { k } \quad \mapsto \quad \frac { 2 }{ 3 } k\sqrt { k } \)
 +
 +となる。これは放物線のグラフの外側の面積なので内側の面積を求めることにする。積分が適用されている「長方形の矩形の面積」は \(\left( b=2\sqrt { k } ,c=k \right) \) より \(2k\sqrt { k } \)となる
 +この矩形と積分の値を引き算すると内側が出せる。これは
 +
 +\(2k\sqrt { k } -\frac { 2 }{ 3 } k\sqrt { k } \quad =\quad \frac { 6-2 }{ 3 } k\sqrt { k } \quad =\quad \frac { 4 }{ 3 } k\sqrt { k } \)
 +
 +第二象限までの面積を考えると2倍になる筈なので\(\frac { 4 }{ 3 } k\sqrt { k } \times 2\quad =\quad \frac { 8 }{ 3 } k\sqrt { k } \)となる
 +これに対する、乱数の試行範囲は\(k\)の値により\({ \left( 2k \right)  }^{ 2 }=4{ k }^{ 2 }\)となる
 +
 +従って確率を求める式は、起こり得る全体の面積と希望するものの面積との割合との計算により
 +
 +\(\frac { \frac { 8 }{ 3 } k\sqrt { k }  }{ 4{ k }^{ 2 } } \quad =\quad \frac { 8k\sqrt { k }  }{ 12{ k }^{ 2 } } \quad =\quad \frac { 2 }{ 3 } \cdot \frac { \sqrt { k }  }{ k } \quad =\quad \frac { 2 }{ 3\sqrt { k }  } \) となる
 +
 +得られた式は本と同様になることが確認できるので、これで間違いないと思われる
 +試しに\(k=49\)を求めてみる
 +&ref(grp5.png);
 +\(\frac { 2 }{ 3\sqrt { 49 }  } =0.09523...\)
 +
 +この\(k\)の値、つまり「実数の乱数の試行範囲」を限りなく大きくしていくと虚数の出る確率が極限まで減っていくのがイメージできる
 +
 +
 +#navi
  Next »


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