mathru/algebra/linear/matrix/
eigendec.rs1use 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#[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}