Cpk 计算公式
Min ((USL-average)/3s, (average-LSL)/3s)
USL: 规格上限
LSL: 规格下限
average: 样本平均值
s: 样本标准差
例子如下:
<?php
// php版本要5.4以上,不然不支持下面的数组声明方式
$list = [21.3,21.4,21.6,15.6,18.6,17,16,19,20,11,22,21.2,21.3,21.4,21.6,15.6,18.6,17];
$length = count($list);
$average = array_sum($list)/$length; // 平均值
$high = 22; // 最大值
$low = 11; // 最小值
/**
* 获取一组数据的标准差
* @param [int] $avg // $list的平均值
* @param string $list // 所要计算标准差的数据
* @return [object] [返回标准差]
*/
function getVariance($avg, $list)
{
$total_var = 0;
foreach ($list as $lv){
$total_var += pow( ($lv - $avg), 2 );
}
return sqrt( $total_var / (count($list)-1));
}
$stdev = getVariance($average, $list); // 标准差
$cpu = number_format(($high-$average)/(3*$stdev),8); // cpu
$cpl = ($average - $low)/(3*$stdev); // cpl
$cpk = min($cpu, $cpl); // cpk
echo $stdev.'---'.$cpu.'---'.$cpl.'----'.$cpk;
总结
这次要做的功能模块涉及到了计算cpk,计算cpk的难点在于标准差的计算。开始打算通过phpExcel插件调用excel自带的函数计算标准差,但是没有找到操作的办法,只能对数据样本遍历进行计算标准差,得出标准差之后再套用cpk的公式就可以求出cpk的值了。
网友评论