//! methods for 2x2 matrix
pub fn polar_decomposition<T>(
m: &nalgebra::Matrix2<T>,
) -> (nalgebra::Matrix2<T>, nalgebra::Matrix2<T>)
where
T: nalgebra::RealField + Copy,
{
let x = m[(0, 0)] + m[(1, 1)];
let y = m[(1, 0)] - m[(0, 1)];
let scale = T::one() / (x * x + y * y).sqrt();
let c = x * scale;
let s = y * scale;
let u_mat = nalgebra::Matrix2::<T>::new(c, -s, s, c);
let p_mat = u_mat * m;
(u_mat, p_mat)
}