見出し画像

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

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

おはようございます。

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

本日の課題は、確率変数の独立性を用いて確率変数$${X}$$と$${Y}$$の和に対する期待値、分散及び標準偏差を求めるプログラムを作成することです。


確率変数の和と積

確率変換の和と積について再掲しておきます。

確率変数の和と期待値

$${X,Y}$$は確率変数、$${a,b}$$は定数とする。
$${ E(X+Y)=E(X)+E(Y) }$$
$${ E(aX+bY)=aE(X)+bE(Y) }$$


確率変数の独立

2つの確率変数$${X,Y}$$があって、$${X}$$のとる任意の値$${a}$$と、$${Y}$$のとる任意の値$${b}$$について$${P(X=a, Y=b)=P(X=a)P(Y=b)}$$が成り立つとき、確率変数$${X}$$と$${Y}$$は互いに独立であるという。


独立な確率変数の積の期待値、和の分散

$${X,Y}$$は互いに独立な確率変数、$${a,b}$$は定数とする。

独立な確率変数の積の期待値
$${ E(XY) = E(X)E(Y) }$$

独立な確率変数の和の分散
$${V(X+Y)=V(X)+V(Y)}$$,  $${V(aX+bY)=a^2V(X)+b^2V(Y)}$$


課題

10円硬貨1枚と100円硬貨1枚を同時に投げるとき、表の出た硬貨の金額の和の期待値と標準偏差を求めるプログラムを作成してください。


2つの解法

今回の課題は、2つの方法で表の出た硬貨の金額の和の期待値と標準偏差を計算することができます。1つ目は、同時分布を利用して$${E(aX+bY), V(aX+bY)}$$を計算する方法です。こちらは前回(6日目)行いました。2つ目は確率変数の独立性を利用して先に$${E(X),E(Y),V(X),V(Y)}$$を求めてその後$${aE(X)+bE(Y)}$$や$${a^2V(X)+b^2V(Y)}$$を計算する方法です。今回、こちらの方法で行います。


アルゴリズム設計 

$${X}$$を10円硬貨の裏が出たとき 0 、表が出たとき 1 となる確率変数とし、$${Y}$$を100円硬貨の裏が出たとき 0 、表が出たとき 1 となる確率変数とします。今回は、これらの確率変数$${X}$$と$${Y}$$の独立性を利用します。確率変数$${X}$$と$${Y}$$のそれぞれの確率分布は

$$
\begin{array}{c||cc|c}
\hline
X & 0 & 1 & \mathrm{計} \\
\hline \hline
P_{10} & 1/2 & 1/2 & 1 \\
\hline
\end{array}
$$

$$
\begin{array}{c||cc|c}
\hline
Y & 0 & 1 & \mathrm{計} \\
\hline \hline
P_{100} & 1/2 & 1/2 & 1 \\
\hline
\end{array}
$$

となります。これらの確率分布から確率変数$${X}$$の期待値$${m_X}$$と分散$${v_X}$$、確率変数$${Y}$$の期待値$${m_Y}$$と分散$${v_Y}$$は、それぞれ

$$
m_X = E(X) = \sum_{x=0}^1 x p_{10,x}, \ \ v_X = V(X) = \sum_{x=0}^1 (x -m_X)^2 p_{10,x}
$$

$$
m_Y = E(Y) = \sum_{y=0}^1 y p_{100,x}, \ \ v_Y = V(Y) = \sum_{y=0}^1 (y -m_Y)^2 p_{100,y}
$$

と計算することができます。これらの計算結果を利用して、表の出た硬貨の金額の和の期待値$${m}$$と標準偏差$${\sigma}$$は、

$$
m = 10 m_X + 100 m_Y
$$

$$
v = 10^2 v_X + 100^2 v_Y
$$

$$
\sigma = \sqrt{v}
$$

で計算することができます。


プログラム

今回の課題の確率変数の独立性を用いて確率変数の和の期待値と標準偏差を求めるプログラムを示します。

// 10円硬貨1枚と100円硬貨1枚を同時に投げるとき、
// 表の出た硬貨の金額の和の期待値と標準偏差を求める。
// 確率変数の独立性を利用
void setup(){

  int a = 10; // 10円
  int b = 100; // 100円 

  // 10円硬貨の裏表が出る確率分布
  float[] p_ten = {1.0/2.0,1.0/2.0};
  // 100円硬貨の裏表が出る確率分布
  float[] p_hundred = {1.0/2.0,1.0/2.0};

  // 独立な確率変数による期待値の計算
  float m_ten = 0.0; // 10円玉の期待値
  for(int x=0; x<=1; x++){ // 10円硬貨の裏(0)、表(1)
    m_ten = m_ten + x*p_ten[x];
  }
  float m_hundred = 0.0; // 100円玉の期待値
  for(int y=0; y<=1; y++){ // 100円硬貨の裏(0)、表(1)
    m_hundred = m_hundred + y*p_hundred[y];
  }
  float m = 
  
  // 独立な確率変数による分散の計算
  float v_ten = 0.0; // 10円玉の分散
  for(int x=0; x<=1; x++){ // 10円硬貨の裏(0)、表(1)
    v_ten = v_ten + (x-m_ten)*(x-m_ten)*p_ten[x];
  }
  float v_hundred = 0.0; // 100円玉の分散
  for(int y=0; y<=1; y++){ // 100円硬貨の裏(0)、表(1)
    v_hundred = v_hundred + (y-m_hundred)*(y-m_hundred)*p_hundred[y];
  }
  float v = 

  // 標準偏差の計算
  float sigma = sqrt(v);

  // 期待値、分散、標準偏差の値をコンソールに出力
  println("期待値 :", m);
  println("分散  :", v);
  println("標準偏差:", sigma);
}

ソースコード1 確率変数の独立性を用いて確率変数の和の期待値と標準偏差を求めるプログラム(未完成)

ソースコード1では、10円硬貨の裏表が出る確率分布 p_ten と100円硬貨の裏表が出る確率分布 p_hundred を配列として準備して、10円硬貨と100円硬貨のそれぞれで期待値 m_ten 、m_hundred と分散 v_ten 、v_hundred を計算し、確率変数の独立性を利用して、表の出た硬貨の金額の和の期待値 m と分散 v 及び標準偏差 sigma を求めています。
ただし、確率変数の独立性を利用して期待値 m と分散 v を計算する部分は未完成です。

  // 独立な確率変数による期待値の計算
  float m_ten = 0.0; // 10円玉の期待値
  for(int x=0; x<=1; x++){ // 10円硬貨の裏(0)、表(1)
    m_ten = m_ten + x*p_ten[x];
  }
  float m_hundred = 0.0; // 100円玉の期待値
  for(int y=0; y<=1; y++){ // 100円硬貨の裏(0)、表(1)
    m_hundred = m_hundred + y*p_hundred[y];
  }
  float m = 
  
  // 独立な確率変数による分散の計算
  float v_ten = 0.0; // 10円玉の分散
  for(int x=0; x<=1; x++){ // 10円硬貨の裏(0)、表(1)
    v_ten = v_ten + (x-m_ten)*(x-m_ten)*p_ten[x];
  }
  float v_hundred = 0.0; // 100円玉の分散
  for(int y=0; y<=1; y++){ // 100円硬貨の裏(0)、表(1)
    v_hundred = v_hundred + (y-m_hundred)*(y-m_hundred)*p_hundred[y];
  }
  float v = 

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

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


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

MK's papa

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