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