3: 2016-05-20 (金) 00:54:45 osinko |
現: 2016-05-25 (水) 21:35:36 osinko |
- | TITLE:プログレス3 | + | TITLE:二次方程式と確率 |
| #jsmath | | #jsmath |
| **二次方程式と確率 [#sb757614] | | **二次方程式と確率 [#sb757614] |
| &ref(siki1.png); | | &ref(siki1.png); |
| | | |
- | 本に書いてある仕組みのプログラムをunityで書く | + | ***本に書いてある仕組みのプログラムをunityで書く [#x4d4f581] |
| | | |
| #code(csharp){{ | | #code(csharp){{ |
| void Start() | | void Start() |
| { | | { |
- | int sampling = 100000; | + | int sampling = 1000000; |
| for (int i = 0; i < 5; i++) | | for (int i = 0; i < 5; i++) |
| { | | { |
| int c = RandomNum(); | | int c = RandomNum(); |
| | | |
- | if (D(b, c) < 0) count++; //判別式がマイナスの場合虚根となるのでカウントアップ | + | if (D(b, c)) count++; //判別式がマイナスの場合虚根となるのでカウントアップ |
| } | | } |
| return (float)count / (float)sampling; //確率を求める | | return (float)count / (float)sampling; //確率を求める |
| } | | } |
| | | |
- | //判別式 | + | //判別式でマイナスの値で真を返す |
- | private int D(int b, int c) | + | private bool D(int b, int c) |
| { | | { |
- | return (b * b) - 4 * c; | + | return (b * b - 4 * c < 0) ? true : false; |
| } | | } |
| | | |
| private int RandomNum() | | private int RandomNum() |
| { | | { |
- | return Random.Range(0, 9 + 1) * PositiveNegative(); | + | return Random.Range(-9, 9 + 1); |
| } | | } |
| | | |
- | //指定した表の確率でコイントスして表が出たら正数、裏で負数を返す | |
- | private int PositiveNegative(float headPercent = 0.5f) | |
- | { | |
- | if (Random.value < headPercent) return 1; | |
- | return -1; | |
- | } | |
| } | | } |
| }} | | }} |
- | 出力 | + | 出力は、ほぼ0.2022...周辺に収束されている |
- | 0.20434 | + | |
- | 0.20621 | + | |
- | 0.20502 | + | |
- | 0.20486 | + | |
- | 0.2047 | + | |
| %%・・・理論値から多少ズレるのは+-0の重複分があるから??%%(読み進めるとこんな事を気にしても仕方がない事に気が付く) | | %%・・・理論値から多少ズレるのは+-0の重複分があるから??%%(読み進めるとこんな事を気にしても仕方がない事に気が付く) |
| | | |
| この章は、最初は整数で考え次に実数で考えている | | この章は、最初は整数で考え次に実数で考えている |
| | | |
- | +判別式を関数とみなしてb,cのグラフ上に描いたとき放物線の内側の面積が虚根であり外側の正方形が実根となる(この理屈をよく考える) | + | +判別式を関数とみなしてb,cのグラフ上に描いたとき放物線の内側の面積が虚根であり外側が実根となる(この理屈をよく考える)。その外側の正方形が係数を計測している範囲になっている&br;(どんな現象もグラフにした途端に実数で定量、定性を判断するようになる。また面積で定量的に考えることもできる。これは大きな利点となっている) |
| +この面積比が整数h、実数kを大きくすることによって面積比がどんどん小さくなる理屈は視覚的にわかりやすい・・・ | | +この面積比が整数h、実数kを大きくすることによって面積比がどんどん小さくなる理屈は視覚的にわかりやすい・・・ |
| | | |
| 1.がよくわからない | | 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 |