传统行业中CPK的计算方法

public class CPKMethed {
    private static double SL=12;//下限
    private static double SU=13;//上限
    
    public static void main(String[] args) {
        List<Double>list=new ArrayList<Double>();
        for(int i=0;i<150;i++){
            if(i<149){
                list.add(12.5);
            }else{
                list.add(12.1);
            }
            
        }
        System.out.println(Cpkresult(list,SL,SU));
        System.out.println(Cpresult(list,SL,SU));
        
    }
    public static double Cpresult(List<Double>list,double SL,double SU){
        double ave=C41(list);
        //System.out.println(ave);
        double c42=C42(list,ave);
        //System.out.println(c42);
        double cp=F41(SL,SU,c42);
        return cp;
    }
    public static double Cpkresult(List<Double>list,double SL,double SU){
        double ave=C41(list);
        //System.out.println(ave);
        double c42=C42(list,ave);
        //System.out.println(c42);
        double cp=F41(SL,SU,c42);
        //System.out.println(cp);
        double AD372=AD372(SL,SU,ave);
        double AD373=AD373(AD372,cp);
        double result=CPK(AD372,AD373);
        //System.out.println(result);
        return result;
    }
    /**
     * CPK
     * @return
     */
    public static double CPK(double AD372,double AD373){
        double result;
        if(AD372>1||AD372==1){
            result=0;
        }else{
            result=AD373;
        }
        return result;
    }
    public static double AD372(double SL,double SU,double Ave){
        double a=Math.abs(0.5*(SU+SL)-Ave);
        double result=a/(0.5*(SU-SL));
        return result;
    }
    public static double AD373(double AD372,double CP){
        double result=(1-AD372)*CP;
        return result;
    }
    /**
     * 标准偏差
     * @return
     */
    public static double C42(List<Double> list,double Average){
        double sum=0; 
        for(int i=0;i<list.size();i++){
            double a=list.get(i)-Average;
            a=a*a;
            sum=sum+a;
        }
        double Reagan=sum/(list.size()-1);
        double result = Math.sqrt(Reagan);
        return result;
    }
    /**
     * 平均值
     * @return
     */
    public static double C41(List<Double> list){
        double sum=0;
        for(int i=0;i<list.size();i++){
            sum=sum+list.get(i);
        }
        
        return sum/list.size();
    }
    /**
     * (下限规格-上限规格)/(6*标准偏差)
     * cp值
     * @return
     */
    public static double F41(double SL,double SU,double C42){
        double result=(SU-SL)/(6*C42);
        return result;
    }
}

打印结果:

5.075887078100676
5.103103630798282

猜你喜欢

转载自my.oschina.net/u/3288494/blog/1797720