見出し画像

高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)10日目「正規分布を考える」

マガジンリスト > 数学B編 4.確率分布と統計的な推測 > 10日目 課題

おはようございます。

本日は、高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)の10日目です。

本日の課題は、正規分布による確率を計算するプログラムを作成することです。


正規分布

まず、正規分布について解説しておきます。

正規分布

$${X}$$が正規分布$${N(m,\sigma^2)}$$に従う確率変数であるとき

確率密度関数

$$
f(x) = \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{(x-m)^2}{2 \sigma^2}}
$$

期待値

$$
E(X) = m
$$

標準偏差

$$
\sigma(X) = \sigma
$$


課題

確率変数$${X}$$が標準正規分布$${N(0,1)}$$に従うとき、確率$${P(1 \leq X \leq 2)}$$を計算するプログラムを作成してください。


ヒント

今回は標準正規分布の確率密度関数

$$
f(x) = \frac{1}{\sqrt{2\pi} } e^{-\frac{x^2}{2}}
$$


をもとに 台形公式 を利用して計算するようにしてください。


プログラム

ヒントを踏まえて、課題の確率変数$${X}$$が標準正規分布$${N(0,1)}$$に従うときの確率$${P(1 \leq X \leq 2)}$$を計算するプログラムは、以下のように記述することができます。

// 標準正規分布による確率の計算
void setup(){

  // P(1≦X≦2)の値を計算する
  float prob = probability_of_snd(1.0,2.0);
  println("確率P(1≦X≦2):",prob);

}

// 標準正規分布
float standard_normal_distribution(
  float x
){
  return 
}

// 標準正規分布による確率P(a≦X≦b)を計算する関数(台形公式を利用)
float probability_of_snd(
  float a, // 積分領域の下限
  float b // 積分領域の上限
){
  float dx = 0.01;
  int division_num = (int)((b-a)/dx);
  float x, y1, y2;
  float prob = 0.0;
  for(int i=0; i<division_num; i++){
    x = a + i*dx;
    y1 = standard_normal_distribution(x);
    y2 = standard_normal_distribution(x+dx);
    prob = 
  }
  return prob;
}

ソースコード1 確率変数$${X}$$が標準正規分布$${N(0,1)}$$に従うときの確率$${P(1 \leq X \leq 2)}$$を計算するプログラム(未完成)

ソースコード1では、標準正規分布$${N(0,1)}$$の確率密度関数を standard_normal_distribution 関数とし、台形公式を利用して、確率$${P(a \leq X \leq b)}$$を計算する関数 probability_of_snd を準備しています。そして、この関数を setup 関数内で呼び出して、確率変数$${X}$$が標準正規分布$${N(0,1)}$$に従うときの確率$${P(1 \leq X \leq 2)}$$の値 prob を計算しています。
ただし、標準正規分布$${N(0,1)}$$の確率密度関数 standard_normal_distribution 、確率$${P(a \leq X \leq b)}$$を計算する関数 probability_of_snd 

// 標準正規分布
float standard_normal_distribution(
  float x
){
  return 
}

// 標準正規分布による確率P(a≦X≦b)を計算する関数(台形公式を利用)
float probability_of_snd(
  float a, // 積分領域の下限
  float b // 積分領域の上限
){
  float dx = 0.01;
  int division_num = (int)((b-a)/dx);
  float x, y1, y2;
  float prob = 0.0;
  for(int i=0; i<division_num; i++){
    x = a + i*dx;
    y1 = standard_normal_distribution(x);
    y2 = standard_normal_distribution(x+dx);
    prob = 
  }
  return prob;
}

は未完成です。
これらの計算の部分を追記してソースコード1を完成させてください。

なお、スケッチ名は「normaldistribution」としてください。


それでは、よろしくお願いします。

MK's papa

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