# 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.

The example in MRPT/samples/unscented_transform_test

```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().

The example in MRPT/samples/unscented_transform_test

```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>`