|   | Previous | Next | 
[e, lambda] = ckbs_tridiag_solve(b, c, r)
 e
:
 \[
      A * e = r
\] 
where the symmetric block tridiagonal matrix 
 A
 is defined by
 \[
A =
\left( \begin{array}{ccccc}
b_1    & c_2^\R{T} & 0          & \cdots & 0      \\
c_2    & b_2       & c_3^\R{T}  &        & \vdots \\
\vdots &           & \ddots     &        &        \\
0      & \cdots    &            & b_N    & c_N
\end{array} \right)
\] 
The routine ckbs_tridiag_solve_b
 solves the same problem.
The difference is that this routine runs the reduction starting
at the first block rather than the last block of the matrix,
which is less stable for this application.
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
 is a three dimensional array,
for 
 k = 2 , \ldots , N
 \[
      c_k = c(:,:,k)
\]
and 
c
 has size 
 n \times n \times N
.
r
 is an 
 (n * N) \times m
 matrix.
e
 is an 
 (n * N) \times m
 matrix.
lambda
 is a scalar equal to the
logarithm of the determinant of 
 A
.
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.
 k = 1 , \ldots , N
 \[
\begin{array}{rcl}
      b_k & = & u_k + q_{k-1}^{-1} + a_k * q_k^{-1} * a_k^\R{T}  \\
      c_k & = & q_{k-1}^{-1} * a_k^\R{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.
ckbs_tridiag_solve.
It returns true if ckbs_tridiag_solve passes the test
and false otherwise.