Newer
Older
/* miscprob.h
Christian Beckmann & Mark Woolrich, FMRIB Image Analysis Group
Copyright (C) 1999-2000 University of Oxford */
/* CCOPYRIGHT */
// Miscellaneous maths functions that rely on libprob build ontop of miscmaths
#if !defined(__miscprob_h)
#define __miscprob_h
#include "miscmaths.h"
namespace MISCMATHS {
ReturnMatrix unifrnd(const int dim1 = 1, const int dim2 = -1,
const float start = 0, const float end = 1);
int distribrnd(const ColumnVector& histo);
ReturnMatrix normrnd(const int dim1 = 1, const int dim2 = -1,
const float mu = 0, const float sigma = 1);
ReturnMatrix mvnrnd(const RowVector& mu, const SymmetricMatrix& covar, int nsamp = 1);
ReturnMatrix normpdf(const RowVector& vals, const float mu = 0, const float var = 1);
ReturnMatrix normpdf(const RowVector& vals, const RowVector& mus,
float normpdf(const ColumnVector& val,const ColumnVector& mu,const SymmetricMatrix& sigma);
ReturnMatrix normpdf(const Matrix& val,const ColumnVector& mu,const SymmetricMatrix& sigma);
ReturnMatrix normcdf(const RowVector& vals, const float mu = 0, const float var = 1);
ReturnMatrix gammapdf(const RowVector& vals, const float mu = 0, const float var = 1);
ReturnMatrix gammacdf(const RowVector& vals, const float mu = 0, const float var = 1);
// returns n! * n matrix of all possible permutations
ReturnMatrix perms(const int n);
// ReturnMatrix wishrnd(const SymmetricMatrix&,const int);
// ReturnMatrix iwishrnd(const SymmetricMatrix&,const int);
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class Mvnormrandm
{
public:
Mvnormrandm(){}
Mvnormrandm(const RowVector& pmu, const SymmetricMatrix& pcovar) :
mu(pmu),
covar(pcovar)
{
Matrix eig_vec;
DiagonalMatrix eig_val;
EigenValues(covar,eig_val,eig_vec);
covarw = sqrt(eig_val)*eig_vec.t();
}
ReturnMatrix next(int nsamp = 1) const
{
Matrix ret = ones(nsamp, 1)*mu + normrnd(nsamp,mu.Ncols())*covarw;
ret.Release();
return ret;
}
private:
RowVector mu;
SymmetricMatrix covar;
Matrix covarw;
};
}
#endif