eigenvalues/
matrix_operations.rs1use nalgebra::{DMatrix, DMatrixSlice, DVector, DVectorSlice};
12use std::clone::Clone;
13
14pub trait MatrixOperations: Clone {
16 fn matrix_vector_prod(&self, vs: DVectorSlice<f64>) -> DVector<f64>;
18 fn matrix_matrix_prod(&self, mtx: DMatrixSlice<f64>) -> DMatrix<f64>;
20 fn diagonal(&self) -> DVector<f64>;
22 fn set_diagonal(&mut self, diag: &DVector<f64>);
24 fn ncols(&self) -> usize;
26 fn nrows(&self) -> usize;
28}
29
30impl MatrixOperations for DMatrix<f64> {
31 fn matrix_vector_prod(&self, vs: DVectorSlice<f64>) -> DVector<f64> {
32 self * vs
33 }
34 fn matrix_matrix_prod(&self, mtx: DMatrixSlice<f64>) -> DMatrix<f64> {
35 self * mtx
36 }
37 fn diagonal(&self) -> DVector<f64> {
38 self.diagonal()
39 }
40 fn set_diagonal(&mut self, diag: &DVector<f64>) {
41 self.set_diagonal(diag);
42 }
43
44 fn ncols(&self) -> usize {
45 self.ncols()
46 }
47 fn nrows(&self) -> usize {
48 self.nrows()
49 }
50}
51
52