public void MultipleTests_Examples() { // Let's say we would like to compute the definite // integral of the function f(x) = cos(x) from -1 to 1 Func <double, double> f = (x) => Math.Cos(x); double a = -1; double b = +1; double trapez = TrapezoidalRule.Integrate(f, a, b, steps: 1000); // 1.6829414 double romberg = RombergMethod.Integrate(f, a, b); // 1.6829419 double nagk = NonAdaptiveGaussKronrod.Integrate(f, a, b); // 1.6829419 // Now let's say we would like to compute an improper integral // from -infinite to +infinite, such as the integral of a Gaussian // PDF (which should evaluate to 1): Func <double, double> g = (x) => (1 / Math.Sqrt(2 * Math.PI)) * Math.Exp(-(x * x) / 2); double iagk = InfiniteAdaptiveGaussKronrod.Integrate(g, Double.NegativeInfinity, Double.PositiveInfinity); // Output should be 0.99999... Assert.AreEqual(1.6829414086350976, trapez); // 1.6829414086350976 Assert.AreEqual(1.682941969615797, romberg); // 1.682941969615797 Assert.AreEqual(1.6829419595739716, nagk); // 1.6829419595739716 Assert.AreEqual(0.99999999999999978, iagk); // 0.99999999999999978 }
public void InfiniteGaussKronrodTest() { for (int i = -10; i < 10; i++) { Func <double, double> pdf = (x) => Normal.Derivative(x - i); Func <double, double> E = (x) => x *pdf(x); UFunction UE = (x) => x *pdf(x); double expected = Quadpack.Integrate(UE, Double.NegativeInfinity, Double.PositiveInfinity); double actual = InfiniteAdaptiveGaussKronrod.Integrate(E, Double.NegativeInfinity, Double.PositiveInfinity); Assert.AreEqual(expected, actual, 1e-3); Assert.AreEqual(i, actual, 1e-3); } }
public void InfiniteGaussKronrodTest() { NormalDistribution norm; for (int i = -10; i < 10; i++) { norm = new NormalDistribution(i, 1); Func <double, double> E = (x) => x *norm.ProbabilityDensityFunction(x); UFunction UE = (x) => x *norm.ProbabilityDensityFunction(x); double expected = Quadpack.Integrate(UE, Double.NegativeInfinity, Double.PositiveInfinity); double actual = InfiniteAdaptiveGaussKronrod.Integrate(E, Double.NegativeInfinity, Double.PositiveInfinity); Assert.AreEqual(expected, actual, 1e-3); Assert.AreEqual(norm.Mean, actual, 1e-3); } }