A division-free determinant algorithm #
This file defines birdDetand Spec.birdDet, implementations of an
division-free algorithm for computing determinants. The algorithm runs in O(n^4)
for an n-by-n matrix.
This determinant algorithm comes from [Richard S. Bird, A simple division-free algorithm for computing determinants][bird2011].
Main definitions #
BirdDet.birdDet: The entrypoint for the determinant calculation.BirdDet.get: matrix entry lookup.BirdDet.sumFrom: The sumf lo + ... + f (n - 1).BirdDet.stepEntry: One scalar recurrence step.BirdDet.Spec.birdDet: An implementation of Bird's algorithm usingMatrix.
Main lemmas #
The lemmas in this file are unfolding equations.
One entry of one scalar Bird recurrence step.
Bird's paper defines a matrix recursion for an n × n matrix A:
F_0 = A
F_{t+1} = μ(F_t) * A
where μ(F_t) is obtained from F_t by replacing each diagonal entry
F_t k k with the negative sum of the diagonal entries below it, setting the
entries in the lower triangular part to 0, and leaving all other entries
unchanged:
μ(F_t) =
0 if i >= j
- ∑ k from i+1 to n-1, F_t k k if i = j
F_t i j if i < j
If we write out the entry-wise matrix multiplication F_{t+1} i j = (μ(F_t) * A) i j
we obtain:
F_{t+1} i j =
- (∑ k from i+1 to n-1, F_t k k) * (A i j)
+ ∑ k from i+1 to n-1, (F_t i k) * (A k j)
Instances For
Unfold one scalar Bird recurrence step to the entry-wise formula.