This package provides support for the Woodbury matrix identity for the Julia programming language. This is a generalization of the Sherman-Morrison formula. Note that the Woodbury matrix identity is notorious for floating-point roundoff errors, so be prepared for a certain amount of inaccuracy in the result.
using WoodburyMatrices W = Woodbury(A, U, C, V)
Woodbury matrix from the
V matrices representing
A + U*C*V. These matrices can be dense or sparse (or generally any type of
AbstractMatrix), with the caveat that
inv(inv(C) + V*(A\U)) will be calculated explicitly and hence needs to be representable with the available resources.
(In many applications, this is a fairly small matrix.)
There are only a few things you can do with a Woodbury matrix:
full(W)converts to its dense representation.
W\bsolves the equation
W*x = bfor
det(W)computes the determinant of
It's worth emphasizing that
A can be supplied as a factorization, which makes
det(W) more efficient.
using WoodburyMatrices W = SymWoodbury(A, B, D)
SymWoodbury matrix, a symmetric version of a Woodbury matrix representing
A + B*D*B'. In addition to the features above,
SymWoodbury also supports various operations which are closed under this type. They are
W1 + W2.
- Multiplication by a scalar
A slightly more stable, though computationally more costly version of inversion is given by
liftFactor(W)(x) can be seen as a stabler version of