public OutputParameters GetResult(double[] xArray, int[] vArray)
            {
                for (int i = 0; i < xArray.Length; i++)
                {
                    xArray[i] = StandardSelection.InverseProcessValue(xArray[i]);
                }
                var outputParameters = DistributionSelection.MLS_getMLS(xArray, vArray);

                DistributionSelection.Interval_estimation(xArray, vArray, ref outputParameters);
                outputParameters.μ0_final = StandardSelection.GetAvgValue(outputParameters.μ0_final);
                return(outputParameters);
            }
Esempio n. 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);
 }