pub fn eigh<F>(a: &ArrayView2<'_, F>) -> LinalgResult<(Array1<F>, Array2<F>)>
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);
}
}