質問: 既にある平均値を更新し続けるアルゴリズムを教えてください。 平均値や分散を逐次求めるアルゴリズムを教えてください。
回答: !](https://latex.codecogs.com/gif.latex?S_n&space;=&space;%5Csum_%7Bi=1%7D%5E%7Bn%7D&space;x_i "S_n = \sum_{i=1}^{n} x_i") と置いたとき, ![](https://latex.codecogs.com/gif.latex?%5Cinline&space;%5C%7Bx_i%5C&space;|%5C&space;i&space;=&space;1,%5Cdots,n%5C%7D "\{x_i\ |\ i = 1,\dots,n\}") の平均 ![ は !](https://latex.codecogs.com/gif.latex?a_n&space;=&space;%5Cfrac%7BS_n%7D%7Bn%7D "a_n = \frac{S_n}{n}") と書けます. ![ を漸化式の形で書くと ! "S_{n+1} = S_n + x_{n+1}\ (n \geq 1)") となり, これより ! を ! と ! を用いて !](https://latex.codecogs.com/gif.latex?a_%7Bn+1%7D&space;=&space;%5Cfrac%7BS_n&space;+&space;x_%7Bn+1%7D%7D%7Bn+1%7D "a_{n+1} = \frac{S_n + x_{n+1}}{n+1}") と書けます. この方式では ![ と ! だけ保持しておけばよく, !](https://latex.codecogs.com/gif.latex?%5Cinline&space;a_n&space;*&space;n "a_n * n") を計算して ![ を復元する処理が不要になります. 分散は !%5E2 "V_n = \frac{1}{n} \sum_{i=1}^{n} (x_i - a_n)^2") と定義されますが, これを式変形して !](https://latex.codecogs.com/gif.latex?V_n&space;=&space;%5Cfrac%7B1%7D%7Bn%7D&space;%5Csum_%7Bi=1%7D%5E%7Bn%7D&space;x_i%5E2&space;-&space;a_n%5E2 "V_n = \frac{1}{n} \sum_{i=1}^{n} x_i^2 - a_n^2") と書けます. 先程と同様 ![](https://latex.codecogs.com/gif.latex?Q_n&space;=&space;%5Csum_%7Bi=1%7D%5E%7Bn%7D&space;x_i%5E2 "Q_n = \sum_{i=1}^{n} x_i^2") の漸化式 ![](https://latex.codecogs.com/gif.latex?Q_%7Bn+1%7D&space;=&space;Q_n&space;+&space;x_%7Bn+1%7D%5E2 "Q_{n+1} = Q_n + x_{n+1}^2") を考え, ![ を逐次計算しやすい形で書くと !%5E2 "V_{n+1} = \frac{Q_n + x_{n+1}^2}{n+1} - \left(\frac{S_n + x_{n+1}}{n+1}\right)^2") となります. 分散の場合は !](https://latex.codecogs.com/gif.latex?%5Cinline&space;n,&space;S_n,&space;Q_n "n, S_n, Q_n") を保持しておけばよくなります. 注. ![ の性質によっては計算で発生する誤差を考える必要がありますが, ここでは一般的な話として特に考慮は入れてありません.