= Solution
An <inverse matrix> exists only if the <lower triangular matrix> has no zero <diagonal entries>; this necessary assumption is implicit in the request for $L^{-1}$. Partition
$$
L=\begin{pmatrix}a&0\\b&C\end{pmatrix}.
$$
Writing its inverse in the same block form and multiplying gives the <recursive inverse of a lower triangular matrix>:
$$
\boxed{L^{-1}=\begin{pmatrix}a^{-1}&0\\-C^{-1}b/a&C^{-1}\end{pmatrix}.}
$$
Indeed the lower-left block of the product is $b/a-C(C^{-1}b/a)=0$, and the diagonal blocks are identities. This gives an implementation with no call to `solve`:
``
ltinv <- function(L) {
n <- nrow(L)
if (n == 1L) return(matrix(1 / L[1L, 1L], 1L, 1L))
j <- 2L:n
Cinv <- ltinv(L[j, j, drop = FALSE])
B <- matrix(0, n, n)
B[1L, 1L] <- 1 / L[1L, 1L]
B[j, j] <- Cinv
B[j, 1L] <- -as.vector(Cinv %*% L[j, 1L, drop = FALSE]) / L[1L, 1L]
B
}
``
The preserved <matrix> dimensions also handle $n=2$. A <mathematical induction> using the block identity proves that every returned <matrix> is the desired inverse. Applied to the <Cholesky decomposition> from (a), all <diagonal entries> are positive, so all divisions are valid.
Back to article page