This library is primarily template library for probability distributions. Some older statistical code also exists here which does not fit into the framework of this library. Expect this older code to be deprecated soon.
This library uses the generic programming paradigm for statistical distributions. The class hierarchy is for code reuse and type definitions as opposed to polymorphism. The base class for distributions, bsta_distribution, contains no functions or member variables. Each distribution has template parameters for the scalar type (typically float or double) and dimension.
The bsta_distribution defines the following typedefs
dimension
(integer with enum hack) the dimensionality of the spacemath_type
the type used in mathmatical operations (expects double or float)vector_type
the type used to represent a vector math_type
of size dimension
The vector_type
is defined as vnl_vector_fixed<math_type,dimension>
by default. Using template partial specialization, vector_type
is redefined to be the same as math_type
when equals 1. Using the vector_type
typedef allow much of the same code to be used both univariate and multivariate distributions without the overhead of of a 1 dimensional vector or other wrapper classes.
The Gaussian (aka Normal) distribution is provided with several variants. Each variant has a different restriction on the parameters. These Gaussians share a base class named bsta_gaussian which adds member variable for the mean (stored as a vector_type
) and functions to access it. Each variant of the Gaussian also defines the typedef covar_type
to specifiy the data type used to represent covariance.
covar_type
is math_type
)covar_type
is vector_type
)covar_type
is vnl_matrix_fixed<math_type,dimension,dimension>
)