ParticleSmootherModel Class Template Reference

Inheritance diagram for ParticleSmootherModel:

Inheritance graph
[legend]

List of all members.


Detailed Description

template<class T = unsigned int>
class indii::ml::filter::ParticleSmootherModel< T >

ParticleSmoother compatible model.

Author:
Lawrence Murray <lawrence@indii.org>
Version:
Rev
Date:
Date
Parameters:
T The type of time.
See also:
indii::ml::filter for general usage guidelines.

Definition at line 24 of file ParticleSmootherModel.hpp.


Public Member Functions

virtual ~ParticleSmootherModel ()=0
 Destructor.
virtual
indii::ml::aux::sparse_matrix 
alpha (const indii::ml::aux::DiracMixturePdf &p_xtn_ytn, const indii::ml::aux::DiracMixturePdf &p_xtnp1_ytnp1, const T start, const T delta)=0
 Calculates the matrix $\alpha(t)$.
virtual void alphaPrecalculate (const indii::ml::aux::DiracMixturePdf &p_xtn_ytn, const T start, const T delta)
 Perform precalculations for $\alpha$ matrix.

Constructor & Destructor Documentation

~ParticleSmootherModel (  )  [inline, pure virtual]

Destructor.

Definition at line 99 of file ParticleSmootherModel.hpp.


Member Function Documentation

virtual indii::ml::aux::sparse_matrix alpha ( const indii::ml::aux::DiracMixturePdf p_xtn_ytn,
const indii::ml::aux::DiracMixturePdf p_xtnp1_ytnp1,
const T  start,
const T  delta 
) [pure virtual]

Calculates the matrix $\alpha(t)$.

$\alpha^{(j,i)}(t) = p\big(\mathbf{s}^{(j)}(t + \Delta t)\,|\,\mathbf{s}^{(i)}(t)\big)$, where $\mathbf{s}^{(j)}(t + \Delta t)$ is the $j$th particle at time $t + \Delta t$ and $\mathbf{s}^{(i)}(t)$ is the $i$th particle at time $t$.

Parameters:
p_xtn_ytn $P\big(\mathbf{x}(t_n)\, | \,\mathbf{y}(t_1),\ldots,\mathbf{y}(t_n)\big)$.
p_xtnp1_ytnp1 $P\big(\mathbf{x}(t_{n+1})\, | \,\mathbf{y}(t_1),\ldots,\mathbf{y}(t_{n+1})\big)$.
start $t_n$; start time.
delta $\Delta t = t_{n+1} - t_n$; change in time.
Returns:
$\alpha(t)$.
Particles for the distributions may be obtained with calls to indii::ml::aux::DiracMixturePdf::getComponents().

Note:
The implementation should not assume that there are $P$ particles in p_xtn_ytn and p_xtnp1_ytnp1. Instead, use indii::ml::aux::DiracMixturePdf::getNumComponents() to determine this. This is particularly important when working in a parallel environment, where particles are divided up amongst multiple calls to this method.

void alphaPrecalculate ( const indii::ml::aux::DiracMixturePdf p_xtn_ytn,
const T  start,
const T  delta 
) [inline, virtual]

Perform precalculations for $\alpha$ matrix.

In a parallel environment, each smoothing step may require multiple calls to the alpha() method of the model with the same first argument. To allow for precalculations based on this first argument, the alphaPrecalculate() method is called before each change to the argument.

For example, in the case of a model with simple Gaussian additive noise, this method could be used to propagate each of the particles at time $t_n$ to time $t_{n+1}$ without noise, obtaining the mean of a Gaussian with covariance equivalent to the system noise. Within the alpha() method, these Gaussians can then be used to quickly calculate densities without having to transition particles again during each call to alpha().

There is no requirement for this method to do anything at all, or even to be implemented in derived classes. It exists purely for optimisation, and is not required for correctness.

Parameters:
p_xtn_ytn As p_xtn_ytn of alpha().
start As start of alpha().
delta As delta of alpha().

Definition at line 104 of file ParticleSmootherModel.hpp.


Generated on Wed Dec 17 15:11:58 2008 for dysii Dynamical Systems Library by  doxygen 1.5.3