#ifndef DMNORM_H_
#define DMNORM_H_
#include <distributions/Distribution.h>
/**
* @short Multivariate normal distribution
* <pre>
* x[] ~ dmnorm(mu[], T[,])
* f(x | mu, T) = sqrt(det(T)) * exp(-1/2 * (x-mu) %*% T %*% t(x-mu))
* </pre>
*/
class DMNorm : public Distribution {
public:
DMNorm();
~DMNorm();
double logLikelihood(SArray const &x,
std::vector<SArray const *> const ¶meters) const;
void randomSample(SArray &x,
std::vector<SArray const *> const ¶meters) const;
/**
* Checks that mu is a vector, T is a square matrix and the sizes of
* mu and T conform.
*/
bool checkParameterDim (std::vector<SArray const *> const ¶meters) const;
/**
* Checks that T is symmetric. Note that there is currently NO CHECK
* that T is positive definite.
*/
bool checkParameterValue (std::vector<SArray const *> const ¶meters) const;
Index const &dim(std::vector<SArray const *> const ¶meters) const;
/**
* Convenience random sampler function
*/
static void randomsample(double *x, double const *mu, double const *tau,
int nrow);
unsigned long df(std::vector<SArray const *> const ¶meters) const;
double lowerSupport(unsigned long i,
std::vector<SArray const *> const ¶meters) const;
double upperSupport(unsigned long i,
std::vector<SArray const *> const ¶meters) const;
};
#endif /* DMNORM_H_ */
syntax highlighted by Code2HTML, v. 0.9.1