コード例 #1
0
        public void ConstructorTest()
        {
            RayleighDistribution n = new RayleighDistribution(0.807602);

            Assert.AreEqual(1.0121790039242726, n.Mean);
            Assert.AreEqual(0.27993564482286737, n.Variance);
        }
コード例 #2
0
ファイル: Model.cs プロジェクト: Leowisd/landisProFire2Core
        //End of ui.cs file Contents

        //-------------------------------------------------------------------------

        //Begin of Random.cs file contents
        /// <summary>
        /// Initializes the random-number generator with a specific seed.
        /// </summary>
        public void Initialize(uint seed)
        {
            RandomNumberGenerator = new MT19937Generator(seed);
            betaDist              = new BetaDistribution(RandomNumberGenerator);
            betaPrimeDist         = new BetaPrimeDistribution(RandomNumberGenerator);
            cauchyDist            = new CauchyDistribution(RandomNumberGenerator);
            chiDist               = new ChiDistribution(RandomNumberGenerator);
            chiSquareDist         = new ChiSquareDistribution(RandomNumberGenerator);
            continuousUniformDist = new ContinuousUniformDistribution(RandomNumberGenerator);
            erlangDist            = new ErlangDistribution(RandomNumberGenerator);
            exponentialDist       = new ExponentialDistribution(RandomNumberGenerator);
            fisherSnedecorDist    = new FisherSnedecorDistribution(RandomNumberGenerator);
            fisherTippettDist     = new FisherTippettDistribution(RandomNumberGenerator);
            gammaDist             = new GammaDistribution(RandomNumberGenerator);
            laplaceDist           = new LaplaceDistribution(RandomNumberGenerator);
            lognormalDist         = new LognormalDistribution(RandomNumberGenerator);
            normalDist            = new NormalDistribution(RandomNumberGenerator);
            paretoDist            = new ParetoDistribution(RandomNumberGenerator);
            powerDist             = new PowerDistribution(RandomNumberGenerator);
            rayleighDist          = new RayleighDistribution(RandomNumberGenerator);
            studentsTDist         = new StudentsTDistribution(RandomNumberGenerator);
            triangularDist        = new TriangularDistribution(RandomNumberGenerator);
            weibullDist           = new WeibullDistribution(RandomNumberGenerator);
            poissonDist           = new PoissonDistribution(RandomNumberGenerator);

            // generator.randomGenerator = new MT19937Generator(seed);
        }
コード例 #3
0
        public void ConstructorTest2()
        {
            var rayleigh = new RayleighDistribution(sigma: 0.42);

            double mean   = rayleigh.Mean;                                    // 0.52639193767251
            double median = rayleigh.Median;                                  // 0.49451220943852386
            double var    = rayleigh.Variance;                                // 0.075711527953380237

            double cdf  = rayleigh.DistributionFunction(x: 1.4);              // 0.99613407986052716
            double pdf  = rayleigh.ProbabilityDensityFunction(x: 1.4);        // 0.030681905868831811
            double lpdf = rayleigh.LogProbabilityDensityFunction(x: 1.4);     // -3.4840821835248961

            double ccdf = rayleigh.ComplementaryDistributionFunction(x: 1.4); // 0.0038659201394728449
            double icdf = rayleigh.InverseDistributionFunction(p: cdf);       // 1.4000000080222026

            double hf  = rayleigh.HazardFunction(x: 1.4);                     // 7.9365079365078612
            double chf = rayleigh.CumulativeHazardFunction(x: 1.4);           // 5.5555555555555456

            string str = rayleigh.ToString(CultureInfo.InvariantCulture);     // Rayleigh(x; σ = 0.42)

            Assert.AreEqual(0.52639193767251, mean);
            Assert.AreEqual(0.49451220943852386, median, 1e-8);
            Assert.AreEqual(0.075711527953380237, var);
            Assert.AreEqual(5.5555555555555456, chf);
            Assert.AreEqual(0.99613407986052716, cdf);
            Assert.AreEqual(0.030681905868831811, pdf);
            Assert.AreEqual(-3.4840821835248961, lpdf);
            Assert.AreEqual(7.9365079365078612, hf);
            Assert.AreEqual(0.0038659201394728449, ccdf);
            Assert.AreEqual(1.40000000, icdf, 1e-8);
            Assert.AreEqual("Rayleigh(x; σ = 0.42)", str);
        }
