示例#1
0
文件: Chi.cs 项目: ewin66/ComSim
        /// <summary>
        /// Sets properties and attributes of class in accordance with XML definition.
        /// </summary>
        /// <param name="Definition">XML definition</param>
        public override Task FromXml(XmlElement Definition)
        {
            this.t0 = XML.Attribute(Definition, "t0", 0.0);
            this.k  = XML.Attribute(Definition, "k", 0.0);

            this.kHalf = this.k / 2;
            this.c     = 1.0 / StatMath.Γ(this.kHalf);

            return(base.FromXml(Definition));
        }
示例#2
0
        public void Test_01_Γ()
        {
            // https://dlmf.nist.gov/5.4

            Assert.IsTrue(Math.Abs(StatMath.Γ(1) - 1) < 1e-10);
            Assert.IsTrue(Math.Abs(StatMath.Γ(1.0 / 2) - 1.77245385090551602729) < 1e-10);
            Assert.IsTrue(Math.Abs(StatMath.Γ(1.0 / 3) - 2.67893853470774763365) < 1e-10);
            Assert.IsTrue(Math.Abs(StatMath.Γ(2.0 / 3) - 1.35411793942640041694) < 1e-10);
            Assert.IsTrue(Math.Abs(StatMath.Γ(1.0 / 4) - 3.62560990822190831193) < 1e-10);
            Assert.IsTrue(Math.Abs(StatMath.Γ(3.0 / 4) - 1.22541670246517764512) < 1e-10);
        }
示例#3
0
文件: Chi.cs 项目: ewin66/ComSim
 /// <summary>
 /// The Cumulative Distribution Function (CDF) of the distribution, excluding intensity (<see cref="Distribution.N"/>).
 /// </summary>
 /// <param name="t">Time</param>
 /// <param name="NrCycles">Number of time cycles completed.</param>
 /// <returns>CDU(t)</returns>
 protected override double GetCumulativeProbability(double t, int NrCycles)
 {
     t -= this.t0;
     if (t < 0)
     {
         return(0);
     }
     else
     {
         return(StatMath.γ(this.kHalf, t * t / 2) * this.c);
     }
 }
示例#4
0
 /// <summary>
 /// The Cumulative Distribution Function (CDF) of the distribution, excluding intensity (<see cref="Distribution.N"/>).
 /// </summary>
 /// <param name="t">Time</param>
 /// <param name="NrCycles">Number of time cycles completed.</param>
 /// <returns>CDU(t)</returns>
 protected override double GetCumulativeProbability(double t, int NrCycles)
 {
     t -= this.t0;
     if (t < 0)
     {
         return(0);
     }
     else
     {
         return(StatMath.γ(this.α, this.β * t) * this.invGammaAlpha);
     }
 }
示例#5
0
文件: Normal.cs 项目: ewin66/ComSim
        /// <summary>
        /// The Cumulative Distribution Function (CDF) of the distribution, excluding intensity (<see cref="Distribution.N"/>).
        /// </summary>
        /// <param name="t">Time</param>
        /// <param name="NrCycles">Number of time cycles completed.</param>
        /// <returns>CDU(t)</returns>
        protected override double GetCumulativeProbability(double t, int NrCycles)
        {
            if (Math.Abs(t - this.μ) > Math.Abs(this.TimeCycleUnits + t - this.μ))
            {
                t += this.TimeCycleUnits;
                NrCycles--;
            }

            double x   = (t - this.μ) / this.σSqrt2;
            double erf = x < -5 ? -1 : x > 5 ? 1 : StatMath.Erf(x);

            return(((1 + erf) / 2) + NrCycles);
        }
示例#6
0
        /// <summary>
        /// Sets properties and attributes of class in accordance with XML definition.
        /// </summary>
        /// <param name="Definition">XML definition</param>
        public override Task FromXml(XmlElement Definition)
        {
            this.t0 = XML.Attribute(Definition, "t0", 0.0);

            if (Definition.HasAttribute("k") && Definition.HasAttribute("θ"))
            {
                this.k = XML.Attribute(Definition, "k", 0.0);
                this.θ = XML.Attribute(Definition, "θ", 0.0);

                if (Definition.HasAttribute("α") || Definition.HasAttribute("β") || Definition.HasAttribute("μ"))
                {
                    throw new Exception("Too many parameters in Gamma distribution definition.");
                }

                this.α = this.k;
                this.β = 1 / this.θ;
                this.μ = this.k * this.θ;
            }
            else if (Definition.HasAttribute("α") && Definition.HasAttribute("β"))
            {
                this.α = XML.Attribute(Definition, "α", 0.0);
                this.β = XML.Attribute(Definition, "β", 0.0);

                if (Definition.HasAttribute("k") || Definition.HasAttribute("θ") || Definition.HasAttribute("μ"))
                {
                    throw new Exception("Too many parameters in Gamma distribution definition.");
                }

                this.k = this.α;
                this.θ = 1 / this.β;
                this.μ = this.α / this.β;
            }
            else if (Definition.HasAttribute("k") && Definition.HasAttribute("μ"))
            {
                this.k = XML.Attribute(Definition, "k", 0.0);
                this.μ = XML.Attribute(Definition, "μ", 0.0);

                if (Definition.HasAttribute("α") || Definition.HasAttribute("β") || Definition.HasAttribute("θ"))
                {
                    throw new Exception("Too many parameters in Gamma distribution definition.");
                }

                this.α = this.k;
                this.β = this.α / this.μ;
                this.θ = this.μ / this.k;
            }

            this.invGammaAlpha = 1.0 / StatMath.Γ(this.α);

            return(base.FromXml(Definition));
        }
示例#7
0
 /// <summary>
 /// Evaluates the function on two scalar arguments.
 /// </summary>
 /// <param name="Argument1">Function argument 1.</param>
 /// <param name="Argument2">Function argument 2.</param>
 /// <param name="Variables">Variables collection.</param>
 /// <returns>Function result.</returns>
 public override IElement EvaluateScalar(Complex Argument1, Complex Argument2, Variables Variables)
 {
     return(new ComplexNumber(StatMath.Γ(Argument1, Argument2)));
 }
示例#8
0
 /// <summary>
 /// Evaluates the function on two scalar arguments.
 /// </summary>
 /// <param name="Argument1">Function argument 1.</param>
 /// <param name="Argument2">Function argument 2.</param>
 /// <param name="Variables">Variables collection.</param>
 /// <returns>Function result.</returns>
 public override IElement EvaluateScalar(double Argument1, double Argument2, Variables Variables)
 {
     return(new DoubleNumber(StatMath.Γ(Argument1, Argument2)));
 }
示例#9
0
 /// <summary>
 /// Evaluates the function on a scalar argument.
 /// </summary>
 /// <param name="Argument">Function argument.</param>
 /// <param name="Variables">Variables collection.</param>
 /// <returns>Function result.</returns>
 public override IElement EvaluateScalar(double Argument, Variables Variables)
 {
     return(new DoubleNumber(StatMath.Erf(Argument)));
 }