見出し画像

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

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