G13 Chapter Contents
G13 Chapter Introduction
NAG Library Manual

# NAG Library Routine DocumentG13EAF

Note:  before using this routine, please read the Users' Note for your implementation to check the interpretation of bold italicised terms and other implementation-dependent details.

## 1  Purpose

G13EAF performs a combined measurement and time update of one iteration of the time-varying Kalman filter using a square root covariance filter.

## 2  Specification

 SUBROUTINE G13EAF ( N, M, L, A, LDS, B, STQ, Q, LDQ, C, LDM, R, S, K, H, TOL, IWK, WK, IFAIL)
 INTEGER N, M, L, LDS, LDQ, LDM, IWK(M), IFAIL REAL (KIND=nag_wp) A(LDS,N), B(LDS,L), Q(LDQ,*), C(LDM,N), R(LDM,M), S(LDS,N), K(LDS,M), H(LDM,M), TOL, WK((N+M)*(N+M+L)) LOGICAL STQ

## 3  Description

The Kalman filter arises from the state space model given by:
 $Xi+1=AiXi+BiWi, VarWi=Qi Yi=CiXi+Vi, VarVi=Ri$
where ${X}_{i}$ is the state vector of length $n$ at time $i$, ${Y}_{i}$ is the observation vector of length $m$ at time $i$, and ${W}_{i}$ of length $l$ and ${V}_{i}$ of length $m$ are the independent state noise and measurement noise respectively.
The estimate of ${X}_{i}$ given observations ${Y}_{1}$ to ${Y}_{i-1}$ is denoted by ${\stackrel{^}{X}}_{i\mid i-1}$ with state covariance matrix $\mathrm{Var}\left({\stackrel{^}{X}}_{i\mid i-1}\right)={P}_{i\mid i-1}={S}_{i}{S}_{i}^{\mathrm{T}}$, while the estimate of ${X}_{i}$ given observations ${Y}_{1}$ to ${Y}_{i}$ is denoted by ${\stackrel{^}{X}}_{i\mid i}$ with covariance matrix $\mathrm{Var}\left({\stackrel{^}{X}}_{i\mid i}\right)={P}_{i\mid i}$. The update of the estimate, ${\stackrel{^}{X}}_{i\mid i-1}$, from time $i$ to time $\left(i+1\right)$, is computed in two stages. First, the measurement-update is given by
 $X^i∣i=X^i∣i-1+KiYi-CiX^i∣i-1$ (1)
and
 $Pi∣i=I-KiCiPi∣i-1$ (2)
where ${K}_{i}={P}_{i\mid i-1}{C}_{i}^{\mathrm{T}}{\left[{C}_{i}{P}_{i\mid i-1}{C}_{i}^{\mathrm{T}}+{R}_{i}\right]}^{-1}$ is the Kalman gain matrix. The second stage is the time-update for $X$ which is given by
 $X^i+1∣i=AiX^i∣i+DiUi$ (3)
and
 $Pi+1∣i=AiPi∣i AiT +BiQi BiT$ (4)
where ${D}_{i}{U}_{i}$ represents any deterministic control used.
The square root covariance filter algorithm provides a stable method for computing the Kalman gain matrix and the state covariance matrix. The algorithm can be summarised as
 $Ri1/2 CiSi 0 0 AiSi BiQi1/2 U= Hi1/2 0 0 Gi Si+1 0$ (5)
where $U$ is an orthogonal transformation triangularizing the left-hand pre-array to produce the right-hand post-array. The relationship between the Kalman gain matrix, ${K}_{i}$, and ${G}_{i}$ is given by
 $AiKi=Gi Hi1/2 -1.$
G13EAF requires the input of the lower triangular Cholesky factors of the noise covariance matrices ${R}_{i}^{1/2}$ and, optionally, ${Q}_{i}^{1/2}$ and the lower triangular Cholesky factor of the current state covariance matrix, ${S}_{i}$, and returns the product of the matrices ${A}_{i}$ and ${K}_{i}$, ${A}_{i}{K}_{i}$, the Cholesky factor of the updated state covariance matrix ${S}_{i+1}$ and the matrix ${H}_{i}^{1/2}$ used in the computation of the likelihood for the model.

## 4  References

Vanbegin M, van Dooren P and Verhaegen M H G (1989) Algorithm 675: FORTRAN subroutines for computing the square root covariance filter and square root information filter in dense or Hessenberg forms ACM Trans. Math. Software 15 243–256
Verhaegen M H G and van Dooren P (1986) Numerical aspects of different Kalman filter implementations IEEE Trans. Auto. Contr. AC-31 907–917

