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§
Sourcefn eigen_decomposition(&self) -> Option<EigenDecomposition>
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);Sourcefn complex_eigen_decomposition(&self) -> Option<ComplexEigenDecomposition>
fn complex_eigen_decomposition(&self) -> Option<ComplexEigenDecomposition>
Compute complex eigenvalues and eigenvectors
Handles matrices that may have complex eigenvalues and eigenvectors.
Sourcefn eigenvalues(&self) -> Vec<Expression>
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));Sourcefn characteristic_polynomial(&self) -> CharacteristicPolynomial
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);Sourcefn trace(&self) -> Expression
fn trace(&self) -> Expression
Get the trace (sum of eigenvalues)
Sourcefn determinant_via_eigenvalues(&self) -> Expression
fn determinant_via_eigenvalues(&self) -> Expression
Get the determinant (product of eigenvalues)
Sourcefn is_diagonalizable(&self) -> bool
fn is_diagonalizable(&self) -> bool
Check if matrix is diagonalizable
Sourcefn matrix_power_eigen(&self, n: i64) -> Option<Matrix>
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])Sourcefn matrix_exponential(&self) -> Option<Matrix>
fn matrix_exponential(&self) -> Option<Matrix>
Compute matrix exponential using eigendecomposition
Sourcefn matrix_logarithm(&self) -> Option<Matrix>
fn matrix_logarithm(&self) -> Option<Matrix>
Compute matrix logarithm using eigendecomposition
Sourcefn matrix_sqrt(&self) -> Option<Matrix>
fn matrix_sqrt(&self) -> Option<Matrix>
Compute matrix square root using eigendecomposition
Sourcefn is_nilpotent(&self) -> bool
fn is_nilpotent(&self) -> bool
Check if matrix is nilpotent
Implementors§
impl EigenOperations for Matrix
Implementation of EigenOperations trait for Matrix