Ejemplo n.º 1
0
        internal override double[] CentralMoments(int rMax)
        {
            // This is just a recursive formulation of the direct formula.
            double[] C = new double[rMax + 1];
            C[0] = 1.0;
            double t = 1.0; // Keep track of r! s^r

            for (int r = 2; r <= rMax; r += 2)
            {
                t   *= r * (r - 1) * (s * s);
                C[r] = 2.0 * t * AdvancedMath.DirichletEta(r);
            }
            return(C);
        }
Ejemplo n.º 2
0
        /*
         * public override double Variance {
         *  get {
         *      return (Global.HalfPI * (Math.PI / 6.0 - Global.LogTwo * Global.LogTwo) - Global.SqrtHalfPI * Global.LogTwo / 12.0 / Math.Sqrt(n));
         *  }
         * }
         */

        public override double Moment(int r)
        {
            if (r < 0)
            {
                throw new ArgumentOutOfRangeException("r");
            }
            else if (r == 0)
            {
                return(1.0);
            }
            else
            {
                // we can get these expressions just by integrating Q_0' and Q_1' term by term
                double M0 = AdvancedMath.DirichletEta(r) * AdvancedMath.Gamma(r / 2.0 + 1.0) / Math.Pow(2.0, r / 2.0 - 1.0);
                double M1 = -2.0 / 3.0 * AdvancedMath.DirichletEta(r - 1) * AdvancedMath.Gamma((r + 1) / 2.0) / Math.Pow(2.0, (r + 1) / 2.0) * r;
                return(M0 + M1 / Math.Sqrt(n));
            }
        }
Ejemplo n.º 3
0
 /// <inheritdoc />
 public override double CentralMoment(int r)
 {
     if (r < 0)
     {
         throw new ArgumentOutOfRangeException(nameof(r));
     }
     else if (r == 0)
     {
         return(1.0);
     }
     else if (r % 2 != 0)
     {
         return(0.0);
     }
     else
     {
         return(2.0 * AdvancedIntegerMath.Factorial(r) * AdvancedMath.DirichletEta(r) * MoreMath.Pow(s, r));
     }
 }
Ejemplo n.º 4
0
 /// <inheritdoc />
 public override double RawMoment(int r)
 {
     if (r < 0)
     {
         throw new ArgumentOutOfRangeException(nameof(r));
     }
     else if (r == 0)
     {
         return(1.0);
     }
     else if (r == 1)
     {
         return(Mean);
     }
     else
     {
         return(AdvancedMath.Gamma(r / 2.0 + 1.0) * AdvancedMath.DirichletEta(r) / Math.Pow(2.0, r / 2.0 - 1.0));
     }
 }
        // The P-series expression for p(x) can be multiplied by x^r and integrated term-by term to give expressions
        // for <x^r> involving powers of 1/k, i.e. zeta series.

        public override double RawMoment(int r)
        {
            if (r < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(r));
            }
            else if (r == 0)
            {
                return(1.0);
            }
            else
            {
                double q  = Math.Pow(2.0, r / 2.0);
                double d0 = AdvancedMath.DirichletEta(r);
                double d1 = AdvancedMath.DirichletEta(r - 1);
                double g0 = AdvancedMath.Gamma(r / 2.0 + 1.0);

                double m0 = 2.0 / q * g0 * d0;
                double m1 = -Global.SqrtTwo / 3.0 / q * AdvancedMath.Gamma(r / 2.0 + 1.0 / 2.0) * d1 * r;

                // The O(1/N) expression has some canceling infinities for r = 1 so we form the limit by hand for that cases
                double m2;
                if (r == 1)
                {
                    m2 = Global.SqrtHalfPI / 36.0 * (3.0 * Global.LogTwo - 1.0);
                }
                else
                {
                    m2 = -1.0 / 18.0 / q * g0 * (
                        r * (r - 4) * d0 -
                        2 * (r - 1) * AdvancedMath.DirichletEta(r - 2) +
                        2 * (r - 1) * (1.0 - MoreMath.Pow(2, -r)) / (1.0 - MoreMath.Pow(2, 1 - r)) * d0
                        );
                }

                return(m0 + m1 / Math.Sqrt(n) + m2 / n);
            }
        }