gtsam
Loading...
Searching...
No Matches
numericalDerivative.h File Reference

Numerical derivative helpers for manifold-valued functions. More...

Go to the source code of this file.

Classes

struct  gtsam::internal::FixedSizeMatrix< Y, X >
 Select the fixed-size Jacobian type associated with two manifold types. More...
struct  gtsam::internal::MatrixMN< M, N >
 Select a fixed-size matrix from explicit row and column counts. More...
struct  gtsam::internal::DeducedOutput
 Marker type used when the callable return type should be deduced. More...

Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.

Typedefs

template<class RequestedY, class F, class... Args>
using gtsam::internal::OutputType
template<class F, class... Args>
using gtsam::internal::EnableIfInvocable
template<class F, class... Args>
using gtsam::internal::EnableIfScalarInvocable

Functions

template<class X, int N>
constexpr void gtsam::internal::ValidateGradientInput ()
template<class Y, class X, int N>
constexpr void gtsam::internal::ValidateUnaryDerivativeTypes ()
First-Order Derivative Helpers
template<class X, int N = traits<X>::dimension, class F, internal::EnableIfScalarInvocable< F, X > = 0>
Eigen::Matrix< double, N, 1 > gtsam::numericalGradient (F &&h, const X &x, double delta=1e-5)
 Numerically compute gradient of scalar function.
template<class X, int N = traits<X>::dimension>
Eigen::Matrix< double, N, 1 > gtsam::numericalGradient (double(&h)(const X &), const X &x, double delta=1e-5)
 Raw-function overload for numericalGradient.
template<class Y = internal::DeducedOutput, class X, int N = traits<X>::dimension, class F, internal::EnableIfInvocable< F, X > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X > >::dimension, N >::type gtsam::numericalDerivative11 (F &&h, const X &x, double delta=1e-5)
 New-style numerical derivatives using manifold_traits.
template<class Y, class X, int N = traits<X>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative11 (Y(&h)(const X &), const X &x, double delta=1e-5)
 Raw-function overload for numericalDerivative11.
template<class Y = internal::DeducedOutput, class X1, class X2, int N = traits<X1>::dimension, class F, internal::EnableIfInvocable< F, X1, X2 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2 > >::dimension, N >::type gtsam::numericalDerivative21 (F &&h, const X1 &x1, const X2 &x2, double delta=1e-5)
 Compute numerical derivative in argument 1 of binary function.
