高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)3日目「確率変数の変換を考える1」
マガジンリスト > 数学B編 4.確率分布と統計的な推測 > 3日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学B編 4.確率分布と統計的な推測)の3日目です。
本日の課題は、変換された確率変数$${Y}$$に対する期待値と分散を求めるプログラムを作成することです。
確率変数の変換
まず、確率変換の変換について復習しておきます。
確率変数$${X}$$と定数$${a, b}$$に対して$${Y=aX+b}$$とすると、$${Y}$$も確率変数となり、
期待値 $${E(Y)=E(aX+b)=aE(X)+b}$$
分散 $${V(Y)=V(aX+b)=a^2V(X)}$$
標準偏差 $${\sigma(Y) = \sigma(aX+b) = |a| \sigma(X) }$$
課題
数直線上の原点に点$${\mathrm{P}}$$がある。1枚の硬貨を投げて、表が出ると +3 だけ、裏が出ると -2 だけ進む。この試行を3回繰り返すときの表の出た回数を$${X}$$、点$${\mathrm{P}}$$の座標を$${Y}$$とする。
このとき、 $${Y}$$を$${X}$$で表して$${Y}$$の期待値と分散を求めるプログラムを作成してください。
解法の2つの方法
今回の課題は2つの方法で$${Y}$$の期待値と分散を計算することができます。1つ目は確率変数$${X}$$、変換した確率変数$${Y}$$に対する確率分布を求めて、直接、確率変数$${Y}$$の期待値と分散を計算する方法です。今回はこちらの方法を利用してプログラムを作成します。2つ目は確率変数$${X}$$の期待値と分散を計算した後、上記で説明した「確率変数$${X}$$の期待値と分散」と「確率変数$${Y}$$の期待値と分散」との関係式を利用して確率変数$${Y}$$の期待値と分散を計算する方法です。こちらの方法を利用したプログラムは、明日(4日目)の課題で作成します。
アルゴリズム設計
まず、課題の「$${Y}$$を$${X}$$で表して」を考えます。3回繰り返すときの表の出た回数を$${X}$$としているので、3回繰り返すときの裏の出た回数は$${3-X}$$となります。一方、$${Y}$$の値は、「表が出ると +3 だけ、裏が出ると -2 だけ進む」となっていますので、
$$
Y= (+3) \times X + (-2) \times (3-X) = 5X-6
$$
となります。確率変数$${X}$$に対する確率分布が
$$
\begin{array}{c||cccc|c}
\hline
X & 0 & 1 & 2 & 3 & \mathrm{計} \\
\hline \\
P & \frac{1}{8} & \frac{3}{8} & \frac{3}{8} & \frac{1}{8} & 1 \\ \\
\hline
\end{array}
$$
となるので、各$${X}$$の値に対する確率変数$${Y}$$の値を求めたあと、確率変数$${Y}$$の期待値と分散の計算を行うことができます。
プログラム
今回の課題の$${Y}$$の期待値と分散を求めるプログラムを示します。
// 変換された確率変数の期待値と分散の計算
void setup(){
// 硬貨を3回投げた時の表が出る回数(確率変数)
int[] x = {0,1,2,3};
// 確率分布P
float[] p = {1.0/8.0, 3.0/8.0, 3.0/8.0, 1.0/8.0};
// 変換された確率変数の値
int[] y = new int[4];
for(int i=0; i<x.length; i++){
y[i] =
}
// 変換された確率変数の期待値の計算
float m_y = 0;
for(int i=0;i<y.length;i++){
m_y = m_y + y[i]*p[i];
}
// 変換された確率変数の分散の計算
float v_y = 0;
for(int i=0;i<y.length;i++){
v_y = v_y + (y[i]-m_y)*(y[i]-m_y)*p[i];
}
// 変換された確率変数の期待値と分散の値をコンソールに出力
println("期待値 :", m_y);
println("分散 :", v_y);
}
ソースコード1 $${Y}$$の期待値と分散を求めるプログラム(未完成)
ソースコード1では、確率変数の値を表す変数(配列)x とその確率分布を表す変数(配列)p を準備して、変換された確率変数の値を表す変数(配列) y を計算し、その変数 y を用いて期待値 m_y 、分散 v_y を計算して最後にそれらの結果をコンソールに出力しています。
ただし、変換された確率変数の値 y を計算する部分は未完成です。
// 変換された確率変数の値
int[] y = new int[4];
for(int i=0; i<x.length; i++){
y[i] =
}
この計算の部分を追記してソースコード1を完成させてください。
なお、スケッチ名は「transformedProbabilityVariable」としてください。
それでは、よろしくお願いします。
MK's papa