Previous Next

Symmetric Block Tridiagonal Algorithm

Syntax
[elambda] = ckbs_tridiag_solve(bcr)

Purpose
This routine solves the following linear system of equations for  e :  \[
     A * e = r
\] 
where the symmetric block tridiagonal matrix  A is defined by  \[
A =
\left( \begin{array}{ccccc}
b_1    & c_2^\T & 0       & \cdots & 0      \\
c_2    & b_2    & c_3^\T  &        & \vdots \\
\vdots &        & \ddots  &        &        \\
0      & \cdots &         & b_N    & c_N
\end{array} \right)
\] 


b
The argument b is a three dimensional array, for  k = 1 , \ldots , N  \[
     b_k = b(:,:,k)
\]
and b has size  n \times n \times N .

c
The argument c is a three dimensional array, for  k = 2 , \ldots , N  \[
     c_k = c(:,:,k)
\]
and c has size  n \times n \times N .

r
The argument r is an  (n * N) \times m matrix.

e
The result e is an  (n * N) \times m matrix.

lambda
The result lambda is a scalar equal to the logarithm of the determinant of  A .

Reference
The marginal likelihood for parameters in a discrete Gauss Markov process
, Bradley M. Bell, IEEE Transactions on Signal Processing, Vol. 48, No. 3, March 2000.

Lemma
The following result is proven as Lemma 6 of the reference above: Suppose that for  k = 1 , \ldots , N  \[
\begin{array}{rcl}
     b_k & = & u_k + q_{k-1}^{-1} + a_k * q_k^{-1} * a_k^\T  \\
     c_k & = & q_{k-1}^{-1} * a_k^\T
\end{array}
\] 
where  u_k is symmetric positive semi-definite and  q_k is symmetric positive definite. It follows that the algorithm used by ckbs_tridiag_solve is well conditioned and will not try to invert singular matrices.

Example
The file tridiag_solve_ok.m contains an example and test of ckbs_tridiag_solve. It returns true if ckbs_tridiag_solve passes the test and false otherwise.
Input File: src/ckbs_tridiag_solve.m