Programmierkurs
für Naturwissenschaftler/innen

「配列」の練習問題の略解

数学的基礎

$n$ 個のデーター $x_1$, $x_2$, …, $x_n$ に対し、この平均を $\bar{x}$ と書くとき、 \[ \bar{x} = \frac{1}{n}\sum_{i = 1}^n x_i \] であり、分散 $\sigma^2$ は、 \[ \begin{align*} \sigma^2 & = \frac{1}{n} \sum_{i=1}^n \left(x_i - \bar{x} \right)^2 \\ & = \frac{1}{n} \sum_{i=1}^n x_i^2 - \left(\frac{1}{n} \sum_{i=1}^n x_i\right)^2 \\ & = \overline{x^2} - \bar{x}^2 \end{align*} \] である。

平均を求める関数

概ね以下のようになるであろう。

function average(arr) {
  let ave = 0;  // 初期化を忘れないこと
  for (let i = 0; i < arr.length; i++) {  // ループ条件に注意
    ave += arr[i];
  }

  // 以下はまとめて return ave / arr.length とも書ける
  ave /= arr.length;
  return ave;
}

注意点

  • 変数の初期化を忘れないこと

  • 配列の要素数は .length で取得できる

  • 配列の添字は 0 から始まる点に注意せよ

  • for ではループ条件に細心の注意を払うこと

  • 最後の二行はまとめて return ave / arr.length と書くこともできる。 ただしこの場合、 ave が実際の意味と異なる (実際には最終的な ave には平均を n 倍したものが入っている) ので、変数名を ave から n_ave (平均の $n$ 倍、の意) などに変えた方がよい

分散を求める関数

どの式を使うかによって多少違いは出るが、概ね以下のような感じであろう。

function variance(arr) {
  let vari = 0;	  // var という変数名は使えないので注意
  let ave = average(arr);

  for (let i = 0; i < arr.length; i++) {
    vari += (arr[i] - ave) * (arr[i] - ave);
  }
  vari /= arr.length;
  return vari;
}

注意点

  • var という変数名は使えないので注意 (JavaScript で別の意味ですでに使われているので)

  • 二乗の部分は (arr[i] - ave) ** 2 と書いてもよい

検算

問題に指示されたデーターを使って、平均、分散を表示するには、例えば以下のように書ける。

data = [ 71, 80, 89 ]
console.log(average(data), variance(data))

このとき、

80 54

のように表示されるはずである。