From 592a82b42373a57c5c9aa58de1f5c01c2ce7dafe Mon Sep 17 00:00:00 2001 From: Jeff Moser Date: Mon, 19 Apr 2010 07:39:24 -0400 Subject: [PATCH] Updated GaussianDistributionTests.cs based off feedback from nsp --- .../Numerics/GaussianDistributionTests.cs | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/UnitTests/Numerics/GaussianDistributionTests.cs b/UnitTests/Numerics/GaussianDistributionTests.cs index e0b0447..c1e3b12 100644 --- a/UnitTests/Numerics/GaussianDistributionTests.cs +++ b/UnitTests/Numerics/GaussianDistributionTests.cs @@ -9,6 +9,22 @@ namespace UnitTests.Numerics { private const double ErrorTolerance = 0.000001; + [Test] + public void CumulativeToTests() + { + // Verified with WolframAlpha + // (e.g. http://www.wolframalpha.com/input/?i=CDF%5BNormalDistribution%5B0%2C1%5D%2C+0.5%5D ) + Assert.AreEqual(0.691462, GaussianDistribution.CumulativeTo(0.5), ErrorTolerance); + } + + [Test] + public void AtTests() + { + // Verified with WolframAlpha + // (e.g. http://www.wolframalpha.com/input/?i=PDF%5BNormalDistribution%5B0%2C1%5D%2C+0.5%5D ) + Assert.AreEqual(0.352065, GaussianDistribution.At(0.5), ErrorTolerance); + } + [Test] public void MultiplicationTests() { @@ -56,13 +72,39 @@ namespace UnitTests.Numerics [Test] public void LogProductNormalizationTests() { - var m4s5 = new GaussianDistribution(4, 5); - var m6s7 = new GaussianDistribution(6, 7); + // Verified with Ralf Herbrich's F# implementation + var standardNormal = new GaussianDistribution(0, 1); + var lpn = GaussianDistribution.LogProductNormalization(standardNormal, standardNormal); + Assert.AreEqual(-1.2655121234846454, lpn, ErrorTolerance); - var product2 = m4s5 * m6s7; - var normConstant = 1.0 / (Math.Sqrt(2 * Math.PI) * product2.StandardDeviation); - var lpn = GaussianDistribution.LogProductNormalization(m4s5, m6s7); + var m1s2 = new GaussianDistribution(1, 2); + var m3s4 = new GaussianDistribution(3, 4); + var lpn2 = GaussianDistribution.LogProductNormalization(m1s2, m3s4); + Assert.AreEqual(-2.5168046699816684, lpn2, ErrorTolerance); + } + [Test] + public void LogRatioNormalizationTests() + { + // Verified with Ralf Herbrich's F# implementation + var m1s2 = new GaussianDistribution(1, 2); + var m3s4 = new GaussianDistribution(3, 4); + var lrn = GaussianDistribution.LogRatioNormalization(m1s2, m3s4); + Assert.AreEqual(2.6157405972171204, lrn, ErrorTolerance); + } + + [Test] + public void AbsoluteDifferenceTests() + { + // Verified with Ralf Herbrich's F# implementation + var standardNormal = new GaussianDistribution(0, 1); + var absDiff = GaussianDistribution.AbsoluteDifference(standardNormal, standardNormal); + Assert.AreEqual(0.0, absDiff, ErrorTolerance); + + var m1s2 = new GaussianDistribution(1, 2); + var m3s4 = new GaussianDistribution(3, 4); + var absDiff2 = GaussianDistribution.AbsoluteDifference(m1s2, m3s4); + Assert.AreEqual(0.4330127018922193, absDiff2, ErrorTolerance); } } } \ No newline at end of file