mathru/algebra/linear/matrix/uppertriangular/
uppertriangular.rs1use crate::algebra::{
2 abstr::{Field, Scalar},
3 linear::matrix::General,
4};
5use rand::random;
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9#[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}