![]() |
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.