Gaussian PDF transformation functions

// global functions

template <
    class VECTORLIKE1,
    class MATLIKE1,
    class USERPARAM,
    class VECTORLIKE2,
    class VECTORLIKE3,
    class MATLIKE2
    >
void mrpt::math::transform_gaussian_unscented(
    const VECTORLIKE1& x_mean,
    const MATLIKE1& x_cov,
    void(*)(const VECTORLIKE1&x, const USERPARAM&fixed_param, VECTORLIKE3&y) functor,
    const USERPARAM& fixed_param,
    VECTORLIKE2& y_mean,
    MATLIKE2& y_cov,
    const bool* elem_do_wrap2pi = nullptr,
    const double alpha = 1e-3,
    const double K = 0,
    const double beta = 2.0
    );

template <
    class VECTORLIKE1,
    class MATLIKE1,
    class USERPARAM,
    class VECTORLIKE2,
    class VECTORLIKE3,
    class MATLIKE2
    >
void mrpt::math::transform_gaussian_montecarlo(
    const VECTORLIKE1& x_mean,
    const MATLIKE1& x_cov,
    void(*)(const VECTORLIKE1&x, const USERPARAM&fixed_param, VECTORLIKE3&y) functor,
    const USERPARAM& fixed_param,
    VECTORLIKE2& y_mean,
    MATLIKE2& y_cov,
    const size_t num_samples = 1000,
    std::vector<VECTORLIKE3>* out_samples_y = nullptr
    );

template <
    class VECTORLIKE1,
    class MATLIKE1,
    class USERPARAM,
    class VECTORLIKE2,
    class VECTORLIKE3,
    class MATLIKE2
    >
void mrpt::math::transform_gaussian_linear(
    const VECTORLIKE1& x_mean,
    const MATLIKE1& x_cov,
    void(*)(const VECTORLIKE1&x, const USERPARAM&fixed_param, VECTORLIKE3&y) functor,
    const USERPARAM& fixed_param,
    VECTORLIKE2& y_mean,
    MATLIKE2& y_cov,
    const VECTORLIKE1& x_increments
    );

Global Functions

template <
    class VECTORLIKE1,
    class MATLIKE1,
    class USERPARAM,
    class VECTORLIKE2,
    class VECTORLIKE3,
    class MATLIKE2
    >
void mrpt::math::transform_gaussian_unscented(
    const VECTORLIKE1& x_mean,
    const MATLIKE1& x_cov,
    void(*)(const VECTORLIKE1&x, const USERPARAM&fixed_param, VECTORLIKE3&y) functor,
    const USERPARAM& fixed_param,
    VECTORLIKE2& y_mean,
    MATLIKE2& y_cov,
    const bool* elem_do_wrap2pi = nullptr,
    const double alpha = 1e-3,
    const double K = 0,
    const double beta = 2.0
    )

Scaled unscented transformation (SUT) for estimating the Gaussian distribution of a variable Y=f(X) for an arbitrary function f() provided by the user.

The user must supply the function in “functor” which takes points in the X space and returns the mapped point in Y, optionally using an extra, constant parameter (“fixed_param”) which remains constant.

The parameters alpha, K and beta are the common names of the SUT method, and the default values are those recommended in most papers.

Parameters:

elem_do_wrap2pi

If !=nullptr; it must point to an array of “bool” of size()==dimension of each element, stating if it’s needed to do a wrap to [-pi,pi] to each dimension.

See also:

The example in MRPT/samples/unscented_transform_test

transform_gaussian_montecarlo, transform_gaussian_linear

template <
    class VECTORLIKE1,
    class MATLIKE1,
    class USERPARAM,
    class VECTORLIKE2,
    class VECTORLIKE3,
    class MATLIKE2
    >
void mrpt::math::transform_gaussian_montecarlo(
    const VECTORLIKE1& x_mean,
    const MATLIKE1& x_cov,
    void(*)(const VECTORLIKE1&x, const USERPARAM&fixed_param, VECTORLIKE3&y) functor,
    const USERPARAM& fixed_param,
    VECTORLIKE2& y_mean,
    MATLIKE2& y_cov,
    const size_t num_samples = 1000,
    std::vector<VECTORLIKE3>* out_samples_y = nullptr
    )

Simple Montecarlo-base estimation of the Gaussian distribution of a variable Y=f(X) for an arbitrary function f() provided by the user.

The user must supply the function in “functor” which takes points in the X space and returns the mapped point in Y, optionally using an extra, constant parameter (“fixed_param”) which remains constant.

Parameters:

out_samples_y

If !=nullptr, this vector will contain, upon return, the sequence of random samples generated and propagated through the functor().

See also:

The example in MRPT/samples/unscented_transform_test

transform_gaussian_unscented, transform_gaussian_linear

template <
    class VECTORLIKE1,
    class MATLIKE1,
    class USERPARAM,
    class VECTORLIKE2,
    class VECTORLIKE3,
    class MATLIKE2
    >
void mrpt::math::transform_gaussian_linear(
    const VECTORLIKE1& x_mean,
    const MATLIKE1& x_cov,
    void(*)(const VECTORLIKE1&x, const USERPARAM&fixed_param, VECTORLIKE3&y) functor,
    const USERPARAM& fixed_param,
    VECTORLIKE2& y_mean,
    MATLIKE2& y_cov,
    const VECTORLIKE1& x_increments
    )

First order uncertainty propagation estimator of the Gaussian distribution of a variable Y=f(X) for an arbitrary function f() provided by the user.

The user must supply the function in “functor” which takes points in the X space and returns the mapped point in Y, optionally using an extra, constant parameter (“fixed_param”) which remains constant. The Jacobians are estimated numerically using the vector of small increments “x_increments”. This function requires #include <Eigen/Dense>

See also:

The example in MRPT/samples/unscented_transform_test

transform_gaussian_unscented, transform_gaussian_montecarlo