123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- using System;
- using System.Linq;
- namespace BaseLibDataProcess
- {
- public class CPK
- {
- /// <summary>
- /// 计算CPK
- /// </summary>
- /// <param name="UCL">上限</param>
- /// <param name="LCL">下限</param>
- /// <param name="data">数据</param>
- /// <returns></returns>
- public double CalcCPK(double UCL, double LCL, double[] data)
- {
- double cpk = 0;
- if (data.Length > 1)
- {
- cpk = (1 - CalcCa(UCL, LCL, data)) * CalcCp(UCL, LCL, data);
- //cpk = Math.Min((UCL - data.Average()) / (3 * CalcStdDev(data)), (data.Average() - LCL) / (3 * CalcStdDev(data)));
- }
- return cpk;
- }
- /// <summary>
- /// 计算CpU
- /// </summary>
- /// <param name="UCL">上限</param>
- /// <param name="data">数据</param>
- /// <returns></returns>
- public double CalcCpU(double UCL, double[] data)
- {
- double CpU = 0;
- if (data.Length > 1)
- {
- CpU = (UCL - data.Average()) / (3 * CalcStdDev(data));
- }
- return CpU;
- }
- /// <summary>
- /// 计算Ca
- /// </summary>
- /// <param name="UCL">上限</param>
- /// <param name="LCL">下限</param>
- /// <param name="data">数据</param>
- /// <returns></returns>
- public double CalcCa(double UCL, double LCL, double[] data)
- {
- double Ca = 0;
- if (data.Length > 1)
- {
- Ca = Math.Abs((data.Average() - (UCL + LCL) / 2) / ((UCL - LCL) / 2)); //准确度
- }
- return Ca;
- }
- /// <summary>
- /// 计算Cp
- /// </summary>
- /// <param name="UCL">上限</param>
- /// <param name="LCL">下限</param>
- /// <param name="data">数据</param>
- /// <returns></returns>
- public double CalcCp(double UCL, double LCL, double[] data)
- {
- double cp = 0;
- if (data.Length > 1)
- {
- cp = (UCL - LCL) / (6 * CalcStdDev(data)); //精确度
- }
- return cp;
- }
- /// <summary>
- /// 计算CpL
- /// </summary>
- /// <param name="LCL">下限</param>
- /// <param name="data">数据</param>
- /// <returns></returns>
- public double CalcCpL(double LCL, double[] data)
- {
- double cpl = 0;
- if (data.Length > 1)
- {
- cpl = (data.Average() - LCL) / (3 * CalcStdDev(data));
- }
- return cpl;
- }
- /// <summary>
- /// 计算标准偏差
- /// </summary>
- /// <param name="data">数据</param>
- /// <returns></returns>
- public double CalcStdDev(double[] data)
- {
- double dTemp = 0;
- for (int i = 0; i < data.Length; i++)
- {
- dTemp += Math.Pow(data[i] - data.Average(), 2);
- }
- double ret = Math.Sqrt(dTemp / (data.Length - 1));
- return ret;
- //double xSum = 0F;
- //double xAvg = 0F;
- //double sSum = 0F;
- //double tmpStDev = 0F;
- //int arrNum = data.Count;
- //for (int i = 0; i < arrNum; i++)
- //{
- // xSum += data[i];
- //}
- //xAvg = xSum / arrNum;
- //for (int j = 0; j < arrNum; j++)
- //{
- // sSum += ((data[j] - xAvg) * (data[j] - xAvg));
- //}
- //tmpStDev = Convert.ToSingle(Math.Sqrt((sSum / (arrNum - 1))).ToString());
- //return tmpStDev;
- }
- }
- }
|