Function russell_lab::cholesky_factor[][src]

pub fn cholesky_factor(l: &mut Matrix, a: &Matrix) -> Result<(), &'static str>
Expand description

Performs the Cholesky factorization of a symmetric positive-definite matrix

Finds l such that:

a = l⋅lᵀ

where l is a lower-triangular matrix

Examples

// import
use russell_lab::*;

// set matrix
let a = Matrix::from(&[
    &[  4.0,  12.0, -16.0],
    &[ 12.0,  37.0, -43.0],
    &[-16.0, -43.0,  98.0],
])?;

// perform factorization
let m = a.nrow();
let mut l = Matrix::new(m, m);
cholesky_factor(&mut l, &a)?;

// compare with solution
let l_correct = "┌          ┐\n\
                 │  2  0  0 │\n\
                 │  6  1  0 │\n\
                 │ -8  5  3 │\n\
                 └          ┘";
assert_eq!(format!("{}", l), l_correct);

// check if l⋅lᵀ == a
let mut l_lt = Matrix::new(m, m);
for i in 0..m {
    for j in 0..m {
        for k in 0..m {
            l_lt.plus_equal(i, j, l.get(i, k) * l.get(j, k));
        }
    }
}
let l_lt_correct = "┌             ┐\n\
                    │   4  12 -16 │\n\
                    │  12  37 -43 │\n\
                    │ -16 -43  98 │\n\
                    └             ┘";
assert_eq!(format!("{}", l), l_correct);