Skip to content
Snippets Groups Projects
miscprob.h 2.23 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/libprob.h"
Christian Beckmann's avatar
Christian Beckmann committed
#include "stdlib.h"

using namespace NEWMAT;
// using namespace NEWRAN;
Christian Beckmann's avatar
Christian Beckmann committed

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);
Christian Beckmann's avatar
Christian Beckmann committed
  
  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);
  

Stephen Smith's avatar
Stephen Smith committed
  ReturnMatrix normpdf(const RowVector& vals, const float mu = 0, const float var = 1);
Christian Beckmann's avatar
Christian Beckmann committed

  ReturnMatrix normpdf(const RowVector& vals, const RowVector& mus, 
Stephen Smith's avatar
Stephen Smith committed
		       const RowVector& vars);
  float normpdf(const ColumnVector& val,const ColumnVector& mu,const SymmetricMatrix& sigma);
  
  ReturnMatrix normpdf(const Matrix& val,const ColumnVector& mu,const SymmetricMatrix& sigma);

Stephen Smith's avatar
Stephen Smith committed
  ReturnMatrix normcdf(const RowVector& vals, const float mu = 0, const float var = 1);
Stephen Smith's avatar
Stephen Smith committed
  ReturnMatrix gammapdf(const RowVector& vals, const float mu = 0, const float var = 1);
Stephen Smith's avatar
Stephen Smith committed
  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);
Christian Beckmann's avatar
Christian Beckmann committed
  
  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