コード例 #1
0
        public void TestCumulativeDistribution()
        {
            // Standard normal.
            var dist = new BoxMullerGaussianDistribution(0.0, 1.0);

            GaussianDistributionTestUtils.TestDistribution(dist, 0.0, 1.0);

            // Non-zero mean tests.
            dist = new BoxMullerGaussianDistribution(10.0, 1.0);
            GaussianDistributionTestUtils.TestDistribution(dist, 10.0, 1.0);

            dist = new BoxMullerGaussianDistribution(-100.0, 1.0);
            GaussianDistributionTestUtils.TestDistribution(dist, -100.0, 1.0);

            // Non-1.0 standard deviations
            dist = new BoxMullerGaussianDistribution(0.0, 0.2);
            GaussianDistributionTestUtils.TestDistribution(dist, 0.0, 0.2);

            dist = new BoxMullerGaussianDistribution(0.0, 5.0);
            GaussianDistributionTestUtils.TestDistribution(dist, 0.0, 5.0);

            // Non-zero mean and non-1.0 standard deviation.
            dist = new BoxMullerGaussianDistribution(10.0, 2.0);
            GaussianDistributionTestUtils.TestDistribution(dist, 10.0, 2.0);

            dist = new BoxMullerGaussianDistribution(-10.0, 3.0);
            GaussianDistributionTestUtils.TestDistribution(dist, -10.0, 3.0);
        }
コード例 #2
0
        public void TestMean()
        {
            int sampleCount = 10000000;
            var dist        = new BoxMullerGaussianDistribution();

            double[] sampleArr = new double[sampleCount];

            for (int i = 0; i < sampleCount; i++)
            {
                sampleArr[i] = dist.Sample();
            }

            double sum  = Math.Abs(sampleArr.Sum());
            double mean = sum / sampleCount;

            Assert.IsTrue(Math.Abs(mean) < 0.001);
        }
コード例 #3
0
        public void TestStandardDeviation()
        {
            int sampleCount = 10000000;
            var dist        = new BoxMullerGaussianDistribution();

            double sqrSum = 0.0;

            for (int i = 0; i < sampleCount; i++)
            {
                double x = dist.Sample();
                sqrSum += x * x;
            }

            double var    = sqrSum / sampleCount;
            double stdDev = Math.Sqrt(var);

            Assert.IsTrue(Math.Abs(stdDev - 1.0) < 0.001);
        }
コード例 #4
0
        public void TestSimpleStats()
        {
            var dist = new BoxMullerGaussianDistribution();

            GaussianDistributionTestUtils.TestSimpleStats(dist);
        }