コード例 #4
0
        /// <summary>
        /// Finds the Rayleigh distribution that best fits the given sample.
        /// </summary>
        /// <param name="sample">The sample to fit, which must have at least 2 values.</param>
        /// <returns>The fit result.</returns>
        public static RayleighFitResult FitToRayleigh(this IReadOnlyList <double> sample)
        {
            if (sample == null)
            {
                throw new ArgumentNullException(nameof(sample));
            }
            if (sample.Count < 2)
            {
                throw new InsufficientDataException();
            }

            // It's easy to follow maximum likelihood prescription, because there is only one
            // parameter and the functional form is fairly simple.

            // \ln L = \sum_i p_i = = \sum_i \left[ \ln x_i - 2 \ln \sigma - \frac{1}{2} \frac{x_i^2}{\sigma^2 \right]
            // \frac{\partial \ln L}{\partial \sigma} = \sum_i \left[ \frac{x_i^2}{\sigma^3} - \frac{2}{\sigma} \right]
            // \frac{\partial^2 \ln L}{\partial \sigma^2} = \sum_i \left[ \frac{2}{\sigma^2} - \frac{3 x_i^2}{\sigma^4} \right]

            // Set the first derivative to zero to obtain
            //   \hat{\sigma}^2 = \frac{1}{2n} \sum_i x_i^2
            //   \hat{\sigma} = \sqrt{\frac{1}{2} \left< x^2 \right>}
            // and plug this value into the second derivative to obtain
            //   \frac{\partial^2 \ln L}{\partial \sigma^2} = - \frac{4n}{\sigma^2}
            // at the minimum, so
            //   \delta \sigma = \frac{\sigma}{\sqrt{4n}}

            // Next consider bias. We know from the moments of the distribution that < x^2 > = 2 \sigma^2, so \hat{\sigma}^2 is
            // unbiased. But its square root \hat{\sigma} is not. To get exact distribution of \hat{\sigma},
            //    x_i \sim Rayleigh(\sigma)
            //    ( \frac{x_i}{\sigma} )^2 \sim \chi^2(2)
            //    \sum_i ( \frac{x_i}{\sigma} )^2 \sim \chi^2(2n)
            //    \left[ \sum_i ( \frac{x_i}{\sigma} )^2 \right]^{1/2} \sim \chi(2n)
            // And if z \sim \chi(k) then
            //    E(z) = \sqrt{2} \frac{\Gamma((k + 1)/2)}{\Gamma(k / 2)}
            //    V(z) = k - [ E(z) ]^2
            // Here k = 2n and our estimator \hat{\sigma} = z / sqrt{2n}, so
            //    E(\hat{\sigma}) = \frac{\Gamma(n + 1/2)}{\sqrt{n} \Gamma(n)} \sigma = \frac{(n)_{1/2}}{\sqrt{n}} \sigma
            //    V(\hat{\sigma}) = \left[ 1 - \frac{(n)_{1/2}^2}{n} \right] \sigma^2
            // We can use series expansion to verify that
            //    E(\hat{\sigma}) = \left[ 1 - \frac{1}{8n} + \cdots \right] \sigma
            //    V(\hat{\sigma}) = \left[ \frac{1}{4n} - \frac{1}{32n^2} + \cdots \right] \sigma^2
            // our estimator is asymptotically unbiased and its asymptotic variance agrees with our assessment.

            // We correct for the bias of \hat{\sigma} by multiplying by \frac{\sqrt{n}}{(n)_{1/2}}. We could
            // correct our variance estimate too, but in order to evaluate the correction at high n,
            // we need to do a series expansion, and I regard it as less important that the error estimate
            // be exact.

            int    n  = sample.Count;
            double s  = Math.Sqrt(sample.RawMoment(2) / 2.0) * (Math.Sqrt(n) / AdvancedMath.Pochhammer(n, 1.0 / 2.0));
            double ds = s / Math.Sqrt(4.0 * n);

            RayleighDistribution distribution = new RayleighDistribution(s);
            TestResult           test         = sample.KolmogorovSmirnovTest(distribution);

            return(new RayleighFitResult(new UncertainValue(s, ds), distribution, test));
        }
