1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.hipparchus.analysis.integration.gauss;
23
24 import org.hipparchus.analysis.CalculusFieldUnivariateFunction;
25 import org.hipparchus.util.Binary64;
26 import org.hipparchus.util.Binary64Field;
27 import org.hipparchus.util.FastMath;
28 import org.junit.jupiter.api.Test;
29
30 import static org.junit.jupiter.api.Assertions.assertEquals;
31
32
33
34
35
36 class FieldHermiteTest {
37 private static final FieldGaussIntegratorFactory<Binary64> factory = new FieldGaussIntegratorFactory<>(Binary64Field.getInstance());
38
39 @Test
40 void testNormalDistribution() {
41 final Binary64 oneOverSqrtPi = new Binary64(1 / FastMath.sqrt(Math.PI));
42
43
44
45 final int numPoints = 1;
46
47
48
49
50
51
52
53 final CalculusFieldUnivariateFunction<Binary64> f = y -> oneOverSqrtPi;
54
55 final FieldGaussIntegrator<Binary64> integrator = factory.hermite(numPoints);
56 final double result = integrator.integrate(f).getReal();
57 final double expected = 1;
58 assertEquals(expected, result, FastMath.ulp(expected));
59 }
60
61 @Test
62 void testNormalMean() {
63 final Binary64 sqrtTwo = new Binary64(FastMath.sqrt(2));
64 final Binary64 oneOverSqrtPi = new Binary64(1 / FastMath.sqrt(Math.PI));
65
66 final Binary64 mu = new Binary64(12345.6789);
67 final Binary64 sigma = new Binary64(987.654321);
68 final int numPoints = 6;
69
70
71
72
73
74
75
76 final CalculusFieldUnivariateFunction<Binary64> f =
77 y -> oneOverSqrtPi.multiply(sqrtTwo.multiply(sigma).multiply(y).add(mu));
78
79 final FieldGaussIntegrator<Binary64> integrator = factory.hermite(numPoints);
80 final double result = integrator.integrate(f).getReal();
81 final double expected = mu.getReal();
82 assertEquals(expected, result, 5 * FastMath.ulp(expected));
83 }
84
85 @Test
86 void testNormalVariance() {
87 final Binary64 twoOverSqrtPi = new Binary64(2 / FastMath.sqrt(Math.PI));
88
89 final Binary64 sigma = new Binary64(987.654321);
90 final Binary64 sigma2 = sigma.multiply(sigma);
91 final int numPoints = 5;
92
93
94
95
96
97
98
99 final CalculusFieldUnivariateFunction<Binary64> f =
100 y -> twoOverSqrtPi.multiply(sigma2).multiply(y).multiply(y);
101
102 final FieldGaussIntegrator<Binary64> integrator = factory.hermite(numPoints);
103 final double result = integrator.integrate(f).getReal();
104 final double expected = sigma2.getReal();
105 assertEquals(expected, result, 10 * FastMath.ulp(expected));
106 }
107 }