57 FunctionEvalType& derivative,
58 const FunctionEvalType& fx0,
59 const int numericDifferenceMethod = 1)
74 FunctionEvalType& derivative,
75 const FunctionEvalType& fx0,
77 const int numericDifferenceMethod = 1)
79 std::is_same_v<Scalar, decltype(std::declval<Scalar>() + std::declval<EpsType>())>
80 && std::is_same_v<Scalar,
decltype(std::declval<Scalar>() - std::declval<EpsType>())>
85 if (numericDifferenceMethod == 5)
87 derivative = function(x0 + eps);
88 derivative -= function(x0 - eps);
90 derivative += function(x0 - 2.0*eps);
91 derivative -= function(x0 + 2.0*eps);
92 derivative /= 12.0*eps;
100 if (numericDifferenceMethod >= 0)
104 derivative = function(x0 + eps);
110 else derivative = fx0;
114 if (numericDifferenceMethod <= 0)
118 derivative -= function(x0 - eps);
124 else derivative -= fx0;