DiracMixture
The DiracMixture class implements a point mass distribution, i.e., a set of weighted samples.
The following examples can be found in the toolbox's examples.
Usage
Configure
% Configure a Dirac mixture with 4 components/samples: % 1) sample: [2.0, 0.5]', weight: 0.4 % 2) sample: [-1, 3]', weight: 0.2 % 3) sample: [-3, -1]', weight: 0.2 % 4) sample: [0, 4]', weight: 0.2 samples = [2.0 -1 -3 0 0.5 3 -1 4]; weights = [0.4 0.2 0.2 0.2]; dm1 = DiracMixture(samples, weights); % The component weights do not have to be normalized in advance. That % is, the DiracMixture class normalizes the given weights anyway. % Hence, this results in the same, valid, Dirac mixture: weights = [2 1 1 1]; dm2 = DiracMixture(samples, weights); % If no weights are provided, the components/samples are assumed to be equally weighted: dm3 = DiracMixture(samples); % An already initialized DiracMixture can be changed by using its set() method: dm3.set([-1 5 3 4 2]);
Get Information
% Dimension of the distribution: dim = dm2.getDim(); % Get mean, covariance matrix and the lower Cholesky decomposition of % the distribution's covariance matrix: [mean, cov, covSqrt] = dm2.getMeanAndCov(); % Get the number of Dirac mixture components/samples: numComponents = dm2.getNumComponents(); % Get the Dirac mixture components (note the now normalized weights): [samples, weights] = dm2.getComponents();
Draw Random Samples
% Draw eight random samples from dm1: samples = dm1.drawRndSamples(8);
Copy
Note that any distribution, including the DiracMixture, 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, dm is only a reference to dm3 (no data is copied): dm = dm3; dm.set([eye(3) -eye(3)]); % Hence, the above set() call also changes dm3: [mean, cov] = dm3.getMeanAndCov(); % Use the distribution's copy() method for a real copy: dm = dm3.copy(); dm.set([1 2 3 4]); % Now, dm3 remains unchanged: [mean, cov] = dm3.getMeanAndCov();