確率と統計/コードで数え上げる
をテンプレートにして作成
Unity学習帳2冊目
確率と統計/コードで数え上げる をテンプレートにして作成
[
トップ
] [
差分
|
バックアップ
|
リロード
] [
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
[ ]
開始行:
#jsmath
**コードで数え上げる
確率の問題を考える
コインを50回投げて表が連続8回、裏が連続8回と続けて出...
まず、問題の規模を小さくして考え易くする
コインを6回投げて表表裏裏と続けて出る確率は幾らか?
と言った風に考える
PCとプログラムコードを利用して問題解決を試みる
まず実際にその事象の数を「数え上げて」みる
表をHead、'H'、裏をTail、'T'の一文字に抽象化して、その順...
この出力に対して希望する条件に見合った事象を検索に掛け、...
連続で変化する試行回数に沿って、その数の変化を観察し、そ...
その上で、見抜いた性質に対し未来予測を試みて、実際にプロ...
その考えが正しいか否かを確認する。この一連の工程を通して...
(アプローチとしては理科の実験のように実際に体験していく...
**問題を小さくして考える
まず、コインを4回投げた状態の順列を出力する。この場合、...
***Perm.cs
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
public class Perm : MonoBehaviour
{
void Start()
{
int length = 4;
char[] set = { 'H', 'T' };
List<string> strList = Root(set, length);
//全順列を網羅してファイル出力
string folder = Application.dataPath; ...
SaveText(folder, @"\順列.txt", strList.ToArray());
}
//基底部
List<string> Root(char[] set, int length)
{
List<string> strList = new List<string>();
int level = 0;
for (int i = 0; i < set.Length; i++)
{
char[] dat = new char[length];
dat[0] = set[i];
Loop(dat, level, set, strList);
}
return strList;
}
//帰納部
void Loop(char[] dat, int level, char[] set, List<str...
{
level++;
if (level < dat.Length) //帰納関数の終了条件
{
for (int i = 0; i < set.Length; i++)
{
char[] cloneDat = (char[])dat.Clone(); /...
cloneDat[level] = set[i];
Loop(cloneDat, level, set, strList); /...
}
}
else {
strList.Add(new string(dat));
}
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
}
}}
これに対する出力ファイルの内容は以下となっている。VisualS...
HHHH
HHHT
HHTH
&font(Fuchsia){HHTT};
HTHH
HTHT
HTTH
HTTT
THHH
THHT
THTH
THTT
TTHH
TTHT
TTTH
TTTT
ここでコインを4回連続で投げた場合、全体16、表表裏裏(HHTT...
int length = 5;
この4のところを5,6,7,...と変更して検索を掛け回数を記録す...
&ref(samp1.png);
ある程度の回数まで進むと手動で検索するのが面倒になってくる
そこでコードを書いてプログラムに検索させる
#code(csharp){{
void Start()
{
int length = 7;
char[] set = { 'H', 'T' };
List<string> strList = Root(set, length);
//全順列を網羅してファイル出力
string folder = Application.dataPath; ...
SaveText(folder, @"\順列.txt", strList.ToArray());
//文字列の中に"HHTT"がある行を抜き出す
var queary = strList.AsQueryable().Where(item => ...
var queList = queary.ToList();
queList.Add("検索前総数" + strList.Count().ToStri...
queList.Add("カウント数" + (queList.Count-1).ToSt...
SaveText(folder, @"\HHTT抜き出し.txt", queList.To...
}
}}
これを16回ぐらいまで記録して以下のような表を作った
|4回|5回|6回|7回|8回|9回|10回|11回|12回|13回|14回|15回|16...
|1/16 |4/32|12/64|32/128|79/256|186/512|424/1024|944/2048...
これを分母を揃えて数列にすると
\(\frac { 4096 }{ 65536 } ,\frac { 8192 }{ 65536 } ,\frac...
となる。この分子の変化の様子を観察すると4~7回目まで4096...
実際にコンピューター内で50%ずつ表裏がランダムに出るコイ...
***niji_prob.cs
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class niji_prob : MonoBehaviour
{
void Start()
{
int sampling = 10000;
int tossCount = 4;
float headPercentage = 0.5f;
string hitString = "HHTT";
char[] coinList = new char[tossCount];
for (int j = 0; j < 5; j++)
{
int successCount = 0;
for (int i = 0; i < sampling; i++)
{
coinList = GetCoinTossTest(coinList, head...
if (new string(coinList).Contains(hitStri...
}
print((double)successCount / (double)sampling);
}
}
//動作確認用メソッド
private void SimpleMethod(float headPercentage, strin...
{
coinList = GetCoinTossTest(coinList, headPercenta...
print(new string(coinList));
print(new string(coinList).Contains(hitString));
}
//コイントス試行
public char[] GetCoinTossTest(char[] coinList, float ...
{
for (int i = 0; i < coinList.Length; i++)
{
coinList[i] = TossCoin(headPercentage);
}
return coinList;
}
//指定した表の確率でコイントスして表が出たら'H'(表:He...
public char TossCoin(float headPercent)
{
if (Random.value < headPercent) return 'H';
return 'T';
}
}
}}
計算通りであるならばコインを4回投げた場合、1/16=0.065とな...
ほぼ予想通り
0.0642
0.0652
0.06
0.0619
0.0606
続けて12行目の
int tossCount = 5;
を「5」に変更してコインを投げる回数を変えて、確率があって...
問題ない様だ
***性質
数列を観察し以下の性質を推理した
\(\begin{matrix} 4回目 & \frac { 1 }{ 16 } \\ 5回目 & \f...
性質を見出すいくつかの方法
-グラフを視覚的に確認して、その描く線の軌跡が「なんの関数...
-階差数列を計算して、その値の変異を観察し推測する
ここでgoogleスプレッドシートを利用して4重に階差数列を導き...
以下のリンクを参照してほしい
&ref(sc1.png,mw:480,mh:360);
[[googleスプレッドシートを利用して作った階差数列の表:http...
左隣のひとつ前のセルと次のセルを関数で引算して差を計算し...
このようにマイクロソフトのエクセルやグーグルのスプレッド...
ここから数式に直したり、その仕組みを調べて考える行動に移...
では、これを数式に直し「この考えが正しいかどうか」を検証...
終了行:
#jsmath
**コードで数え上げる
確率の問題を考える
コインを50回投げて表が連続8回、裏が連続8回と続けて出...
まず、問題の規模を小さくして考え易くする
コインを6回投げて表表裏裏と続けて出る確率は幾らか?
と言った風に考える
PCとプログラムコードを利用して問題解決を試みる
まず実際にその事象の数を「数え上げて」みる
表をHead、'H'、裏をTail、'T'の一文字に抽象化して、その順...
この出力に対して希望する条件に見合った事象を検索に掛け、...
連続で変化する試行回数に沿って、その数の変化を観察し、そ...
その上で、見抜いた性質に対し未来予測を試みて、実際にプロ...
その考えが正しいか否かを確認する。この一連の工程を通して...
(アプローチとしては理科の実験のように実際に体験していく...
**問題を小さくして考える
まず、コインを4回投げた状態の順列を出力する。この場合、...
***Perm.cs
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
public class Perm : MonoBehaviour
{
void Start()
{
int length = 4;
char[] set = { 'H', 'T' };
List<string> strList = Root(set, length);
//全順列を網羅してファイル出力
string folder = Application.dataPath; ...
SaveText(folder, @"\順列.txt", strList.ToArray());
}
//基底部
List<string> Root(char[] set, int length)
{
List<string> strList = new List<string>();
int level = 0;
for (int i = 0; i < set.Length; i++)
{
char[] dat = new char[length];
dat[0] = set[i];
Loop(dat, level, set, strList);
}
return strList;
}
//帰納部
void Loop(char[] dat, int level, char[] set, List<str...
{
level++;
if (level < dat.Length) //帰納関数の終了条件
{
for (int i = 0; i < set.Length; i++)
{
char[] cloneDat = (char[])dat.Clone(); /...
cloneDat[level] = set[i];
Loop(cloneDat, level, set, strList); /...
}
}
else {
strList.Add(new string(dat));
}
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
}
}}
これに対する出力ファイルの内容は以下となっている。VisualS...
HHHH
HHHT
HHTH
&font(Fuchsia){HHTT};
HTHH
HTHT
HTTH
HTTT
THHH
THHT
THTH
THTT
TTHH
TTHT
TTTH
TTTT
ここでコインを4回連続で投げた場合、全体16、表表裏裏(HHTT...
int length = 5;
この4のところを5,6,7,...と変更して検索を掛け回数を記録す...
&ref(samp1.png);
ある程度の回数まで進むと手動で検索するのが面倒になってくる
そこでコードを書いてプログラムに検索させる
#code(csharp){{
void Start()
{
int length = 7;
char[] set = { 'H', 'T' };
List<string> strList = Root(set, length);
//全順列を網羅してファイル出力
string folder = Application.dataPath; ...
SaveText(folder, @"\順列.txt", strList.ToArray());
//文字列の中に"HHTT"がある行を抜き出す
var queary = strList.AsQueryable().Where(item => ...
var queList = queary.ToList();
queList.Add("検索前総数" + strList.Count().ToStri...
queList.Add("カウント数" + (queList.Count-1).ToSt...
SaveText(folder, @"\HHTT抜き出し.txt", queList.To...
}
}}
これを16回ぐらいまで記録して以下のような表を作った
|4回|5回|6回|7回|8回|9回|10回|11回|12回|13回|14回|15回|16...
|1/16 |4/32|12/64|32/128|79/256|186/512|424/1024|944/2048...
これを分母を揃えて数列にすると
\(\frac { 4096 }{ 65536 } ,\frac { 8192 }{ 65536 } ,\frac...
となる。この分子の変化の様子を観察すると4~7回目まで4096...
実際にコンピューター内で50%ずつ表裏がランダムに出るコイ...
***niji_prob.cs
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class niji_prob : MonoBehaviour
{
void Start()
{
int sampling = 10000;
int tossCount = 4;
float headPercentage = 0.5f;
string hitString = "HHTT";
char[] coinList = new char[tossCount];
for (int j = 0; j < 5; j++)
{
int successCount = 0;
for (int i = 0; i < sampling; i++)
{
coinList = GetCoinTossTest(coinList, head...
if (new string(coinList).Contains(hitStri...
}
print((double)successCount / (double)sampling);
}
}
//動作確認用メソッド
private void SimpleMethod(float headPercentage, strin...
{
coinList = GetCoinTossTest(coinList, headPercenta...
print(new string(coinList));
print(new string(coinList).Contains(hitString));
}
//コイントス試行
public char[] GetCoinTossTest(char[] coinList, float ...
{
for (int i = 0; i < coinList.Length; i++)
{
coinList[i] = TossCoin(headPercentage);
}
return coinList;
}
//指定した表の確率でコイントスして表が出たら'H'(表:He...
public char TossCoin(float headPercent)
{
if (Random.value < headPercent) return 'H';
return 'T';
}
}
}}
計算通りであるならばコインを4回投げた場合、1/16=0.065とな...
ほぼ予想通り
0.0642
0.0652
0.06
0.0619
0.0606
続けて12行目の
int tossCount = 5;
を「5」に変更してコインを投げる回数を変えて、確率があって...
問題ない様だ
***性質
数列を観察し以下の性質を推理した
\(\begin{matrix} 4回目 & \frac { 1 }{ 16 } \\ 5回目 & \f...
性質を見出すいくつかの方法
-グラフを視覚的に確認して、その描く線の軌跡が「なんの関数...
-階差数列を計算して、その値の変異を観察し推測する
ここでgoogleスプレッドシートを利用して4重に階差数列を導き...
以下のリンクを参照してほしい
&ref(sc1.png,mw:480,mh:360);
[[googleスプレッドシートを利用して作った階差数列の表:http...
左隣のひとつ前のセルと次のセルを関数で引算して差を計算し...
このようにマイクロソフトのエクセルやグーグルのスプレッド...
ここから数式に直したり、その仕組みを調べて考える行動に移...
では、これを数式に直し「この考えが正しいかどうか」を検証...
ページ名: