![]() |
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^\T & 0 & \cdots & 0 \\
c_2 & b_2 & c_3^\T & & \vdots \\
\vdots & & \ddots & & \\
0 & \cdots & & b_N & c_N
\end{array} \right)
\]
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
.
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.
ckbs_tridiag_solve
.
It returns true if ckbs_tridiag_solve
passes the test
and false otherwise.