use rustebra::algorithm::matrix::{svd, svd_qr_iteration};
use rustebra::storage::StaticStorage;
pub(crate) fn run() {
println!("\n== Singular Value Decomposition (SVD) ==");
let a = StaticStorage::new([2.0, 0.0, 0.0, 1.0]);
let mut scratch = [0.0; 5 * 2 * 2 + 2 + 2];
let mut u = [0.0; 4];
let mut sigma = [0.0; 2];
let mut v = [0.0; 4];
svd(&a, 2, 2, &mut u, &mut sigma, &mut v, &mut scratch).unwrap();
println!("sigma = {sigma:?}, u = {u:?}, v = {v:?}");
let mut sigma_explicit = [0.0; 2];
svd_qr_iteration(
&a,
2,
2,
&mut u,
&mut sigma_explicit,
&mut v,
&mut scratch,
1e-9,
)
.unwrap();
println!("sigma (explicit QR iteration) = {sigma_explicit:?}");
}