![見出し画像](https://assets.st-note.com/production/uploads/images/168279688/rectangle_large_type_2_9ee0ac8318b36d1982d9041f901780bf.jpeg?width=1200)
高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)8日目「二項分布を考える」
マガジンリスト > 数学B編 4.確率分布と統計的な推測 > 8日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)の8日目です。
本日の課題は、二項分布による期待値、分散及び標準偏差を求めるプログラムを作成することです。
二項分布
まず、二項分布について解説しておきます。
二項分布 $${B(n,p)}$$
$$
P(X=r) = {}_nC_r p^r q^{n-r} \ \ (0 < p < 1, q = 1-p)
$$
で与えられる確率分布。ただし、$${r=0,1,2,\cdots, n}$$。
平均、分散、標準偏差
確率変数$${X}$$が二項分布$${B(n,p)}$$に従うとき、
$$
E(X) = np, \ \ V(X)=npq, \ \ \sigma(X) = \sqrt{npq} \ \ (q=1-p)
$$
課題
次の二項分布の平均、分散と標準偏差を求めるプログラムを作成してください。
(1) $${B(8,1/2)}$$
(2) $${B(5,1/4)}$$
(3) $${B(12,2/3)}$$
なお、今回の課題は二項分布の平均、分散と標準偏差の公式を利用すれば、簡単に計算することができますが、今回は敢えて二項分布の平均、分散と標準偏差の定義を用いて計算し、公式の結果と比較するようにします。なお、二項分布の平均$${m}$$と分散$${v}$$の定義を用いた計算式はそれぞれ
$$
m= \sum_{r=0}^n r {}_{n}C_r p^r q^{n-r}
$$
と
$$
v= \sum_{r=0}^n (r-m)^2 {}_{n}C_r p^r q^{n-r}
$$
で表されます。
プログラム
今回の課題(1)の二項分布の平均、分散と標準偏差を求めるプログラムを示します。
// 二項分布の平均、分散と標準偏差を計算する
void setup(){
int n = 8; // 試行回数
float p = 1.0/2.0; // 成功確率
float m = 0.0; // 平均
for(int r=0; r<=n; r++){
m =
}
float v = 0.0; // 分散
for(int r=0; r<=n; r++){
v =
}
// 標準偏差
float sigma =
// 定義による計算結果と公式による計算結果ををコンソールに出力
println("定義による計算結果 平均:",m, "分散:", v, "標準偏差:", sigma);
println("公式による計算結果 平均:",n*p, "分散:", n*p*(1.0-p), "標準偏差:", sqrt(n*p*(1.0-p)));
}
// 二項分布の関数
float binomialdistribution(
int n, // 試行回数
float p, // 成功確率
int r // 確率変数の値
){
float P =
return P;
}
// 異なるn個のものからr個を取る組合せの総数
int combination(int n, int r){
int p = 1; // 組合せの総数の分子
int q = 1; // 組合せの総数の分母
for(int i=0; i<r; i++){
p = p * (n-i);
q = q * (r-i);
}
int c = p / q; // 組合せの総数を計算
return c; // 組合せの総数を返す
}
ソースコード1 二項分布の平均、分散と標準偏差を求めるプログラム(未完成)
ソースコード1では、異なる$${n}$$個のものから$${r}$$個を取る組合せの総数を計算する関数 combination を用いて、二項分布の確率関数を表す関数 binomialdistribution を準備しています。そして、binomialdistribution 関数を setup 関数内で呼び出して、二項分布の平均 m 、分散 v と標準偏差 sigma を計算しています。
ただし、binomialdistribution 関数内の確率変数の値が r のときの確率分布の値 P を計算する部分
// 二項分布の関数
float binomialdistribution(
int n, // 試行回数
float p, // 成功確率
int r // 確率変数の値
){
float P =
return P;
}
と、setup 関数内で期待値 m 、分散 v と標準偏差 sigma を計算する部分
float m = 0.0; // 平均
for(int r=0; r<=n; r++){
m =
}
float v = 0.0; // 分散
for(int r=0; r<=n; r++){
v =
}
// 標準偏差
float sigma =
は未完成です。
これらの計算の部分を追記してソースコード1を完成させてください。
なお、スケッチ名は「MeanandVariance_BinomialDistribution」としてください。
それでは、よろしくお願いします。
MK's papa