NAME

compute_kalman_filter_stable - Calculates the marginal posteriors of an LDS

SYNOPSIS

#include "sequential/sequential_lds.h"

Example compile flags (system dependent):
  -DLINUX_X86_64 -DLINUX_X86_64_OPTERON  -DGNU_COMPILER 
   -I/home/kobus/include
   -L/home/kobus/misc/load/linux_x86_64_opteron -L/usr/lib/x86_64-linux-gnu
  -lKJB                               -lfftw3  -lgsl -lgslcblas -ljpeg  -lSVM -lstdc++                    -lpthread -lSLATEC -lg2c    -lacml -lacml_mv -lblas -lg2c      -lncursesw 


int compute_kalman_filter_stable
(
	Vector_vector **means,
	Matrix_vector **covariances,
	double *likelihood,
	const Vector_vector *y,
	const Matrix *A,
	const Matrix *Q,
	const Matrix *H,
	const Matrix *R,
	const Vector *mu_0,
	const Matrix *S_0
);

DESCRIPTION

This routine calculates the marginal posterior distributions for a linear dynamical system model. Here, y is the set of observations and let x be the set of (latent) state variables. This routine computes the distributions p(x_k | y_k, ..., y_k) for k = 1, ..., N, where the x_k are n-vectors and the y_k are m-vectors. Since these distributions are normal, it suffices to compute their means and covariances, which this routine puts in *means and *covariances. The rest of the parameters are best explained by seeing the equations of motion of the LDS: x_1 = mu_0 + u, x_k = A * x_{k-1} + w y_k = H * z_k + v where w ~ N(0, Q) and v ~ N(0, R) and u ~ N(0, S_0), and the A and Q are nxn matrices, the H is an mxn matrix and R is an mxm matrix. Finally, this routine also computes the incomplete-data log-likelihood (LOG!) of the LDS, i.e., log p(y_1, y_2, ..., y_N | A, H, Q, R, mu_0, S_0). The difference between this and compute_kalman_filter is that the covariance matrices in this routine are computed using a more numerically stable method. Specifically, it computes S_k as S_k = (I - K_k*H)*S'_k*(I-K_k*H)^T + K_k*R*K_k^T, where as compute_kalman_filter uses the more traditional S_k = (I-K_k*H)S'_k. As usual, *means and *covariances are reused if possible and created if needed, according to the KJB allocation semantics. Any result that is not desired can be omitted by passing NULL to the rouitne.

RETURNS

NO_ERROR on success, and ERROR on failure, with an appropriate error message being set.

DISCLAIMER

This software is not adequatedly tested. It is recomended that results are checked independantly where appropriate.

AUTHOR

Ernesto Brau

DOCUMENTER

Ernesto Brau

SEE ALSO

sample_from_LDS , sample_from_LDS_2 , compute_kalman_filter , compute_kalman_filter_2 , compute_kalman_filter_2_stable