wolffd@0: function x = gsamp(mu, covar, nsamp) wolffd@0: %GSAMP Sample from a Gaussian distribution. wolffd@0: % wolffd@0: % Description wolffd@0: % wolffd@0: % X = GSAMP(MU, COVAR, NSAMP) generates a sample of size NSAMP from a wolffd@0: % D-dimensional Gaussian distribution. The Gaussian density has mean wolffd@0: % vector MU and covariance matrix COVAR, and the matrix X has NSAMP wolffd@0: % rows in which each row represents a D-dimensional sample vector. wolffd@0: % wolffd@0: % See also wolffd@0: % GAUSS, DEMGAUSS wolffd@0: % wolffd@0: wolffd@0: % Copyright (c) Ian T Nabney (1996-2001) wolffd@0: wolffd@0: d = size(covar, 1); wolffd@0: wolffd@0: mu = reshape(mu, 1, d); % Ensure that mu is a row vector wolffd@0: wolffd@0: [evec, eval] = eig(covar); wolffd@0: wolffd@0: deig=diag(eval); wolffd@0: wolffd@0: if (~isreal(deig)) | any(deig<0), wolffd@0: warning('Covariance Matrix is not OK, redefined to be positive definite'); wolffd@0: eval=abs(eval); wolffd@0: end wolffd@0: wolffd@0: coeffs = randn(nsamp, d)*sqrt(eval); wolffd@0: wolffd@0: x = ones(nsamp, 1)*mu + coeffs*evec';