Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1399120
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: Erlang

2013-03-26 22:32:54

    计算方差或期望时,一般都是预先知道所有的数据项,下面的代码可以完成迭代式的方差与期望的计算
    meanvar(Esp, Var, X, I) when is_number(X) ->
           Next = I+1,
           C = X - Esp,
           NewEsp =  (X+Esp*I)/(Next),
           NewVar = Var+C*(X-NewEsp),
           { NewEsp, NewVar, Next };
    meanvar(Esp, Var,[], I) ->
           {Esp, Var, I};
    meanvar(Esp, Var, [X|H], I) ->
          {NewEsp, NewVar, Next} = meanvar(Esp,Var,X,I),
          meanvar(NewEsp, NewVar, H, Next).
   
    上述函数的调用方式就是meanval(0,0,H,0),参数1表示当前期望,参数2表示当前方差,参数3表示待计算方差与期望的数值列表,参数4表示当前数据的个数。返回值为列表H的期望,方差,数据项数目。
     上述代码解释了一个计算方差的累积原理:
              Var_new = Var_old+ (X-Esp_old)*(X-Esp_new)
               其中Var_old表示上一次迭代的方差值,X表示新加入的一个元素,Esp_old表示上一次迭代的期望
               可以通过数学归纳法得到证明。

    mean(Esp, [], _) -> Esp;

    mean(Esp, [X|H], I) ->
             Next = I+1,
             mean((Esp+(X-Esp)/(Next)), H, Next).   

    上述函数的调用方式mean(0,H,0),参数1表示当前期望,参数2表示待计算期望的数值列表,参数3表示数据项数目。

  
阅读(7038) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~