template<class Y, class X1, class X2, int N = traits<X1>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative21 (Y(&h)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 Raw-function overload for numericalDerivative21.
template<class Y = internal::DeducedOutput, class X1, class X2, int N = traits<X2>::dimension, class F, internal::EnableIfInvocable< F, X1, X2 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2 > >::dimension, N >::type gtsam::numericalDerivative22 (F &&h, const X1 &x1, const X2 &x2, double delta=1e-5)
 Compute numerical derivative in argument 2 of binary function.
template<class Y, class X1, class X2, int N = traits<X2>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative22 (Y(&h)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 Raw-function overload for numericalDerivative22.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, int N = traits<X1>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3 > >::dimension, N >::type gtsam::numericalDerivative31 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Compute numerical derivative in argument 1 of ternary function.
template<class Y, class X1, class X2, class X3, int N = traits<X1>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative31 (Y(&h)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalDerivative31.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, int N = traits<X2>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3 > >::dimension, N >::type gtsam::numericalDerivative32 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Compute numerical derivative in argument 2 of ternary function.
template<class Y, class X1, class X2, class X3, int N = traits<X2>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative32 (Y(&h)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalDerivative32.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, int N = traits<X3>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3 > >::dimension, N >::type gtsam::numericalDerivative33 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Compute numerical derivative in argument 3 of ternary function.
template<class Y, class X1, class X2, class X3, int N = traits<X3>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative33 (Y(&h)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalDerivative33.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, int N = traits<X1>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4 > >::dimension, N >::type gtsam::numericalDerivative41 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 1 of 4-argument function.
template<class Y, class X1, class X2, class X3, class X4, int N = traits<X1>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative41 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Raw-function overload for numericalDerivative41.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, int N = traits<X2>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4 > >::dimension, N >::type gtsam::numericalDerivative42 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 2 of 4-argument function.
template<class Y, class X1, class X2, class X3, class X4, int N = traits<X2>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative42 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Raw-function overload for numericalDerivative42.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, int N = traits<X3>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4 > >::dimension, N >::type gtsam::numericalDerivative43 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 3 of 4-argument function.
template<class Y, class X1, class X2, class X3, class X4, int N = traits<X3>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative43 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Raw-function overload for numericalDerivative43.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, int N = traits<X4>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4 > >::dimension, N >::type gtsam::numericalDerivative44 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 4 of 4-argument function.
template<class Y, class X1, class X2, class X3, class X4, int N = traits<X4>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative44 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Raw-function overload for numericalDerivative44.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, int N = traits<X1>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5 > >::dimension, N >::type gtsam::numericalDerivative51 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 1 of 5-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X1>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative51 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Raw-function overload for numericalDerivative51.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, int N = traits<X2>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5 > >::dimension, N >::type gtsam::numericalDerivative52 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 2 of 5-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X2>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative52 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Raw-function overload for numericalDerivative52.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, int N = traits<X3>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5 > >::dimension, N >::type gtsam::numericalDerivative53 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 3 of 5-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X3>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative53 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Raw-function overload for numericalDerivative53.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, int N = traits<X4>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5 > >::dimension, N >::type gtsam::numericalDerivative54 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 4 of 5-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X4>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative54 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Raw-function overload for numericalDerivative54.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, int N = traits<X5>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5 > >::dimension, N >::type gtsam::numericalDerivative55 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 5 of 5-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X5>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative55 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Raw-function overload for numericalDerivative55.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X1>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5, X6 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5, X6 > >::dimension, N >::type gtsam::numericalDerivative61 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 1 of 6-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X1>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative61 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Raw-function overload for numericalDerivative61.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X2>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5, X6 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5, X6 > >::dimension, N >::type gtsam::numericalDerivative62 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 2 of 6-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X2>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative62 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Raw-function overload for numericalDerivative62.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X3>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5, X6 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5, X6 > >::dimension, N >::type gtsam::numericalDerivative63 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 3 of 6-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X3>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative63 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Raw-function overload for numericalDerivative63.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X4>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5, X6 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5, X6 > >::dimension, N >::type gtsam::numericalDerivative64 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 4 of 6-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X4>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative64 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Raw-function overload for numericalDerivative64.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X5>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5, X6 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5, X6 > >::dimension, N >::type gtsam::numericalDerivative65 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 5 of 6-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X5>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative65 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Raw-function overload for numericalDerivative65.
template<class Y = internal::DeducedOutput, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X6>::dimension, class F, internal::EnableIfInvocable< F, X1, X2, X3, X4, X5, X6 > = 0>
internal::MatrixMN< traits< internal::OutputType< Y, F, X1, X2, X3, X4, X5, X6 > >::dimension, N >::type gtsam::numericalDerivative66 (F &&h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 6 of 6-argument function.
template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X6>::dimension>
internal::MatrixMN< traits< Y >::dimension, N >::type gtsam::numericalDerivative66 (Y(&h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Raw-function overload for numericalDerivative66.
Hessian Helpers
template<class X, int N = traits<X>::dimension, class F, internal::EnableIfScalarInvocable< F, X > = 0>
internal::MatrixMN< N, N >::type gtsam::numericalHessian (F &&f, const X &x, double delta=1e-5)
 Compute numerical Hessian matrix.
template<class X, int N = traits<X>::dimension>
internal::MatrixMN< N, N >::type gtsam::numericalHessian (double(&f)(const X &), const X &x, double delta=1e-5)
 Raw-function overload for numericalHessian.
template<class X1, class X2, int N1 = traits<X1>::dimension, int N2 = traits<X2>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2 > = 0>
internal::MatrixMN< N1, N2 >::type gtsam::numericalHessian212 (F &&f, const X1 &x1, const X2 &x2, double delta=1e-5)
 Mixed Hessian with respect to argument 1 then argument 2.
template<class X1, class X2, int N1 = traits<X1>::dimension, int N2 = traits<X2>::dimension>
internal::MatrixMN< N1, N2 >::type gtsam::numericalHessian212 (double(&f)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 Raw-function overload for numericalHessian212.
template<class X1, class X2, int N1 = traits<X1>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2 > = 0>
internal::MatrixMN< N1, N1 >::type gtsam::numericalHessian211 (F &&f, const X1 &x1, const X2 &x2, double delta=1e-5)
 Hessian with respect to argument 1 of a binary scalar function.
template<class X1, class X2, int N1 = traits<X1>::dimension>
internal::MatrixMN< N1, N1 >::type gtsam::numericalHessian211 (double(&f)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 Raw-function overload for numericalHessian211.
template<class X1, class X2, int N2 = traits<X2>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2 > = 0>
internal::MatrixMN< N2, N2 >::type gtsam::numericalHessian222 (F &&f, const X1 &x1, const X2 &x2, double delta=1e-5)
 Hessian with respect to argument 2 of a binary scalar function.
template<class X1, class X2, int N2 = traits<X2>::dimension>
internal::MatrixMN< N2, N2 >::type gtsam::numericalHessian222 (double(&f)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 Raw-function overload for numericalHessian222.
template<class X1, class X2, class X3, int N1 = traits<X1>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< N1, N1 >::type gtsam::numericalHessian311 (F &&f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Numerical Hessian for ternary functions.
template<class X1, class X2, class X3, int N1 = traits<X1>::dimension>
internal::MatrixMN< N1, N1 >::type gtsam::numericalHessian311 (double(&f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalHessian311.
template<class X1, class X2, class X3, int N2 = traits<X2>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< N2, N2 >::type gtsam::numericalHessian322 (F &&f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Hessian with respect to argument 2 of a ternary scalar function.
template<class X1, class X2, class X3, int N2 = traits<X2>::dimension>
internal::MatrixMN< N2, N2 >::type gtsam::numericalHessian322 (double(&f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalHessian322.
template<class X1, class X2, class X3, int N3 = traits<X3>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< N3, N3 >::type gtsam::numericalHessian333 (F &&f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Hessian with respect to argument 3 of a ternary scalar function.
template<class X1, class X2, class X3, int N3 = traits<X3>::dimension>
internal::MatrixMN< N3, N3 >::type gtsam::numericalHessian333 (double(&f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalHessian333.
template<class X1, class X2, class X3, int N1 = traits<X1>::dimension, int N2 = traits<X2>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< N1, N2 >::type gtsam::numericalHessian312 (F &&f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Mixed Hessian with respect to arguments 1 and 2 of a ternary scalar function.
template<class X1, class X2, class X3, int N1 = traits<X1>::dimension, int N3 = traits<X3>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< N1, N3 >::type gtsam::numericalHessian313 (F &&f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Mixed Hessian with respect to arguments 1 and 3 of a ternary scalar function.
template<class X1, class X2, class X3, int N2 = traits<X2>::dimension, int N3 = traits<X3>::dimension, class F, internal::EnableIfScalarInvocable< F, X1, X2, X3 > = 0>
internal::MatrixMN< N2, N3 >::type gtsam::numericalHessian323 (F &&f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Mixed Hessian with respect to arguments 2 and 3 of a ternary scalar function.
template<class X1, class X2, class X3, int N1 = traits<X1>::dimension, int N2 = traits<X2>::dimension>
internal::MatrixMN< N1, N2 >::type gtsam::numericalHessian312 (double(&f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalHessian312.
template<class X1, class X2, class X3, int N1 = traits<X1>::dimension, int N3 = traits<X3>::dimension>
internal::MatrixMN< N1, N3 >::type gtsam::numericalHessian313 (double(&f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalHessian313.
template<class X1, class X2, class X3, int N2 = traits<X2>::dimension, int N3 = traits<X3>::dimension>
internal::MatrixMN< N2, N3 >::type gtsam::numericalHessian323 (double(&f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Raw-function overload for numericalHessian323.

Detailed Description

Numerical derivative helpers for manifold-valued functions.

This file is organized in three layers:

  • internal contains small traits that select Jacobian matrix types and deduce callable output types.
  • numericalGradient and numericalDerivative11 provide the scalar-gradient and unary central-difference kernels.
  • The higher-arity numericalDerivativeXY wrappers adapt multi-argument callables onto the unary kernel, while the Hessian helpers at the end build on the gradient and Jacobian routines.
    Author
    Frank Dellaert

Typedef Documentation

◆ EnableIfInvocable

template<class F, class... Args>
using gtsam::internal::EnableIfInvocable
Initial value:
std::enable_if_t<std::is_invocable_v<F&, const Args&...>, int>

◆ EnableIfScalarInvocable

template<class F, class... Args>
using gtsam::internal::EnableIfScalarInvocable
Initial value:
std::enable_if_t<std::is_invocable_r_v<double, F&, const Args&...>, int>

◆ OutputType

template<class RequestedY, class F, class... Args>
using gtsam::internal::OutputType
Initial value:
std::conditional_t<std::is_same_v<RequestedY, DeducedOutput>,
std::decay_t<std::invoke_result_t<F&, const Args&...>>,
RequestedY>