1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  package org.apache.commons.math4.legacy.analysis.integration.gauss;
18  
19  import org.apache.commons.math4.legacy.analysis.UnivariateFunction;
20  import org.apache.commons.math4.core.jdkmath.JdkMath;
21  import org.junit.Test;
22  import org.junit.Assert;
23  
24  
25  
26  
27  
28  public class HermiteTest {
29      private static final GaussIntegratorFactory factory = new GaussIntegratorFactory();
30  
31      @Test
32      public void testNormalDistribution() {
33          final double oneOverSqrtPi = 1 / JdkMath.sqrt(Math.PI);
34  
35          
36          
37          final int numPoints = 1;
38  
39          
40          
41          
42          
43          
44          
45          final UnivariateFunction f = new UnivariateFunction() {
46                  @Override
47                  public double value(double y) {
48                      return oneOverSqrtPi; 
49                  }
50              };
51  
52          final GaussIntegrator integrator = factory.hermite(numPoints);
53          final double result = integrator.integrate(f);
54          final double expected = 1;
55          Assert.assertEquals(expected, result, Math.ulp(expected));
56      }
57  
58      @Test
59      public void testNormalMean() {
60          final double sqrtTwo = JdkMath.sqrt(2);
61          final double oneOverSqrtPi = 1 / JdkMath.sqrt(Math.PI);
62  
63          final double mu = 12345.6789;
64          final double sigma = 987.654321;
65          final int numPoints = 5;
66  
67          
68          
69          
70          
71          
72          
73          final UnivariateFunction f = new UnivariateFunction() {
74                  @Override
75                  public double value(double y) {
76                      return oneOverSqrtPi * (sqrtTwo * sigma * y + mu);
77                  }
78              };
79  
80          final GaussIntegrator integrator = factory.hermite(numPoints);
81          final double result = integrator.integrate(f);
82          final double expected = mu;
83          Assert.assertEquals(expected, result, Math.ulp(expected));
84      }
85  
86      @Test
87      public void testNormalVariance() {
88          final double twoOverSqrtPi = 2 / JdkMath.sqrt(Math.PI);
89  
90          final double sigma = 987.654321;
91          final double sigma2 = sigma * sigma;
92          final int numPoints = 5;
93  
94          
95          
96          
97          
98          
99          
100         final UnivariateFunction f = new UnivariateFunction() {
101                 @Override
102                 public double value(double y) {
103                     return twoOverSqrtPi * sigma2 * y * y;
104                 }
105             };
106 
107         final GaussIntegrator integrator = factory.hermite(numPoints);
108         final double result = integrator.integrate(f);
109         final double expected = sigma2;
110         Assert.assertEquals(expected, result, 10 * Math.ulp(expected));
111     }
112 }