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
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
impl EigenOperations for Matrix
Implementation of EigenOperations trait for Matrix