コード例 #5
0
        public Rayleigh(double sigma)
        {
            if (sigma <= 0)
            {
                throw new ArgumentException("Параметр sigma должен быть больше или равен нуля.");
            }

            rayleighDistribution = new RayleighDistribution(sigma);
        }
コード例 #6
0
        public void GenerateTest()
        {
            Accord.Math.Tools.SetupGenerator(0);

            RayleighDistribution target = new RayleighDistribution(2.5);

            double[] samples = target.Generate(1000000);

            var actual = RayleighDistribution.Estimate(samples);

            Assert.AreEqual(2.5, actual.Scale, 1e-3);
        }
コード例 #7
0
        public void GenerateTest()
        {
            RayleighDistribution target = new RayleighDistribution(2.5);

            double[] samples = target.Generate(1000000);

            var actual = RayleighDistribution.Estimate(samples);

            //actual.Fit(samples);

            Assert.AreEqual(2, actual.Mean, 0.01);
            Assert.AreEqual(5, actual.Variance, 0.01);
        }
コード例 #8
0
        public void ConstructorTest2()
        {
            var rayleigh = new RayleighDistribution(sigma: 0.42);

            double mean   = rayleigh.Mean;                                    // 0.52639193767251
            double median = rayleigh.Median;                                  // 0.49451220943852386
            double var    = rayleigh.Variance;                                // 0.075711527953380237
            double mode   = rayleigh.Mode;                                    // 0.42

            double cdf  = rayleigh.DistributionFunction(x: 1.4);              // 0.99613407986052716
            double pdf  = rayleigh.ProbabilityDensityFunction(x: 1.4);        // 0.030681905868831811
            double lpdf = rayleigh.LogProbabilityDensityFunction(x: 1.4);     // -3.4840821835248961

            double ccdf = rayleigh.ComplementaryDistributionFunction(x: 1.4); // 0.0038659201394728449
            double icdf = rayleigh.InverseDistributionFunction(p: cdf);       // 1.4000000080222026

            double hf  = rayleigh.HazardFunction(x: 1.4);                     // 7.9365079365078612
            double chf = rayleigh.CumulativeHazardFunction(x: 1.4);           // 5.5555555555555456

            string str = rayleigh.ToString(CultureInfo.InvariantCulture);     // Rayleigh(x; σ = 0.42)

            Assert.AreEqual(0.52639193767251, mean);
            Assert.AreEqual(0.42, mode);
            Assert.AreEqual(0.49451220943852386, median, 1e-8);
            Assert.AreEqual(0.075711527953380237, var);
            Assert.AreEqual(5.5555555555555456, chf);
            Assert.AreEqual(0.99613407986052716, cdf);
            Assert.AreEqual(0.030681905868831811, pdf);
            Assert.AreEqual(-3.4840821835248961, lpdf);
            Assert.AreEqual(7.9365079365078612, hf);
            Assert.AreEqual(0.0038659201394728449, ccdf);
            Assert.AreEqual(1.40000000, icdf, 1e-8);
            Assert.AreEqual("Rayleigh(x; σ = 0.42)", str);

            var range1 = rayleigh.GetRange(0.95);

            Assert.AreEqual(0.13452243301684083, range1.Min);
            Assert.AreEqual(1.0280536793538564, range1.Max);

            var range2 = rayleigh.GetRange(0.99);

            Assert.AreEqual(0.059546263061601511, range2.Min);
            Assert.AreEqual(1.2746387879926619, range2.Max);

            var range3 = rayleigh.GetRange(0.01);

            Assert.AreEqual(0.059546263061601677, range3.Min);
            Assert.AreEqual(1.2746387879926619, range3.Max);
        }
コード例 #9
0
        public void GenerateTest2()
        {
            Accord.Math.Tools.SetupGenerator(0);

            RayleighDistribution target = new RayleighDistribution(4.2);

            double[] samples = new double[1000000];
            for (int i = 0; i < samples.Length; i++)
            {
                samples[i] = target.Generate();
            }

            var actual = RayleighDistribution.Estimate(samples);

            Assert.AreEqual(4.2, actual.Scale, 1e-3);
        }
