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.Array2DRowRealMatrix;
20 import org.hipparchus.linear.ArrayRealVector;
21 import org.hipparchus.linear.RealMatrix;
22 import org.hipparchus.linear.RealVector;
23
24 public class HockSchittkowskiFunction78 extends TwiceDifferentiableFunction {
25
26 @Override
27 public int dim() {
28 return 5;
29 }
30
31 @Override
32 public double value(RealVector x) {
33 double x1 = x.getEntry(0);
34 double x2 = x.getEntry(1);
35 double x3 = x.getEntry(2);
36 double x4 = x.getEntry(3);
37 double x5 = x.getEntry(4);
38
39
40 return x1*x2*x3*x4*x5;
41 }
42
43 @Override
44 public RealVector gradient(RealVector x) {
45 RealVector grad=new ArrayRealVector(x.getDimension());
46 double x1 = x.getEntry(0);
47 double x2 = x.getEntry(1);
48 double x3 = x.getEntry(2);
49 double x4 = x.getEntry(3);
50 double x5 = x.getEntry(4);
51
52 grad.setEntry(0,x2*x3*x4*x5);
53 grad.setEntry(1,x1*x3*x4*x5);
54 grad.setEntry(2,x1*x2*x4*x5);
55 grad.setEntry(3,x1*x2*x3*x5);
56 grad.setEntry(4,x1*x2*x3*x4);
57
58
59 return grad;
60 }
61
62 @Override
63 public RealMatrix hessian(RealVector x) {
64 RealMatrix h=new Array2DRowRealMatrix(x.getDimension(),x.getDimension());
65 h.setEntry(0,0, 0);
66 h.setEntry(0,1, 0);
67 h.setEntry(0,2, 0);
68 h.setEntry(0,3, 0);
69
70
71 h.setEntry(1,0, 0);
72 h.setEntry(1,1, 0);
73 h.setEntry(1,2, 0);
74 h.setEntry(1,3, 0);
75
76
77 h.setEntry(2,0, 0);
78 h.setEntry(2,1, 0);
79 h.setEntry(2,2,0);
80 h.setEntry(2,3, 0);
81
82
83 h.setEntry(3,0, 0);
84 h.setEntry(3,1, 0);
85 h.setEntry(3,2, 0.0);
86 h.setEntry(3,3, 0);
87
88
89
90
91
92 return h;
93 }
94
95 }