Expand description
Eigenvalue, eigenvector, and Schur decomposition utilities for general and self-adjoint matrices
ⓘ
use mdarray_linalg::prelude::*;
use mdarray_linalg_backend::Backend;
// ----- Eigenvalue decomposition -----
// Note: we must clone `a` here because decomposition routines destroy the input.
let bd = Backend::default();
let EigDecomp { eigenvalues, right_eigenvectors, .. } = bd
.eig(&mut a.clone())
.expect("Eigenvalue decomposition failed");
// Or...
let EigDecomp { eigenvalues: lambda, right_eigenvectors: Some(v), .. } = bd
.eig(&mut a.clone())
.expect("Eigenvalue decomposition failed");
// Full decomposition with left and right eigenvectors.
let EigDecomp { eigenvalues, left_eigenvectors, right_eigenvectors } = bd
.eig_full(&mut a.clone())
.expect("Full eigenvalue decomposition failed");
let left = left_eigenvectors.expect("Left eigenvectors were not computed");
let right = right_eigenvectors.expect("Right eigenvectors were not computed");
// ----- Schur decomposition -----
// A = Z * T * Z^H, with `Z^H` reducing to `Z^T` for real Schur decompositions.
let SchurDecomp { t, z } = bd
.schur(&mut a.clone())
.expect("Schur decomposition failed");
// Reconstruct A from the decomposition with the conjugate transpose Z^H:
// A ≈ Z * T * Z^HStructs§
- EigDecomp
- Holds the results of a general eigenvalue decomposition.
- Eigh
Decomp - Holds the results of a self-adjoint eigenvalue decomposition.
- Schur
Decomp - Holds the results of a Schur decomposition: A = Z * T * Z^H where Z is unitary and T is upper-triangular (complex) or quasi-upper triangular (real)
Enums§
- EigError
- Error types related to eigenvalue decomposition
- Schur
Error - Error types related to Schur decomposition
Traits§
- Eig
- Eigenvalue decomposition operations of general and self-adjoint matrices.