Exemple #1
0
        public static double QExp(double p, double scale = 1.0, bool lowerTail = true, bool logP = false)
        {
            if (double.IsNaN(p) || double.IsNaN(scale))
            {
                return(p + scale);
            }
            if (scale < 0)
            {
                return(double.NaN);           //ML_ERR_return_NAN;
            }
            if ((logP && p > 0) || (!logP && (p < 0 || p > 1)))
            //ML_ERR_return_NAN
            {
                return(RVaria.R_NaN);
            }
            if (p == (lowerTail ? (logP ? double.NegativeInfinity : 0.0) : (logP ? 0.0 : 1.0)))
            {
                return(0);
            }

            return(-scale * (lowerTail ? (logP ? ((p) > -RVaria.M_LN2 ? Math.Log(-RVaria.expm1(p)) : RVaria.log1p(-Math.Exp(p))) : RVaria.log1p(-p)) : (logP ? (p) : Math.Log(p))));
        }
Exemple #2
0
        public static double[] PExp(double[] xA, double scale = 1.0, bool lowerTail = true, bool logP = false)
        {
            double[] rep = new double[xA.Length];

            for (int i = 0; i < xA.Length; i++)
            {
                double x = xA[i];
                if (double.IsNaN(x) || double.IsNaN(scale))
                {
                    rep[i] = x + scale;
                }

                if (scale < 0)
                {
                    rep[i] = double.NaN;
                }

                if (x <= 0.0)
                {
                    rep[i] = (lowerTail ? (logP ? double.NegativeInfinity : 0.0) : (logP ? 0.0 : 1.0));
                }
                /* same as weibull( shape = 1): */
                x = -(x / scale);
                if (lowerTail)
                {
                    rep[i] = (logP
                    ? (x > -RVaria.M_LN2 ? Math.Log(-RVaria.expm1(x)) : RVaria.log1p(-Math.Exp(x)))
                    : -RVaria.expm1(x));
                }
                /* else:  !lower_tail */
                else
                {
                    rep[i] = (logP ? (x) : Math.Exp(x));
                }
            }

            return(rep);
        }