Skip to main content

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

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl EigenOperations for Matrix

Implementation of EigenOperations trait for Matrix