EigenOperations

Trait EigenOperations 

Source
pub trait EigenOperations {
    // Required methods
    fn eigen_decomposition(&self) -> Option<EigenDecomposition>;
    fn complex_eigen_decomposition(&self) -> Option<ComplexEigenDecomposition>;
    fn eigenvalues(&self) -> Vec<Expression>;
    fn characteristic_polynomial(&self) -> CharacteristicPolynomial;
    fn trace(&self) -> Expression;
    fn determinant_via_eigenvalues(&self) -> Expression;
    fn is_diagonalizable(&self) -> bool;
    fn matrix_power_eigen(&self, n: i64) -> Option<Matrix>;
    fn matrix_exponential(&self) -> Option<Matrix>;
    fn matrix_logarithm(&self) -> Option<Matrix>;
    fn matrix_sqrt(&self) -> Option<Matrix>;
    fn is_nilpotent(&self) -> bool;
}
Expand description

Eigenvalue and eigenvector operations trait

This trait provides a unified interface for all eigenvalue-related computations. Methods return Options to handle cases where computation is not possible.

Required Methods§

Source

fn eigen_decomposition(&self) -> Option<EigenDecomposition>

Compute eigenvalues and eigenvectors

Returns eigenvalues and corresponding eigenvectors for real matrices. For matrices with complex eigenvalues, use complex_eigen_decomposition.

§Examples
use mathhook_core::matrices::Matrix;
use mathhook_core::matrices::eigenvalues::EigenOperations;
use mathhook_core::Expression;

let matrix = Matrix::diagonal(vec![
    Expression::integer(2),
    Expression::integer(3)
]);

let eigen = matrix.eigen_decomposition().unwrap();
assert_eq!(eigen.eigenvalues.len(), 2);
Source

fn complex_eigen_decomposition(&self) -> Option<ComplexEigenDecomposition>

Compute complex eigenvalues and eigenvectors

Handles matrices that may have complex eigenvalues and eigenvectors.

Source

fn eigenvalues(&self) -> Vec<Expression>

Compute only eigenvalues (faster than full decomposition)

§Examples
use mathhook_core::matrices::Matrix;
use mathhook_core::matrices::eigenvalues::EigenOperations;
use mathhook_core::Expression;

let matrix = Matrix::diagonal(vec![
    Expression::integer(2),
    Expression::integer(3)
]);

let eigenvalues = matrix.eigenvalues();
assert_eq!(eigenvalues.len(), 2);
assert_eq!(eigenvalues[0], Expression::integer(2));
assert_eq!(eigenvalues[1], Expression::integer(3));
Source

fn characteristic_polynomial(&self) -> CharacteristicPolynomial

Compute characteristic polynomial det(A - λI)

§Examples
use mathhook_core::matrices::Matrix;
use mathhook_core::matrices::eigenvalues::EigenOperations;
use mathhook_core::Expression;

let matrix = Matrix::diagonal(vec![
    Expression::integer(2),
    Expression::integer(3)
]);

let poly = matrix.characteristic_polynomial();
assert_eq!(poly.degree(), 2);
Source

fn trace(&self) -> Expression

Get the trace (sum of eigenvalues)

Source

fn determinant_via_eigenvalues(&self) -> Expression

Get the determinant (product of eigenvalues)

Source

fn is_diagonalizable(&self) -> bool

Check if matrix is diagonalizable

Source

fn matrix_power_eigen(&self, n: i64) -> Option<Matrix>

Compute matrix power using eigendecomposition

For diagonalizable matrices, computes A^n = P D^n P^(-1)

§Examples
use mathhook_core::matrices::Matrix;
use mathhook_core::matrices::eigenvalues::EigenOperations;
use mathhook_core::Expression;

let matrix = Matrix::diagonal(vec![
    Expression::integer(2),
    Expression::integer(3)
]);

let power = matrix.matrix_power_eigen(3).unwrap();
// Returns diag([8, 27])
Source

fn matrix_exponential(&self) -> Option<Matrix>

Compute matrix exponential using eigendecomposition

Source

fn matrix_logarithm(&self) -> Option<Matrix>

Compute matrix logarithm using eigendecomposition

Source

fn matrix_sqrt(&self) -> Option<Matrix>

Compute matrix square root using eigendecomposition

Source

fn is_nilpotent(&self) -> bool

Check if matrix is nilpotent

Implementors§

Source§

impl EigenOperations for Matrix

Implementation of EigenOperations trait for Matrix