function X=gsamp(varargin)
% GSAMP Generates sample from Gaussian distribution.
%
% Synopsis:
% X = gsamp( Mean, Cov, num_data )
% X = gsamp( model, num_data )
%
% Description:
% X = gsamp(Mean,Cov,num_data) generates num_data samples from
% a multi-variate Gassian distribution given by mean vector
% Mean [dim x 1] and covariance matrix Cov [dim x dim].
%
% X = gsamp(model,num_data) assumes that parameters of Gaussian
% are given in structure with fields model.Mean a model.Cov.
%
% Example:
% model = struct('Mean',1,'Cov',2);
% figure; hold on;
% plot([-4:0.1:5],pdfgauss([-4:0.1:5],model),'r');
% [Y,X] = hist(gsamp(model,500),10);
% bar(X,Y/500);
%
% See also
% PDFGAUSS, GMMSAMP.
% About: Statistical Pattern Recognition Toolbox
% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac
% <a href="http://www.cvut.cz">Czech Technical University Prague</a>
% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a>
% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a>
% Modifications:
% 28-apr-2004, VF, adopted from P.Krizek
if nargin > 2,
Mean = varargin{1};
Cov = varargin{2};
num_data = varargin{3};
else
Mean = varargin{1}.Mean;
Cov = varargin{1}.Cov;
num_data = varargin{2};
end
dim = length(Mean);
[U,L] = eig(Cov);
X = inv(U')*sqrt(L)*randn(dim,num_data)+repmat(Mean,1,num_data);
return;