@@ -46,10 +46,12 @@ impl<A: Scalar + Lapack> MGS<A> {
46
46
nrm
47
47
}
48
48
49
+ /// Get orthogonal basis as Q matrix
49
50
pub fn get_q ( & self ) -> Array2 < A > {
50
51
hstack ( & self . q ) . unwrap ( )
51
52
}
52
53
54
+ /// Get each vector norm and coefficients as R matrix
53
55
pub fn get_r ( & self ) -> Array2 < A > {
54
56
let len = self . len ( ) ;
55
57
let mut r = Array2 :: zeros ( ( len, len) ) ;
@@ -66,6 +68,7 @@ impl<A: Scalar + Lapack> MGS<A> {
66
68
mod tests {
67
69
use super :: * ;
68
70
use crate :: assert:: * ;
71
+ use rand:: { distributions:: Standard , prelude:: * } ;
69
72
70
73
const N : usize = 5 ;
71
74
@@ -76,10 +79,12 @@ mod tests {
76
79
assert_eq ! ( mgs. len( ) , 0 ) ;
77
80
}
78
81
79
- #[ test]
80
- fn append_random ( ) {
81
- let mut mgs: MGS < f64 > = MGS :: new ( N ) ;
82
- let a: Array2 < f64 > = random ( ( N , 3 ) ) ;
82
+ fn test < A : Scalar + Lapack > ( rtol : A :: Real )
83
+ where
84
+ Standard : Distribution < A > ,
85
+ {
86
+ let mut mgs: MGS < A > = MGS :: new ( N ) ;
87
+ let a: Array2 < A > = crate :: generate:: random ( ( N , 3 ) ) ;
83
88
dbg ! ( & a) ;
84
89
for col in a. axis_iter ( Axis ( 1 ) ) {
85
90
let res = mgs. append ( col) ;
@@ -91,9 +96,19 @@ mod tests {
91
96
dbg ! ( & r) ;
92
97
93
98
dbg ! ( q. dot( & r) ) ;
94
- close_l2 ( & q. dot ( & r) , & a, 1e-9 ) . unwrap ( ) ;
99
+ close_l2 ( & q. dot ( & r) , & a, rtol ) . unwrap ( ) ;
95
100
96
101
dbg ! ( q. t( ) . dot( & q) ) ;
97
- close_l2 ( & q. t ( ) . dot ( & q) , & Array2 :: eye ( 3 ) , 1e-9 ) . unwrap ( ) ;
102
+ close_l2 ( & q. t ( ) . dot ( & q) , & Array2 :: eye ( 3 ) , rtol) . unwrap ( ) ;
103
+ }
104
+
105
+ #[ test]
106
+ fn test_f32 ( ) {
107
+ test :: < f32 > ( 1e-5 ) ;
108
+ }
109
+
110
+ #[ test]
111
+ fn test_c32 ( ) {
112
+ test :: < c32 > ( 1e-5 ) ;
98
113
}
99
114
}
0 commit comments