fn svd(&self) -> SVD<Matrix> {
        match () {
            #[cfg(feature = "O3")]
            () => {
                let opt_dgesvd = lapack_dgesvd(self);
                match opt_dgesvd {
                    None => panic!("Illegal value in LAPACK SVD"),
                    Some(dgesvd) => match dgesvd.status {
                        SVD_STATUS::Diverge(i) => {
                            panic!("Divergent occurs in SVD - {} iterations", i)
                        }
                        SVD_STATUS::Success => SVD {
                            s: dgesvd.s,
                            u: dgesvd.u,
                            vt: dgesvd.vt,
                        },
                    },
                }
            }
            _ => {
                unimplemented!()
            }
        }
    }
Singular Value Decomposition

# Examples
```
use peroxide::fuga::*;

let a = ml_matrix("3 2 2;2 3 -2");
#[cfg(feature="O3")]
{
let svd = a.svd();
assert!(eq_vec(&vec![5f64, 3f64], &svd.s, 1e-7));
}
a.print();
```
src/structure/matrix.rs