コード例 #10
0
        public void GenerateTest2()
        {
            RayleighDistribution target = new RayleighDistribution(4.2);

            double[] samples = new double[1000000];
            for (int i = 0; i < samples.Length; i++)
            {
                samples[i] = target.Generate();
            }

            var actual = RayleighDistribution.Estimate(samples);

            //actual.Fit(samples);

            Assert.AreEqual(4, actual.Mean, 0.01);
            Assert.AreEqual(2, actual.Variance, 0.01);
        }
コード例 #11
0
        public void CumulativeDistributionTest()
        {
            RayleighDistribution n = new RayleighDistribution(0.807602);

            double[] expected = { 0, 0.535415, 0.953414, 0.998992, 0.999995 };
            double[] actual   = new double[expected.Length];

            for (int i = 0; i < actual.Length; i++)
            {
                actual[i] = n.DistributionFunction(i);
            }

            for (int i = 0; i < actual.Length; i++)
            {
                Assert.AreEqual(expected[i], actual[i], 1e-6);
                Assert.IsFalse(double.IsNaN(actual[i]));
            }
        }
        public void TestContinuousDistributions_Rayleigh()
        {
            TestContinuousDistributionShapeMatchesCumulativeDensity(
                new RayleighDistribution(2.0),
                0.0,
                8.0,
                10,
                100000,
                0.01,
                "RayleighDistribution(2.0)");

            // Test Parameter Estimation
            RayleighDistribution source = new RayleighDistribution(4.0);
            RayleighDistribution target = new RayleighDistribution();

            target.EstimateDistributionParameters(source.EnumerateDoubles(1000));
            Assert.That(target.Sigma, NumericIs.AlmostEqualTo(4.0, 0.1), "Rayleigh Parameter Estimation: Sigma");
        }
コード例 #13
0
        public void ProbabilityDistributionTest()
        {
            RayleighDistribution n = new RayleighDistribution(0.807602);

            double[] expected = { 0, 0.712311, 0.142855, 0.00463779, 0.0000288872 };
            double[] actual   = new double[expected.Length];

            for (int i = 0; i < actual.Length; i++)
            {
                actual[i] = n.ProbabilityDensityFunction(i);
            }

            for (int i = 0; i < actual.Length; i++)
            {
                Assert.AreEqual(expected[i], actual[i], 1e-5);
                Assert.IsFalse(double.IsNaN(actual[i]));
            }
        }
コード例 #14
0
        public void TestRayleighDistribution()
        {
            double[][] para =
            {
                new double[] { 1.5, 0, 1.137791424661398198866648, 0.379263808220466066288883, 3.671620246021224819564040, 0.081591561022693884879201 }
            };
            for (int i = 0; i < para.Length; i++)
            {
                var tester = new ContDistTester(para[i], delegate(double a, double b)
                {
                    var ret = new RayleighDistribution
                    {
                        Sigma = a
                    };

                    return(ret);
                }
                                                );
                tester.Test(1E-14);
            }
        }
コード例 #15
0
        public void RayleighFit()
        {
            RayleighDistribution rayleigh = new RayleighDistribution(3.2);

            Sample parameter = new Sample();
            Sample variance  = new Sample();

            for (int i = 0; i < 128; i++)
            {
                // We pick a quite-small sample, because we have a finite-n unbiased estimator.
                Sample s = SampleTest.CreateSample(rayleigh, 8, i);

                RayleighFitResult r = RayleighDistribution.FitToSample(s);
                parameter.Add(r.Scale.Value);
                variance.Add(r.Parameters.VarianceOf("Scale"));

                Assert.IsTrue(r.GoodnessOfFit.Probability > 0.01);
            }

            Assert.IsTrue(parameter.PopulationMean.ConfidenceInterval(0.99).ClosedContains(rayleigh.Scale));
            Assert.IsTrue(parameter.PopulationVariance.ConfidenceInterval(0.99).ClosedContains(variance.Median));
        }