## 5  Parameters

1:     N – INTEGERInput
On entry: $n$, the size of the state vector.
Constraint: ${\mathbf{N}}\ge 1$.
2:     M – INTEGERInput
On entry: $m$, the size of the observation vector.
Constraint: ${\mathbf{M}}\ge 1$.
3:     L – INTEGERInput
On entry: $l$, the dimension of the state noise.
Constraint: ${\mathbf{L}}\ge 1$.
4:     A(LDS,N) – REAL (KIND=nag_wp) arrayInput
On entry: the state transition matrix, ${A}_{i}$.
5:     LDS – INTEGERInput
On entry: the first dimension of the arrays A, B, S and K as declared in the (sub)program from which G13EAF is called.
Constraint: ${\mathbf{LDS}}\ge {\mathbf{N}}$.
6:     B(LDS,L) – REAL (KIND=nag_wp) arrayInput
On entry: the noise coefficient matrix ${B}_{i}$.
7:     STQ – LOGICALInput
On entry: if ${\mathbf{STQ}}=\mathrm{.TRUE.}$, the state noise covariance matrix ${Q}_{i}$ is assumed to be the identity matrix. Otherwise the lower triangular Cholesky factor, ${Q}_{i}^{1/2}$, must be provided in Q.
8:     Q(LDQ,$*$) – REAL (KIND=nag_wp) arrayInput
Note: the second dimension of the array Q must be at least ${\mathbf{L}}$ if ${\mathbf{STQ}}=\mathrm{.FALSE.}$ and at least $1$ if ${\mathbf{STQ}}=\mathrm{.TRUE.}$.
On entry: if ${\mathbf{STQ}}=\mathrm{.FALSE.}$, Q must contain the lower triangular Cholesky factor of the state noise covariance matrix, ${Q}_{i}^{1/2}$. Otherwise Q is not referenced.
9:     LDQ – INTEGERInput
On entry: the first dimension of the array Q as declared in the (sub)program from which G13EAF is called.
Constraints:
• if ${\mathbf{STQ}}=\mathrm{.FALSE.}$, ${\mathbf{LDQ}}\ge {\mathbf{L}}$;
• otherwise ${\mathbf{LDQ}}\ge 1$.
10:   C(LDM,N) – REAL (KIND=nag_wp) arrayInput
On entry: the measurement coefficient matrix, ${C}_{i}$.
11:   LDM – INTEGERInput
On entry: the first dimension of the arrays C, R and H as declared in the (sub)program from which G13EAF is called.
Constraint: ${\mathbf{LDM}}\ge {\mathbf{M}}$.
12:   R(LDM,M) – REAL (KIND=nag_wp) arrayInput
On entry: the lower triangular Cholesky factor of the measurement noise covariance matrix ${R}_{i}^{1/2}$.
13:   S(LDS,N) – REAL (KIND=nag_wp) arrayInput/Output
On entry: the lower triangular Cholesky factor of the state covariance matrix, ${S}_{i}$.
On exit: the lower triangular Cholesky factor of the state covariance matrix, ${S}_{i+1}$.
14:   K(LDS,M) – REAL (KIND=nag_wp) arrayOutput
On exit: the Kalman gain matrix, ${K}_{i}$, premultiplied by the state transition matrix, ${A}_{i}$, ${A}_{i}{K}_{i}$.
15:   H(LDM,M) – REAL (KIND=nag_wp) arrayOutput
On exit: the lower triangular matrix ${H}_{i}^{1/2}$.
16:   TOL – REAL (KIND=nag_wp)Input
On entry: the tolerance used to test for the singularity of ${H}_{i}^{1/2}$. If , then  is used instead. The inverse of the condition number of ${H}^{1/2}$ is estimated by a call to F07TGF (DTRCON). If this estimate is less than TOL then ${H}^{1/2}$ is assumed to be singular.
Suggested value: ${\mathbf{TOL}}=0.0$.
Constraint: ${\mathbf{TOL}}\ge 0.0$.
17:   IWK(M) – INTEGER arrayWorkspace
18:   WK($\left({\mathbf{N}}+{\mathbf{M}}\right)×\left({\mathbf{N}}+{\mathbf{M}}+{\mathbf{L}}\right)$) – REAL (KIND=nag_wp) arrayWorkspace
19:   IFAIL – INTEGERInput/Output
On entry: IFAIL must be set to $0$, $-1\text{​ or ​}1$. If you are unfamiliar with this parameter you should refer to Section 3.3 in the Essential Introduction for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value $-1\text{​ or ​}1$ is recommended. If the output of error messages is undesirable, then the value $1$ is recommended. Otherwise, if you are not familiar with this parameter, the recommended value is $0$. When the value $-\mathbf{1}\text{​ or ​}\mathbf{1}$ is used it is essential to test the value of IFAIL on exit.
On exit: ${\mathbf{IFAIL}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see Section 6).

