From 1d64d616093d777515e59faeaf8f0daccf58a781 Mon Sep 17 00:00:00 2001 From: Paul Jakob Schroeder Date: Mon, 20 Feb 2023 12:49:24 -0500 Subject: [PATCH] Remove special subdim=2 case from SymmetricEigen --- src/linalg/symmetric_eigen.rs | 44 ++--------------------------------- 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/src/linalg/symmetric_eigen.rs b/src/linalg/symmetric_eigen.rs index cb660ea96..df2a411e9 100644 --- a/src/linalg/symmetric_eigen.rs +++ b/src/linalg/symmetric_eigen.rs @@ -5,7 +5,7 @@ use approx::AbsDiffEq; use num::Zero; use crate::allocator::Allocator; -use crate::base::{DefaultAllocator, Matrix2, OMatrix, OVector, SquareMatrix, Vector2}; +use crate::base::{DefaultAllocator, OMatrix, OVector, SquareMatrix, Vector2}; use crate::dimension::{Dim, DimDiff, DimSub, U1}; use crate::storage::Storage; use simba::scalar::ComplexField; @@ -131,10 +131,7 @@ where Self::delimit_subproblem(&diag, &mut off_diag, dim - 1, eps.clone()); while end != start { - let subdim = end - start + 1; - - #[allow(clippy::comparison_chain)] - if subdim > 2 { + { let m = end - 1; let n = end; @@ -191,43 +188,6 @@ where { end -= 1; } - } else if subdim == 2 { - let m = Matrix2::new( - diag[start].clone(), - off_diag[start].clone().conjugate(), - off_diag[start].clone(), - diag[start + 1].clone(), - ); - let eigvals = m.eigenvalues().unwrap(); - - // A = [ a c ] - // [ c b ] - // v = [ v1; v2 ] - // (A-lI)v = 0 - // (a-l1)v1 + c*v2 = 0 - // - // let v1 = c - // (a-l1)c + c*v2 = 0 - // (a-l1)c = -c*v2 - // v2 = l1 - a - let basis = Vector2::new( - off_diag[start].clone(), - eigvals.x.clone() - diag[start].clone(), - ); - - diag[start] = eigvals[0].clone(); - diag[start + 1] = eigvals[1].clone(); - - if let Some(ref mut q) = q_mat { - if let Some((rot, _)) = - GivensRotation::try_new(basis.x.clone(), basis.y.clone(), eps.clone()) - { - let rot = GivensRotation::new_unchecked(rot.c(), T::from_real(rot.s())); - rot.rotate_rows(&mut q.fixed_columns_mut::<2>(start)); - } - } - - end -= 1; } // Re-delimit the subproblem in case some decoupling occurred.