Gaussian
The Gaussian class implements a multivarate normal distribution.
The following examples can be found in the toolbox's examples.
Usage
Configure
% Configure a 2D Gaussian distribution with zero mean and % covariance matrix [2.0 0.5 % 0.5 1.0]: g1 = Gaussian(zeros(2, 1), [2.0 0.5 0.5 1.0]); % If only a vector is passed for the covariance matrix, it is % interpreted as the variances of a diagonal covariance matrix: g2 = Gaussian(zeros(4, 1), [2 1.5 0.1 3]); % An already initialized Gaussian can be changed by using its set() method: g3 = Gaussian(ones(3, 1), eye(3)); g3.set(0, 5);
Get Information
% Dimension of the distribution: dim = g2.getDim(); % Get mean, covariance matrix and the lower Cholesky decomposition of % the distribution's covariance matrix: [mean, cov, covSqrt] = g2.getMeanAndCov();
Draw Random Samples
% Draw eight random samples from g1: samples = g1.drawRndSamples(8);
Evaluate Logarithmic Probability Density Function (PDF)
% Get log PDF values of gm1 for the points [2, -1]' and [5 10]': logValues = g1.logPdf([ 2 5 -1 10]); % Or plot entire PDF of g1: t = -5:0.1:5; [x, y] = meshgrid(t); pos = [x(:)' y(:)']; values = exp(g1.logPdf(pos)); surf(x, y, reshape(values, [length(t) length(t)]), 'EdgeColor', 'None');
Copy
Note that any distribution, including the Gaussian, is implemented as a handle class. Hence, assigning a current class instance to a new variable means only passing a reference. If a real copy is required, use the distribution's copy method.
% Here, g is only a reference to g3 (no data is copied): g = g3; g.set(zeros(2, 1), 3 * eye(2)); % Hence, the above set() call also changes g3: [mean, cov] = g3.getMeanAndCov(); % Use the distribution's copy() method for a real copy: g = g3.copy(); g.set(1, 3); % Now, g3 remains unchanged: [mean, cov] = g3.getMeanAndCov();