Skip to main content

mathru/algebra/linear/matrix/
eigendec.rs

1use crate::algebra::linear::matrix::{Diagonal, General};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4use std::clone::Clone;
5
6pub trait EigenDecomposition<T> {
7    fn dec_eigen(&self) -> Result<EigenDec<T>, String>;
8}
9
10/// Result of a Eigen decomposition
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12#[derive(Debug, Clone)]
13pub struct EigenDec<T> {
14    values: Diagonal<T>,
15    vectors: General<T>,
16}
17
18impl<T> EigenDec<T> {
19    pub(super) fn new(values: Diagonal<T>, vectors: General<T>) -> EigenDec<T> {
20        EigenDec { values, vectors }
21    }
22
23    pub fn values(self) -> Diagonal<T> {
24        self.values
25    }
26
27    pub fn vectors(self) -> General<T> {
28        self.vectors
29    }
30
31    pub fn pair(self) -> (Diagonal<T>, General<T>) {
32        (self.values, self.vectors)
33    }
34}