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.Assert;
23 import org.junit.Test;
24
25 public class TwiceDifferentiableFunctionTest {
26
27 @Test
28 public void testValue() {
29
30 final double[] x = new double[] { 2. };
31 final TestTwiceDifferentiableFunction function = new TestTwiceDifferentiableFunction();
32
33 final double actualValue = function.value(x);
34
35 final double expectedValueElement = x[0];
36 Assert.assertEquals(expectedValueElement, actualValue, 0);
37 }
38
39 @Test
40 public void testGradient() {
41
42 final double[] x = new double[] { 2. };
43 final TestTwiceDifferentiableFunction function = new TestTwiceDifferentiableFunction();
44
45 final RealVector actualGradient = function.gradient(x);
46
47 final double expectedValueElement = 1.;
48 Assert.assertEquals(expectedValueElement, actualGradient.getEntry(0), 0);
49 }
50
51 @Test
52 public void testHessian() {
53
54 final double[] x = new double[] { 2. };
55 final TestTwiceDifferentiableFunction function = new TestTwiceDifferentiableFunction();
56
57 final RealMatrix actualGradient = function.hessian(x);
58
59 final double expectedValueElement = 0.;
60 Assert.assertEquals(expectedValueElement, actualGradient.getEntry(0, 0), 0);
61 }
62
63 private static class TestTwiceDifferentiableFunction extends TwiceDifferentiableFunction {
64
65 @Override
66 public int dim() {
67 return 1;
68 }
69
70 @Override
71 public double value(RealVector x) {
72 return x.getEntry(0);
73 }
74
75 @Override
76 public RealVector gradient(RealVector x) {
77 return MatrixUtils.createRealVector(new double[] { 1. });
78 }
79
80 @Override
81 public RealMatrix hessian(RealVector x) {
82 return MatrixUtils.createRealMatrix(1, 1);
83 }
84
85 }
86
87 }