#[non_exhaustive]
pub struct EigWork<T: Scalar> { pub n: i32, pub jobvr: JobEv, pub jobvl: JobEv, pub eigs: Vec<MaybeUninit<T::Complex>>, pub eigs_re: Option<Vec<MaybeUninit<T::Real>>>, pub eigs_im: Option<Vec<MaybeUninit<T::Real>>>, pub vc_l: Option<Vec<MaybeUninit<T::Complex>>>, pub vr_l: Option<Vec<MaybeUninit<T::Real>>>, pub vc_r: Option<Vec<MaybeUninit<T::Complex>>>, pub vr_r: Option<Vec<MaybeUninit<T::Real>>>, pub work: Vec<MaybeUninit<T>>, pub rwork: Option<Vec<MaybeUninit<T::Real>>>, }
Expand description

Eigenvalue problem for general matrix

To manage memory more strictly, use EigWork.

Right and Left eigenvalue problem

LAPACK can solve both right eigenvalue problem $$ AV_R = V_R \Lambda $$ where $V_R = \left( v_R^1, \cdots, v_R^n \right)$ are right eigenvectors and left eigenvalue problem $$ V_L^\dagger A = V_L^\dagger \Lambda $$ where $V_L = \left( v_L^1, \cdots, v_L^n \right)$ are left eigenvectors and eigenvalues $$ \Lambda = \begin{pmatrix} \lambda_1 & & 0 \\ & \ddots & \\ 0 & & \lambda_n \end{pmatrix} $$ which satisfies $A v_R^i = \lambda_i v_R^i$ and $\left(v_L^i\right)^\dagger A = \lambda_i \left(v_L^i\right)^\dagger$ for column-major matrices, although row-major matrices are not supported. Since a row-major matrix can be interpreted as a transpose of a column-major matrix, this transforms right eigenvalue problem to left one:

$$ A^\dagger V = V Λ ⟺ V^\dagger A = Λ V^\dagger $$

Fields (Non-exhaustive)

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
n: i32

Problem size

jobvr: JobEv

Compute right eigenvectors or not

jobvl: JobEv

Compute left eigenvectors or not

eigs: Vec<MaybeUninit<T::Complex>>

Eigenvalues

eigs_re: Option<Vec<MaybeUninit<T::Real>>>

Real part of eigenvalues used in real routines

eigs_im: Option<Vec<MaybeUninit<T::Real>>>

Imaginary part of eigenvalues used in real routines

vc_l: Option<Vec<MaybeUninit<T::Complex>>>

Left eigenvectors

vr_l: Option<Vec<MaybeUninit<T::Real>>>

Left eigenvectors used in real routines

vc_r: Option<Vec<MaybeUninit<T::Complex>>>

Right eigenvectors

vr_r: Option<Vec<MaybeUninit<T::Real>>>

Right eigenvectors used in real routines

work: Vec<MaybeUninit<T>>

Working memory

rwork: Option<Vec<MaybeUninit<T::Real>>>

Working memory with T::Real

Implementations

Create new working memory for eigenvalues compution.

Compute eigenvalues and vectors on this working memory.

Compute eigenvalues and vectors by consuming this working memory.

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.