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);