Skip to main content

Module eig

Module eig 

Source
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^H

Structs§

EigDecomp
Holds the results of a general eigenvalue decomposition.
EighDecomp
Holds the results of a self-adjoint eigenvalue decomposition.
SchurDecomp
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
SchurError
Error types related to Schur decomposition

Traits§

Eig
Eigenvalue decomposition operations of general and self-adjoint matrices.