示例#1
0
        public OutputParameters GetResult(double[] xArray, int[] vArray, double mumin, double mumax, double reso, out double z, double sigmaguess)
        {
            OutputParameters outputParameters = new OutputParameters();

            outputParameters.sigmaguess = sigmaguess;
            GetDistribution(xArray, vArray, mumin, mumax, 0.000000000000001, ref outputParameters, out z, sigmaguess);
            pub_function.resolution_getReso(StandardSelection.ProcessValue(z), reso, out z);
            outputParameters.μ0_final = StandardSelection.GetAvgValue(outputParameters.μ0_final);
            return(outputParameters);
        }
示例#2
0
 private void GetDistribution(double[] xArray, int[] vArray, double mumin, double mumax, double reso, ref OutputParameters outputParameters, out double z, double sigmaguess)
 {
     mumin  = StandardSelection.InverseProcessValue(mumin);
     mumax  = StandardSelection.InverseProcessValue(mumax);
     xArray = StandardSelection.InverseProcessArray(xArray);
     if (xArray.Length == 0)
     {
         pub_function.resolution_getReso((mumin + mumax) / 2, reso, out z);
         outputParameters.μ0_final = 0;
         outputParameters.σ0_final = 0;
     }
     else
     {
         int sum = 0;
         for (int j = 0; j < xArray.Length; j++)
         {
             sum += vArray[j];
         }
         if (sum == 0 || sum == xArray.Length)
         {
             z = xArray[xArray.Length - 1];
             double[] sumi = { (mumin + z) / 2, z - 2 * sigmaguess, 2 * z - xArray[0] };
             double[] sum0 = { (mumax + z) / 2, z + 2 * sigmaguess, 2 * z - xArray[0] };
             if (sum == xArray.Length)
             {
                 pub_function.resolution_getReso(pub_function.MIN_getMin(sumi), reso, out z);
             }
             else
             {
                 pub_function.resolution_getReso(pub_function.MAX_getMax(sum0), reso, out z);
             }
             outputParameters.μ0_final = 0;
             outputParameters.σ0_final = 0;
         }
         else
         {
             double[] xArray_change = new double[xArray.Length];
             int[]    vArray_change = new int[xArray.Length];
             int      ij;
             for (ij = 0; ij < xArray.Length; ij++)
             {
                 xArray_change[ij] = xArray[ij];
                 vArray_change[ij] = vArray[ij];
             }
             outputParameters.Maxf = pub_function.MAX_getMax(pub_function.getF(xArray_change, vArray_change));
             outputParameters.Mins = pub_function.MIN_getMin(pub_function.S_getS(xArray_change, vArray_change));
             double[] FZ   = pub_function.getF(xArray_change, vArray_change);   //失败的刺激量
             double[] SZ   = pub_function.S_getS(xArray_change, vArray_change); //成功的刺激量
             double   Diff = outputParameters.Mins - outputParameters.Maxf;
             if (DopDistributionSelection.IsValueSize(Diff, sigmaguess))
             {
                 pub_function.resolution_getReso((outputParameters.Mins + outputParameters.Maxf) / 2, reso, out z);
                 outputParameters.μ0_final = z;
                 outputParameters.σ0_final = 0;
             }
             else
             {
                 if (outputParameters.Mins > outputParameters.Maxf)
                 {
                     outputParameters.μ0_final = (outputParameters.Mins + outputParameters.Maxf) / 2;
                     outputParameters.σ0_final = 0;
                     pub_function.resolution_getReso(DopDistributionSelection.Fisher_getZ_new(xArray_change, vArray_change, outputParameters.μ0_final, sigmaguess), reso, out z);
                     outputParameters.sigmaguess = 0.8 * sigmaguess;
                 }
                 else
                 {
                     outputParameters            = DistributionSelection.MLS_getMLS(xArray_change, vArray_change);
                     outputParameters.sigmaguess = sigmaguess;
                     pub_function.resolution_getReso(DopDistributionSelection.Fisher_getZ_new(xArray_change, vArray_change, outputParameters.μ0_final, outputParameters.σ0_final), reso, out z);
                 }
             }
         }
     }
     DistributionSelection.Interval_estimation(xArray, vArray, ref outputParameters);
 }