1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.hipparchus.optim.nonlinear.vector.constrained;
18
19 import org.hipparchus.linear.MatrixUtils;
20 import org.hipparchus.linear.RealMatrix;
21 import org.hipparchus.linear.RealVector;
22 import org.junit.jupiter.api.Test;
23
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25
26 class TwiceDifferentiableFunctionTest {
27
28 @Test
29 void testValue() {
30
31 final double[] x = new double[] { 2. };
32 final TestTwiceDifferentiableFunction function = new TestTwiceDifferentiableFunction();
33
34 final double actualValue = function.value(x);
35
36 final double expectedValueElement = x[0];
37 assertEquals(expectedValueElement, actualValue, 0);
38 }
39
40 @Test
41 void testGradient() {
42
43 final double[] x = new double[] { 2. };
44 final TestTwiceDifferentiableFunction function = new TestTwiceDifferentiableFunction();
45
46 final RealVector actualGradient = function.gradient(x);
47
48 final double expectedValueElement = 1.;
49 assertEquals(expectedValueElement, actualGradient.getEntry(0), 0);
50 }
51
52 @Test
53 void testHessian() {
54
55 final double[] x = new double[] { 2. };
56 final TestTwiceDifferentiableFunction function = new TestTwiceDifferentiableFunction();
57
58 final RealMatrix actualGradient = function.hessian(x);
59
60 final double expectedValueElement = 0.;
61 assertEquals(expectedValueElement, actualGradient.getEntry(0, 0), 0);
62 }
63
64 private static class TestTwiceDifferentiableFunction extends TwiceDifferentiableFunction {
65
66 @Override
67 public int dim() {
68 return 1;
69 }
70
71 @Override
72 public double value(RealVector x) {
73 return x.getEntry(0);
74 }
75
76 @Override
77 public RealVector gradient(RealVector x) {
78 return MatrixUtils.createRealVector(new double[] { 1. });
79 }
80
81 @Override
82 public RealMatrix hessian(RealVector x) {
83 return MatrixUtils.createRealMatrix(1, 1);
84 }
85
86 }
87
88 }