27 #ifndef MAT_UTILS_HEADER
28 #define MAT_UTILS_HEADER
33 template<
typename Tmatrix,
typename Treal>
40 assert(
A.get_nrows() ==
B.get_nrows() );
44 return Tmatrix::frob_diff(
A,
B);
47 Treal & euclUpperBound)
const {
48 Treal frobTmp =
frob();
50 euclUpperBound = frobTmp;
57 template<
typename Tvector>
60 tmp = (Treal)-1.0 *
B * x;
61 y = (Treal)1.0 *
A * x;
62 y += (Treal)1.0 * tmp;
68 template<
typename Tmatrix,
typename Treal>
78 Treal & euclUpperBound)
const {
79 Treal frobA =
A.frob();
81 euclUpperBound = frobA * frobA;
85 template<
typename Tvector>
96 template<
typename Tmatrix,
typename Tmatrix2,
typename Treal>
103 assert(
A.get_nrows() ==
Z.get_nrows() );
104 return A.get_nrows();
107 Treal & euclUpperBound)
const {
108 Treal frobA =
A.frob();
109 Treal frobZ =
Z.frob();
111 euclUpperBound = frobA * frobZ * frobZ;
121 y = (Treal)1.0 *
A * tmp;
127 template<
typename Tmatrix,
typename Tmatrix2,
typename Treal>
134 return E.get_ncols();
137 Treal & euclUpperBound)
const {
138 Treal frobA =
A.frob();
139 Treal frobZ =
Zt.frob();
140 Treal frobE =
E.frob();
142 euclUpperBound = frobA * frobE * frobE + 2 * frobA * frobE * frobZ;
152 :
A(A_),
Zt(Z_),
E(E_) {}
157 y = (Treal)-1.0 *
A * tmp;
163 tmp1 = (Treal)1.0 *
A * tmp;
165 y += (Treal)1.0 * tmp1;
169 tmp1 = (Treal)1.0 *
A * tmp;
171 y += (Treal)1.0 * tmp1;