mathru/algebra/linear/matrix/uppertriangular/
uppertriangular.rs

1use crate::algebra::{
2    abstr::{Field, Scalar},
3    linear::matrix::General,
4};
5use rand::random;
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9/// Upper triangular matrix
10#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11#[derive(Debug, Clone)]
12pub struct UpperTriangular<T> {
13    pub(crate) matrix: General<T>,
14}
15
16impl<T> UpperTriangular<T>
17where
18    T: Field + Scalar,
19{
20    pub fn new(matrix: General<T>) -> UpperTriangular<T> {
21        UpperTriangular { matrix }
22    }
23
24    pub fn dim(&self) -> (usize, usize) {
25        self.matrix.dim()
26    }
27
28    pub fn new_random(m: usize) -> UpperTriangular<T> {
29        let mut g = General::zero(m, m);
30
31        for i in 0..m {
32            for j in i..m {
33                g[[i, j]] = T::from_f64(random());
34            }
35        }
36
37        UpperTriangular { matrix: g }
38    }
39}