Function eigh

Source
pub fn eigh<F>(a: &ArrayView2<'_, F>) -> LinalgResult<(Array1<F>, Array2<F>)>
where F: Float + NumAssign + 'static,
Expand description

Computes the eigenvalues and eigenvectors of a symmetric matrix.

This specialized function is much faster than the general eigenvalue decomposition for symmetric matrices. This implementation uses a pure Rust algorithm. Future versions will use native LAPACK for better performance with large matrices.

§Arguments

  • a - Input symmetric matrix

§Returns

  • Eigenvalue decomposition as (eigenvalues, eigenvectors) where:
    • eigenvalues is a vector of real eigenvalues
    • eigenvectors is a matrix whose columns are the eigenvectors

§Examples

use ndarray::array;
use scirs2_linalg::lapack_accelerated::eigh;

let a = array![[1.0_f64, 2.0], [2.0, 4.0]];
let (eigenvalues, eigenvectors) = eigh(&a.view()).unwrap();

// Check that A*v = lambda*v for each eigenvector
for i in 0..eigenvalues.len() {
    let v = eigenvectors.column(i).to_owned();
    let av = a.dot(&v);
    let lambda_v = &v * eigenvalues[i];
    for j in 0..v.len() {
        assert!((av[j] - lambda_v[j]).abs() < 1e-10);
    }
}