pub fn qr( matrix: &ArrayView2<'_, f64>, ) -> Result<(Array2<f64>, Array2<f64>), String>
Real QR decomposition via modified Gram-Schmidt orthogonalization. Works for any MxN matrix (not just 2x2).