三倍方差计算

来源:互联网 发布:交换机镜像端口配置 编辑:程序博客网 时间:2024/04/30 10:11

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GXFlowSynchronizer
{
   public  class ThreeTimesVariance
    {
public  void start(){
LogHelper.Write("开始进行三倍标准差验证");
                List<double> doutcLevel = (from m in curList select (double)m.waterLevel).ToList();//数据来源
double tcLevel = ttv.CalculateStdDev(doutcLevel);//调用标准方差算法
double uclLevel = doutcLevel.Average() + (3 * tcLevel);//管制上限 (3 * tcLevel) 三倍方差 如5*tcLevel 就是5倍方差
double lclLevel = doutcLevel.Average() - (3 * tcLevel);//管制下限  再上限下限之外的数为异常应剔除


}


        public  double CalculateStdDev(IEnumerable<double> values)
        {
            double ret = 0;
            if (values.Count() > 0)
            {
                //  计算平均数   
                double avg = values.Average();
                //  计算各数值与平均数的差值的平方,然后求和 
                double sum = values.Sum(d => Math.Pow(d - avg, 2));
                //  除以数量,然后开方
                ret = Math.Sqrt(sum / values.Count());
            }
            return ret;
        }
    }
}