Add another case for when eigenvalues should be mapped to zero. Make method private
This commit is contained in:
parent
e52f11700f
commit
5e10ca46cb
|
@ -253,17 +253,21 @@ where
|
||||||
(l, r)
|
(l, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// computes the generalized eigenvalues i.e values of lambda that satisfy the following equation
|
// only used for internal calculation for assembling eigenvectors based on realness of
|
||||||
/// determinant(A - lambda* B) = 0
|
// eigenvalues and complex-conjugate checks of subsequent non-real eigenvalues
|
||||||
#[must_use]
|
fn eigenvalues(&self) -> OVector<Complex<T>, D>
|
||||||
pub fn eigenvalues(&self) -> OVector<Complex<T>, D>
|
|
||||||
where
|
where
|
||||||
DefaultAllocator: Allocator<Complex<T>, D>,
|
DefaultAllocator: Allocator<Complex<T>, D>,
|
||||||
{
|
{
|
||||||
let mut out = Matrix::zeros_generic(self.vsl.shape_generic().0, Const::<1>);
|
let mut out = Matrix::zeros_generic(self.vsl.shape_generic().0, Const::<1>);
|
||||||
|
|
||||||
|
let epsilon = T::RealField::default_epsilon();
|
||||||
|
|
||||||
for i in 0..out.len() {
|
for i in 0..out.len() {
|
||||||
out[i] = if self.beta[i].clone().abs() < T::RealField::default_epsilon() {
|
out[i] = if self.beta[i].clone().abs() < epsilon
|
||||||
|
|| (self.alphai[i].clone().abs() < epsilon
|
||||||
|
&& self.alphar[i].clone().abs() < epsilon)
|
||||||
|
{
|
||||||
Complex::zero()
|
Complex::zero()
|
||||||
} else {
|
} else {
|
||||||
Complex::new(self.alphar[i].clone(), self.alphai[i].clone())
|
Complex::new(self.alphar[i].clone(), self.alphai[i].clone())
|
||||||
|
|
Loading…
Reference in New Issue