はじめMath! Javaでコンピュータ数学
第51回 確率の数学 確率密度関数
ものごとは白黒はっきりさせたいものです。なんだかぼんやりしたものを見ると,
伝統的な講道館柔道の試合は,
数学といえば,
確率変数
事象は式50.
コインの表裏のように,
確率密度関数
確率変数と確率の値の関係を,
各要素の現れる確率の合計は1となります。
このような関数を確率密度関数
グラフの横軸に確率変数,
演習では,
- ※1)
- random variable
- ※2)
- probability density function
- ※3)
- probability distribution
問題 n個のさいころを同時に投げて,出た目の最大値をXとします。このとき,確率変数Xの確率分布を,数学的に,そして統計的に答えてください。
これは大昔にある大学の入試問題として出題されたものです。数学的確率は,
解説
問題:n個のさいころを同時に投げて,
数学的に確率分布を求める
先ずは数学的に確率分布を計算してみましょう。目の最大値が1である確率とは,
最大値が2である確率とは,
最大値が3である場合とは,
以下同様に考えて,
以上が正しい式ならば,
確かに1になっています。間違っていないようですね。
この確率密度関数をグラフにする,=
ですから横一直線のグラフになります。nが増加するにつれて急速に変形し,
統計的に確率分布を求める
実際に数学的に求めた通りになるのか,
ソースコード:Sample NDiceMaxV al.
/*
問題 n 個のさいころを同時に投げて,出た目の最大値をX とします。このとき,確率変数X の確率分布を,数学的に,そして統計的に答えてください。
filename : Sample_NDiceMaxVal.java
*/
import java.util.Arrays;
class Sample_NDiceMaxVal {
public static void main(String[] args) {
int p = 6; //さいころの面数
Dice d6 = new Dice(p);
int n = 3; //さいころの個数
int trial = 10; //試行回数
int max[] = new int[p]; //最大値がn ならば,++new(n-1)
int result[] = new int[n]; //複数のさいころの目を保持
//---------------------------------
System.out.println("6 面のダイスを" + trial + "回振り,"
+ "出た目の最大値ごとに出現回数を表示する。");
for (int j=0; j<trial; ++j){
for (int i=0; i<n; ++i){
result[i] = d6.roll(1);
}
Arrays.sort(result); //昇順にソートされます
++max[result[result.length-1]-1]; //最大値の目の出現回数を++
}
double prob = 0;
for (int i=0; i<p; ++i){
System.out.print(i+1+"目"+max[i]+"回");
prob = (Math.pow((i+1.0)/6,trial) - Math.pow((i+.0)/6,trial))*100;
System.out.printf("P(%d) = %4.4f %% \n",i+1,prob);
}
}// end of main
}// end of class Sample_NDiceMaxVal
実行結果は次のようになりました。
C>java Sample_NDiceMaxVal
6 面のダイスを10 回振り,出た目の最大値ごとに出現回数を表示する。
1 目0 回P(1) = 0.0000 %
2 目0 回P(2) = 0.0017 %
3 目1 回P(3) = 0.0960 %
4 目0 回P(4) = 1.6365 %
5 目4 回P(5) = 14.4164 %
6 目5 回P(6) = 83.8494 %
試行回数を大きくすると,trial
)
確率密度関数のグラフは,
今回はここまで
演習のプログラムは今回ノーヒントでしたが,
今回のまとめ
- 確率密度関数について確認しました。
- 確率密度関数をシミュレーションするプログラムを作成しました。