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"
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
#include "stdlib.h"
using namespace NEWMAT;
namespace MISCMATHS {
ReturnMatrix unifrnd(const int dim1 = 1, const int dim2 = -1,
const float start = 0, const float end = 1);
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 sigma = 1);
ReturnMatrix normpdf(const RowVector& vals, const RowVector& mus,
const RowVector& sigmas);
ReturnMatrix normcdf(const RowVector& vals, const float mu = 0, const float sigma = 1);
ReturnMatrix gammapdf(const RowVector& vals, const float mu = 0, const float sigma = 1);
ReturnMatrix gammacdf(const RowVector& vals, const float mu = 0, const float sigma = 1);
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