見出し画像

高校数学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

いいなと思ったら応援しよう!