1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.utils;
18
19 import org.hipparchus.util.FastMath;
20 import org.hipparchus.util.Precision;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.Test;
23 import org.orekit.time.AbsoluteDate;
24
25 public class DifferentiationTest {
26
27 @Test
28 public void testScaleOne() {
29
30 doTestScale(1.0, FastMath.pow(1.0, -3), Precision.SAFE_MIN);
31 }
32
33 @Test
34 public void testScalePowerOfTwoStepRepresentableNumber() {
35
36 doTestScale(FastMath.scalb(1.0, -10), FastMath.pow(1.0, -7), Precision.SAFE_MIN);
37 }
38
39 @Test
40 public void testScalePowerOfTwoStepNonRepresentableNumber() {
41
42 doTestScale(FastMath.scalb(1.0, -10), 0.007, 1.7e-12);
43 }
44
45 private void doTestScale(final double scale, final double step, final double tolerance) {
46 ParameterDriver driver = new ParameterDriver("", -100.0, scale,
47 Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
48 ParameterFunction f0 = (d,t) -> 3 * d.getValue(t) * d.getValue(t) - 2 * d.getValue(t);
49 ParameterFunction f1Diff = Differentiation.differentiate(f0, 4, step);
50 ParameterFunction f1Ref = (d,t) -> 6 * d.getValue(t) - 2;
51
52 for (double x = -3.0; x < 3.0; x += 0.125) {
53 driver.setValue(x);
54 Assertions.assertEquals(f1Ref.value(driver, new AbsoluteDate()), f1Diff.value(driver, new AbsoluteDate()), tolerance);
55 }
56
57 }
58
59 }
60