faer 0.20.2

Linear algebra routines
Documentation
use faer::{assert_matrix_eq, mat, Mat};

fn main() {
    #[cfg(feature = "svd")]
    {
        let matrix = mat![
            [-0.29945184, -0.5228196],
            [0.84136125, -1.15768694],
            [1.25678304, -0.46203532]
        ];

        let m = matrix.nrows();
        let n = matrix.ncols();
        let svd = matrix.svd();

        let s_diag = svd.s_diagonal();
        let mut s_inv = Mat::zeros(n, m);
        for i in 0..Ord::min(m, n) {
            s_inv[(i, i)] = 1.0 / s_diag[i];
        }

        let pseudoinv = svd.v() * &s_inv * svd.u().adjoint();

        assert_matrix_eq!(
            &pseudoinv * &matrix,
            Mat::identity(2, 2),
            comp = abs,
            tol = 1e-10
        );
    }
}