33 double const H { 2 *
h };
35 const size_t SIZE { vector.size() };
39 for(
size_t i { 0 }; i < SIZE; ++i ){
40 double tmp { vector.get( i ) };
41 const_cast<gsl::vector&
>( vector ).set( i, tmp +
h );
43 const_cast<gsl::vector&
>( vector ).set( i, tmp -
h );
45 const_cast<gsl::vector&
>( vector ).set( i, tmp );
56 double const H { 4 *
h2 *
h2 };
60 const size_t SIZE { vector.size() };
62 auto hessian = gsl::matrix( SIZE, SIZE );
63 for(
size_t i { 0 }; i < SIZE; ++i ){
66 double tmpi { vector.get( i ) };
67 const_cast<gsl::vector&
>( vector ).set( i, tmpi + 2 *
h2 );
69 const_cast<gsl::vector&
>( vector ).set( i, tmpi - 2 *
h2 );
71 const_cast<gsl::vector&
>( vector ).set( i, tmpi );
72 hessian.set( i, i, (a - 2 * c + d) / H );
73 for(
size_t j { i + 1 }; j < SIZE; ++j ){
75 double tmpj { vector.get( j ) };
76 const_cast<gsl::vector&
>( vector ).set( i, tmpi +
h2 );
77 const_cast<gsl::vector&
>( vector ).set( j, tmpj +
h2 );
79 const_cast<gsl::vector&
>( vector ).set( j, tmpj -
h2 );
81 const_cast<gsl::vector&
>( vector ).set( i, tmpi -
h2 );
83 const_cast<gsl::vector&
>( vector ).set( j, tmpj +
h2 );
85 const_cast<gsl::vector&
>( vector ).set( i, tmpi );
86 const_cast<gsl::vector&
>( vector ).set( j, tmpj );
91 double const entry = (a - b - c + d) / H;
108 std::tuple<gsl::vector,gsl::matrix>
virtual std::tuple< gsl::vector, gsl::matrix > derivatives(gsl::vector const &vector)
Compute or estimate derivative values.
double h
Value used for default gradient estimates.
virtual double operator()(gsl::vector const &vector)=0
Compute a function value.
virtual gsl::vector gradient(gsl::vector const &vector)
Compute or estimate a gradient value.
double h2
Value used for default Hessian estimates.
Namespace for functions that can be used by ipo::Objective and ipo::Constraint.
Function(size_t const size=0)
Constructor.
virtual gsl::matrix hessian(gsl::vector const &vector)
Compute or estimate a Hessian value.