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.function;
23
24 import org.hipparchus.analysis.UnivariateFunction;
25 import org.hipparchus.analysis.differentiation.DSFactory;
26 import org.hipparchus.analysis.differentiation.DerivativeStructure;
27 import org.hipparchus.analysis.differentiation.UnivariateDifferentiableFunction;
28 import org.hipparchus.util.FastMath;
29 import org.junit.Assert;
30 import org.junit.Test;
31
32 public class SqrtTest {
33 @Test
34 public void testComparison() {
35 final Sqrt s = new Sqrt();
36 final UnivariateFunction f = new UnivariateFunction() {
37 @Override
38 public double value(double x) {
39 return FastMath.sqrt(x);
40 }
41 };
42
43 for (double x = 1e-30; x < 1e10; x *= 2) {
44 final double fX = f.value(x);
45 final double sX = s.value(x);
46 Assert.assertEquals("x=" + x, fX, sX, 0);
47 }
48 }
49
50 @Test
51 public void testDerivativeComparison() {
52 final UnivariateDifferentiableFunction sPrime = new Sqrt();
53 final UnivariateFunction f = new UnivariateFunction() {
54 @Override
55 public double value(double x) {
56 return 1 / (2 * FastMath.sqrt(x));
57 }
58 };
59
60 DSFactory factory = new DSFactory(1, 1);
61 for (double x = 1e-30; x < 1e10; x *= 2) {
62 final double fX = f.value(x);
63 final double sX = sPrime.value(factory.variable(0, x)).getPartialDerivative(1);
64 Assert.assertEquals("x=" + x, fX, sX, FastMath.ulp(fX));
65 }
66 }
67
68 @Test
69 public void testDerivativesHighOrder() {
70 DerivativeStructure s = new Sqrt().value(new DSFactory(1, 5).variable(0, 1.2));
71 Assert.assertEquals(1.0954451150103322269, s.getPartialDerivative(0), 1.0e-16);
72 Assert.assertEquals(0.45643546458763842789, s.getPartialDerivative(1), 1.0e-16);
73 Assert.assertEquals(-0.1901814435781826783, s.getPartialDerivative(2), 1.0e-16);
74 Assert.assertEquals(0.23772680447272834785, s.getPartialDerivative(3), 1.0e-16);
75 Assert.assertEquals(-0.49526417598485072465, s.getPartialDerivative(4), 5.0e-16);
76 Assert.assertEquals(1.4445205132891479465, s.getPartialDerivative(5), 7.0e-16);
77 }
78
79 }