コード例 #16
0
    /// <summary>
    /// Sets the distribution for operations using the current genrator
    /// </summary>
    /// <param name="distx">Distx.</param>
    public void setDistribution(distributions distx, Dictionary <string, double> args)
    {
        //TODO check arguments to ensure they are making a change to the distribution
        //otherwise throw an exception see laplace as a example of implementing this
        switch (distx)
        {
        case distributions.Bernoili:
            BernoulliDistribution x0 = new BernoulliDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x0.Alpha = args["alpha"];
            }
            else
            {
                throw new System.Exception("for Bernoili distribution you must provide an alpha");
            }
            dist = x0;
            break;

        case distributions.Beta:
            BetaDistribution x1 = new BetaDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x1.Alpha = args["alpha"];
                x1.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception(" for beta distribution you must provide alpha and beta");
            }
            dist = x1;
            break;

        case distributions.BetaPrime:
            BetaPrimeDistribution x2 = new BetaPrimeDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x2.Alpha = args["alpha"];
                x2.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception(" for betaPrime distribution you must provide alpha and beta");
            }
            dist = x2;
            break;

        case distributions.Cauchy:
            CauchyDistribution x3 = new CauchyDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("gamma"))
            {
                x3.Alpha = args["alpha"];
                x3.Gamma = args["gamma"];
            }
            else
            {
                throw new System.Exception("for cauchy dist you must provide alpha and gamma");
            }
            dist = x3;
            break;

        case distributions.Chi:
            ChiDistribution x4 = new ChiDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x4.Alpha = (int)args["alpha"];
            }
            else
            {
                throw new System.Exception("for chi you must provide alpha");
            }
            dist = x4;
            break;

        case distributions.ChiSquared:
            ChiSquareDistribution x5 = new ChiSquareDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x5.Alpha = (int)args["alpha"];
            }
            else
            {
                throw new System.Exception("for chiSquared you must provide alpha");
            }
            dist = x5;
            break;

        case distributions.ContinuousUniform:
            ContinuousUniformDistribution x6 = new ContinuousUniformDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x6.Alpha = args["alpha"];
                x6.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception("for ContinuousUniform you must provide alpha and beta");
            }
            dist = x6;
            break;

        case distributions.DiscreteUniform:
            DiscreteUniformDistribution x7 = new DiscreteUniformDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x7.Alpha = (int)args["alpha"];
                x7.Beta  = (int)args["beta"];
            }
            else
            {
                throw new System.Exception("for discrete uniform distribution you must provide alpha and beta");
            }
            dist = x7;
            break;

        case distributions.Erlang:
            ErlangDistribution x8 = new ErlangDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("lambda"))
            {
                x8.Alpha  = (int)args["alpha"];
                x8.Lambda = (int)args["lambda"];
            }
            else
            {
                throw new System.Exception("for Erlang dist you must provide alpha and lambda");
            }
            dist = x8;
            break;

        case distributions.Exponential:
            ExponentialDistribution x9 = new ExponentialDistribution(gen);
            if (args.ContainsKey("lambda"))
            {
                x9.Lambda = args["lambda"];
            }
            else
            {
                throw new System.Exception("for exponential dist you must provide lambda");
            }
            dist = x9;
            break;

        case distributions.FisherSnedecor:
            FisherSnedecorDistribution x10 = new FisherSnedecorDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x10.Alpha = (int)args["alpha"];
                x10.Beta  = (int)args["beta"];
            }
            else
            {
                throw new System.Exception("for FisherSnedecor you must provide alpha and beta");
            }
            dist = x10;
            break;

        case distributions.FisherTippett:
            FisherTippettDistribution x11 = new FisherTippettDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("mu"))
            {
                x11.Alpha = args["alpha"];
                x11.Mu    = args["mu"];
            }
            else
            {
                throw new System.Exception("for FisherTippets you must provide alpha and mu");
            }
            dist = x11;
            break;

        case distributions.Gamma:
            GammaDistribution x12 = new GammaDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("theta"))
            {
                x12.Alpha = args["alpha"];
                x12.Theta = args["theta"];
            }
            else
            {
                throw new System.Exception("for Gamma dist you must provide alpha and theta");
            }
            dist = x12;
            break;

        case distributions.Geometric:
            GeometricDistribution x13 = new GeometricDistribution(gen);
            if (args.ContainsKey("alpha"))
            {
                x13.Alpha = args["alpha"];
            }
            else
            {
                throw new System.Exception("Geometric distribution requires alpha value");
            }
            dist = x13;
            break;

        case distributions.Binomial:
            BinomialDistribution x14 = new BinomialDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x14.Alpha = args["alpha"];
                x14.Beta  = (int)args["beta"];
            }
            else
            {
                throw new System.Exception("binomial distribution requires alpha and beta");
            }
            dist = x14;
            break;

        case distributions.None:
            break;

        case distributions.Laplace:
            LaplaceDistribution x15 = new LaplaceDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("mu"))
            {
                if (x15.IsValidAlpha(args["alpha"]) && x15.IsValidMu(args["mu"]))
                {
                    x15.Alpha = args["alpha"];
                    x15.Mu    = args["mu"];
                }
                else
                {
                    throw new ArgumentException("alpha must be greater than zero");
                }
            }
            else
            {
                throw new System.Exception("Laplace dist requires alpha and mu");
            }
            dist = x15;
            break;

        case distributions.LogNormal:
            LognormalDistribution x16 = new LognormalDistribution(gen);
            if (args.ContainsKey("mu") && args.ContainsKey("sigma"))
            {
                x16.Mu    = args["mu"];
                x16.Sigma = args["sigma"];
            }
            else
            {
                throw new System.Exception("lognormal distribution requires mu and sigma");
            }
            dist = x16;
            break;

        case distributions.Normal:
            NormalDistribution x17 = new NormalDistribution(gen);
            if (args.ContainsKey("mu") && args.ContainsKey("sigma"))
            {
                x17.Mu    = args["mu"];
                x17.Sigma = args["sigma"];
            }
            else
            {
                throw new System.Exception("normal distribution requires mu and sigma");
            }
            dist = x17;
            break;

        case distributions.Pareto:
            ParetoDistribution x18 = new ParetoDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x18.Alpha = args["alpha"];
                x18.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception("pareto distribution requires alpha and beta");
            }
            dist = x18;
            break;

        case distributions.Poisson:
            PoissonDistribution x19 = new PoissonDistribution(gen);
            if (args.ContainsKey("lambda"))
            {
                x19.Lambda = args["lambda"];
            }
            else
            {
                throw new System.Exception("Poisson distribution requires lambda");
            }
            dist = x19;
            break;

        case distributions.Power:
            PowerDistribution x20 = new PowerDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta"))
            {
                x20.Alpha = args["alpha"];
                x20.Beta  = args["beta"];
            }
            else
            {
                throw new System.Exception("Power dist requires alpha and beta");
            }
            dist = x20;
            break;

        case distributions.RayLeigh:
            RayleighDistribution x21 = new RayleighDistribution(gen);
            if (args.ContainsKey("sigma"))
            {
                x21.Sigma = args["sigma"];
            }
            else
            {
                throw new System.Exception("Rayleigh dist requires sigma");
            }
            dist = x21;
            break;

        case distributions.StudentsT:
            StudentsTDistribution x22 = new StudentsTDistribution(gen);
            if (args.ContainsKey("nu"))
            {
                x22.Nu = (int)args["nu"];
            }
            else
            {
                throw new System.Exception("StudentsT dist requirres nu");
            }
            dist = x22;
            break;

        case distributions.Triangular:
            TriangularDistribution x23 = new TriangularDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("beta") && args.ContainsKey("gamma"))
            {
                x23.Alpha = args["alpha"];
                x23.Beta  = args["beta"];
                x23.Gamma = args["gamma"];
            }
            else
            {
                throw new System.Exception("Triangular distribution requires alpha, beta and gamma");
            }
            dist = x23;
            break;

        case distributions.WeiBull:
            WeibullDistribution x24 = new WeibullDistribution(gen);
            if (args.ContainsKey("alpha") && args.ContainsKey("lambda"))
            {
                x24.Alpha  = args["alpha"];
                x24.Lambda = args["lambda"];
            }
            else
            {
                throw new System.Exception("WeiBull dist requires alpha and lambda");
            }
            dist = x24;
            break;

        default:
            throw new NotImplementedException("the distribution you want has not yet been implemented " +
                                              "you could help everyone out by going and implementing it");
        }
    }
コード例 #17
0
        public void MedianTest()
        {
            RayleighDistribution target = new RayleighDistribution(0.52);

            Assert.AreEqual(target.Median, target.InverseDistributionFunction(0.5));
        }