use mdarray::{DTensor, tensor};
use mdarray_linalg::prelude::*; use mdarray_linalg::eig::EigDecomp;
use mdarray_linalg::svd::SVDDecomp;
use mdarray_linalg_lapack::Lapack;
use mdarray_linalg_lapack::SVDConfig;
let a = tensor![[1., 2.], [3., 4.]];
let bd = Lapack::new(); let EigDecomp {
eigenvalues,
right_eigenvectors,
..
} = bd.eig(&mut a.clone()).expect("Eigenvalue decomposition failed");
println!("Eigenvalues: {:?}", eigenvalues);
if let Some(vectors) = right_eigenvectors {
println!("Right eigenvectors: {:?}", vectors);
}
let bd = Lapack::new().config_svd(SVDConfig::DivideConquer);
let SVDDecomp { s, u, vt } = bd.svd(&mut a.clone()).expect("SVD failed");
println!("Singular values: {:?}", s);
println!("Left singular vectors U: {:?}", u);
println!("Right singular vectors V^T: {:?}", vt);
let (m, n) = *a.shape();
let mut q = DTensor::<f64, 2>::zeros([m, m]);
let mut r = DTensor::<f64, 2>::zeros([m, n]);
let bd = Lapack::new();
bd.qr_overwrite(&mut a.clone(), &mut q, &mut r); println!("Q: {:?}", q);
println!("R: {:?}", r);