use la_stack::prelude::*;
fn main() -> Result<(), LaError> {
let a = Matrix::<3>::from_rows([[4.0, -1.0, 0.0], [-1.0, 4.0, -1.0], [0.0, -1.0, 4.0]]);
let b = Vector::<3>::new([2.0, 4.0, 10.0]);
let ldlt = a.ldlt(DEFAULT_SINGULAR_TOL)?;
let x = ldlt.solve_vec(b)?.into_array();
let det = ldlt.det();
println!("A (3×3 SPD tridiagonal):");
for r in 0..3 {
print!(" [");
for c in 0..3 {
if c > 0 {
print!(", ");
}
print!("{:5.1}", a.get(r, c).unwrap());
}
println!("]");
}
println!(
"b = [{}, {}, {}]",
b.as_array()[0],
b.as_array()[1],
b.as_array()[2]
);
println!();
println!("x = [{:.6}, {:.6}, {:.6}]", x[0], x[1], x[2]);
println!("det = {det}");
Ok(())
}