计算器的标准差公式

别跟我说sqrt(1/n*sum(i=1,n,(x[i]-avg(x))^2))那个公式,那个公式要把数据先扫一遍算平均数,再扫一遍算标准差。老式的计算器里面直接加入一个新的数据他就能自动算出来,那个也不是把之前的数据全存下来了。那个是怎么做的。换句话说,已知n-1个变量的若干统计信息(如个数、和、平方和、标准差等等)和第n个数,如何求出n个变量的标准差。
就是给定x[1..n]要求只扫描数组一次,求标准差。别跟我说库函数,要算法。
谢谢。

第1个回答  2011-11-26
已知:n-1个数的平均数ave(n-1); n-1个数的标准差S(n-1); 第n个数 Xn;
求:n个数的标准差S(n)
方法:
n*ave(n)=(n-1)*ave(n-1)+Xn; 即已知ave(n-1)和Xn,可以求出ave(n).
n-1个数的方差:S(n-1)^2,即标准差的平方,用F(n-1)表示。
同理,n个数的标准差,求出n个数的方差即可。S(n)=sqrt(F(n))。
(n-1)F(n-1)=求和(Xi-ave(n-1))^2; i=1,...,n-1
nF(n)=求和(Xi-ave(n))^2; i=1,...,n
nF(n)=求和(Xi-ave(n))^2; i=1,...,n-1 再加上(Xn-ave(n))^2 最后一项都已知,可求出大小
目标化为:求和(Xi-ave(n))^2; i=1,...,n-1
上式中ave(n)用n*ave(n)=(n-1)*ave(n-1)+Xn的关系式代入。
变为:求和(Xi-ave(n-1)+(ave(n-1)-Xn)/n)^2 ; i=1,...,n-1
把Xi-ave(n-1)看成一项,展开,得到:
求和(Xi-ave(n-1))^2; i=1,...,n-1 加上 (n-1)*(ave(n-1)-Xn)^2/(n^2) 再加上
求和2(ave(n-1)-Xn)*(Xi-ave(n-1))/n; i=1,...,n-1
因为 求和2(ave(n-1)-Xn)*(Xi-ave(n-1))/n; i=1,...,n-1 的值为0
所以,所有项都已知。
归纳一下:nF(n)=(n-1)F(n-1)+(ave(n-1)-Xn)^2/(n^2)+(Xn-ave(n))^2
变换一下就能得到标准差S(n)的计算公式。
因为写起数学表达式来太麻烦,所以可能不是很清楚,有不明白的追问我吧。。。。
相似回答