ORACLE 有varince函数可以求极方差,很方便。
但是如果是大量的计算,最好是放地本来计算。
下面代码在程序里计算
1、sigma通常叫标准差,计算公式为:
,其中
为5点的平均值,
及Mean值,即:所有((五点值的平均值)-Mean值)的平方)/(Count(五点值的平均值)-1)再开平方。
(先求差值的平方,再求和,再除以n-1,最后开平方根)
2、Ca
:(Mean-(USL+LSL)/2)/(USL-LSL)/2,其中(USL+LSL)/2为规格中心值;
Mean:所有(五点值的平均值)的平均值
Sigma:方差,所有((((五点值的平均值)-Mean值)的平方)求和/Count(五点值的平均值)-1)再开平方
Cp
:(USL-LSL)/(6*Sigma)
Cpu:(USL-Mean)/(3*Sigma)
Cpl:(Mean-LSL)/(3*Sigma)
Cpk:Min(Cpu,Cpl)
//Ca
:(Sigma-(USL-LSL)/2)/(USL-LSL)/2
Ca :(Mean-(USL+LSL)/2)/(USL-LSL)/2,其中(USL+LSL)/2为规格中心值;
///
/// 求Sigma值/cp/cpk值等等
///
///
///
private double getSigma(DataTable dt, string colName,out double
mean)
{
//,其中为5点的平均值,及Mean值,即:所有((五点值的平均值)-Mean值)的平方)/(Count(五点值的平均值)-1)再开平方。(先求差值的平方,再求和,再除以n-1,最后开平方根)
if (dt.Rows.Count <
2)
{
//两条数据以上才存在sigma值
mean = 0;
return 0;
}
//求出此组数据的平均值先
double agv = 0;
foreach (DataRow dr in dt.Rows)
{
agv = agv + (double)(dr[colName]);
}
agv = agv / dt.Rows.Count;
mean = agv;
//求平方和
double sqlare = 0;
foreach (DataRow dr in dt.Rows)
{
sqlare = sqlare + ((double)(dr[colName]) - agv) * ((double)(dr[colName]) - agv);
}
//得variance值
sqlare = sqlare / (dt.Rows.Count - 1);
double sigma = Math.Pow(sqlare, 0.5);
return sigma;
}
加载中,请稍候......