fn main() {
let n = 4;
let a_colptr = vec![0, 1, 3, 6, 8];
let a_rowidx = vec![0, 1, 2, 1, 2, 3, 2, 3];
let a_values = vec![10.0, 2.0, 20.0, 3.0, 30.0, 4.0, 5.0, 40.0];
let b = vec![10.0, 40.0, 90.0, 160.0];
let (p, searches, rp_inv) = {
let mut founds = Vec::with_capacity(n);
let mut rp_inv = vec![0; n];
let (l_mat, u_mat, rp) = rlu::lu_decomposition::<usize, f64, usize>(
n,
&a_rowidx,
&a_colptr,
&a_values,
None,
Some(&mut founds),
Some(&mut rp_inv),
true,
);
let mut x = vec![0.0; n];
for i in 0..n {
x[rp[i].unwrap()] = b[i];
}
rlu::lsolve(&l_mat, &mut x);
rlu::usolve(&u_mat, &mut x);
println!("X = {:?}", x);
(rp, founds, rp_inv)
};
println!("FOUND = {:?}", searches);
{
let (l_mat, u_mat) = rlu::lu_redecomposition::<usize, f64, usize>(
n,
&a_rowidx,
&a_colptr,
&a_values,
&searches,
Some(&rp_inv),
None,
true,
);
let mut x = vec![0.0; n];
for i in 0..n {
x[p[i].unwrap()] = b[i];
}
rlu::lsolve(&l_mat, &mut x);
rlu::usolve(&u_mat, &mut x);
println!("X2 = {:?}", x);
}
}