## 6  Error Indicators and Warnings

If on entry ${\mathbf{IFAIL}}={\mathbf{0}}$ or $-{\mathbf{1}}$, explanatory error messages are output on the current error message unit (as defined by X04AAF).
Errors or warnings detected by the routine:
${\mathbf{IFAIL}}=1$
 On entry, ${\mathbf{N}}<1$, or ${\mathbf{M}}<1$, or ${\mathbf{L}}<1$, or ${\mathbf{LDS}}<{\mathbf{N}}$, or ${\mathbf{LDM}}<{\mathbf{M}}$, or ${\mathbf{STQ}}=\mathrm{.TRUE.}$ and ${\mathbf{LDQ}}<1$, or ${\mathbf{STQ}}=\mathrm{.FALSE.}$ and ${\mathbf{LDQ}}<{\mathbf{L}}$, or ${\mathbf{TOL}}<0.0$.
${\mathbf{IFAIL}}=2$
The matrix ${H}_{i}^{1/2}$ is singular.

## 7  Accuracy

The use of the square root algorithm improves the stability of the computations as compared with the direct coding of the Kalman filter. The accuracy will depend on the model.

For models with time-invariant $A,B$ and $C$, G13EBF can be used.
The estimate of the state vector ${\stackrel{^}{X}}_{i+1\mid i}$ can be computed from ${\stackrel{^}{X}}_{i\mid i-1}$ by
 $X^i+1∣i=AiX^i∣i-1+AKiri$
where
 $ri=Yi-CiX^i∣i- 1$
are the independent one step prediction residuals. The required matrix-vector multiplications can be performed by F06PAF (DGEMV).
If ${W}_{i}$ and ${V}_{i}$ are independent multivariate Normal variates then the log-likelihood for observations $i=1,2,\dots ,t$ is given by
 $lθ = κ - 12 ∑ i=1 t l n detHi - 12 ∑ i=1 t Yi - Ci X i∣i-1 T H i -1 Yi - Ci X i∣i-1$
where $\kappa$ is a constant.
The Cholesky factors of the covariance matrices can be computed using F07FDF (DPOTRF).
Note that the model
 $Xi+1=AiXi+Wi, VarWi=Qi Yi=CiXi+Vi, VarVi=Ri$
can be specified either with B set to the identity matrix and ${\mathbf{STQ}}=\mathrm{.FALSE.}$ and the matrix ${Q}^{1/2}$ input in Q or with ${\mathbf{STQ}}=\mathrm{.TRUE.}$ and B set to ${Q}^{1/2}$.
The algorithm requires $\frac{7}{6}{n}^{3}+{n}^{2}\left(\frac{5}{2}m+l\right)+n\left(\frac{1}{2}{l}^{2}+{m}^{2}\right)$ operations and is backward stable (see Verhaegen and van Dooren (1986)).

## 9  Example

This example first inputs the number of updates to be computed and the problem sizes. The initial state vector and state covariance matrix are input followed by the model matrices ${A}_{i},{B}_{i},{C}_{i},{R}_{i}$ and optionally ${Q}_{i}$. The Cholesky factors of the covariance matrices can be computed if required. The model matrices can be input at each update or only once at the first step. At each update the observed values are input and the residuals are computed and printed and the estimate of the state vector, ${\stackrel{^}{X}}_{i\mid i-1}$, and the deviance are updated. The deviance is $-2×\text{}$log-likelihood ignoring the constant. After the final update the state covariance matrix is computed from S and printed along with final estimate of the state vector and the value of the deviance.
The data is for a two-dimensional time series to which a VARMA$\left(1,1\right)$ has been fitted. For the specification of a VARMA model as a state space model see the G13 Chapter Introduction. The initial value of $P$, ${P}_{0}$, is the solution to
 $P0=A1P0 A1T +B1Q1 B1T .$
For convenience, the mean of each series is input before the first update and subtracted from the observations before the measurement update is computed.

### 9.1  Program Text

Program Text (g13eafe.f90)

### 9.2  Program Data

Program Data (g13eafe.d)

### 9.3  Program Results

Program Results (g13eafe.r)