/*
* (c) Copyright Christian P. Fries, Germany. All rights reserved. Contact: email@christianfries.com.
*
* Created on 07.09.2015
*/
package net.finmath.integration;
import org.junit.Assert;
import org.junit.Test;
import net.finmath.interpolation.RationalFunctionInterpolation;
import net.finmath.interpolation.RationalFunctionInterpolation.ExtrapolationMethod;
import net.finmath.interpolation.RationalFunctionInterpolation.InterpolationMethod;
/**
* @author Christian Fries
*
*/
public class TrapezoidalRealIntegratorTest {
@Test
public void test() {
double[] points = { 0.0, 0.1, 0.5, 1.0, 2.0, 5.0, 10.0 };
double[] values = { 1.0, 2.1, 3.5, 1.0, 4.0, 1.0, 7.0 };
RationalFunctionInterpolation interpolation = new RationalFunctionInterpolation(points, values, InterpolationMethod.LINEAR, ExtrapolationMethod.CONSTANT);
double[] evaluationPoints = points;
AbstractRealIntegral trapezoidalRealIntegrator = new TrapezoidalRealIntegrator(0.75, 3.5, evaluationPoints);
AbstractRealIntegral simpsonRealIntegrator = new SimpsonRealIntegrator(0.75, 3.5, 2000);
/*
* Trapezoidal integration of the piece-wise linear function is exact, if we use points as integration points.
* Simpson's rule is using an equi-distant discretization and is not exact.
*/
double valueTrapezoidal = trapezoidalRealIntegrator.integrate(interpolation);
double valueSimpsons = simpsonRealIntegrator.integrate(interpolation);
Assert.assertEquals("Difference of trapezoidal and Simpson's rule", 0.0, valueSimpsons-valueTrapezoidal, 0.000001);
}
}