use la_stack::prelude::*;
fn main() -> Result<(), LaError> {
let a = Matrix::<3>::try_from_rows([[4.0, -1.0, 0.0], [-1.0, 4.0, -1.0], [0.0, -1.0, 4.0]])?;
let b = Vector::<3>::try_new([2.0, 4.0, 10.0])?;
let ldlt = a.ldlt(DEFAULT_SINGULAR_TOL)?;
let x = ldlt.solve(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_checked(r, c)?);
}
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(())
}