Skip to content
Snippets Groups Projects
miscprob.h 1.76 KiB
Newer Older
Christian Beckmann's avatar
Christian Beckmann committed
/*  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"
#include "libprob.h"
Christian Beckmann's avatar
Christian Beckmann committed
#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);

Mark Woolrich's avatar
Mark Woolrich committed
  // returns nsamps*nparams matrix:
Christian Beckmann's avatar
Christian Beckmann committed
  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