Matlab丢失精度计算方差

时间:2012-05-04 01:27:13

标签: matlab statistics variance

我有这个载体[10000000000 10000000001 10000000002]

我尝试使用此公式计算其方差

formula http://dl.dropbox.com/u/8708831/imagen.png

我计算它,但我得到的答案是3.33333333466667e + 19 这是错误的,因为正确的答案是1。

我做错了什么?

MATLAB代码是

    total=0;
    m1=data(1);
    m2=(data(2)-m1)/2;
    q1=0;
    q2=q1+(((2-1)/2)*((data(2)-m1)^2));
    q3=q2+(((3-1)/3)*((data(3)-m2)^2));
    variance=q3/(3-1)

由于

1 个答案:

答案 0 :(得分:5)

M是平均计算,它应该是

Mk = ((k-1) M(k-1) + xk)/k

从而

m1=data(1);
m2=(data(2)+m1)/2;
q1=0;
q2=q1+(((2-1)/2)*((data(2)-m1)^2));
q3=q2+(((3-1)/3)*((data(3)-m2)^2));
variance=q3/(3-1)
variance =
     1

到底是什么,我感觉很慷慨,是通用尺寸数据的完整代码:

sizle = size(data,2);
M = zeros(1, sizle);
Q = M;
Variance = Q;
M(1)=data(1);
for i = 2:sizle
    M(i)=((i-1)*M(i-1) + data(i))/i;
    Q(i)=Q(i-1)+(i-1)*((data(i)-M(i-1))^2)/i;
    Variance(i) = Q(i)/(i-1);
end

Variance(end)
var(data)