29 #include <tests/myratest.h> 38 myra::out() << typestring<Number>() << std::endl;
50 Precision decomposition_error = frobenius(Q*R-A);
51 myra::out() <<
" |Q*R-A| = " << decomposition_error << std::endl;
52 REQUIRE(decomposition_error < tolerance);
55 myra::out() <<
" |Q'*Q-I| = " << unitary_error << std::endl;
56 REQUIRE(unitary_error < tolerance);
64 Precision error = frobenius(gemm(Q,B_copy) - QB);
65 myra::out() <<
" |Q*B (gemm) - Q*B (gemqr) | = " << error << std::endl;
66 REQUIRE(error < tolerance);
74 Precision error = frobenius(gemm(Q,
'T',B_copy) - QtB);
75 myra::out() <<
" |Q^T*B (gemm) - Q^T*B (gemqr) | = " << error << std::endl;
76 REQUIRE(error < tolerance);
84 Precision error = frobenius(gemm(Q,
'H',B_copy) - QhB);
85 myra::out() <<
" |Q^H*B (gemm) - Q^H*B (gemqr) | = " << error << std::endl;
86 REQUIRE(error < tolerance);
95 Precision error = frobenius(gemm(Q,
'C',B_copy) - QcB);
96 myra::out() <<
" |Q^C*B (gemm) - Q^C*B (gemqr) | = " << error << std::endl;
97 REQUIRE(error < tolerance);
106 Precision error = frobenius(gemm(B_copy,Q) - BQ);
107 myra::out() <<
" |B*Q (gemm) - B*Q (gemqr) | = " << error << std::endl;
108 REQUIRE(error < tolerance);
117 Precision error = frobenius(gemm(B_copy,Q,
'T') - BQt);
118 myra::out() <<
" |B*Q^T (gemm) - B*Q^T (gemqr) | = " << error << std::endl;
119 REQUIRE(error < tolerance);
128 Precision error = frobenius(gemm(B_copy,Q,
'H') - BQh);
129 myra::out() <<
" |B*Q^H (gemm) - B*Q^H (gemqr) | = " << error << std::endl;
130 REQUIRE(error < tolerance);
138 Precision error = frobenius(gemm(B_copy,Q,
'C') - BQc);
139 myra::out() <<
" |B*Q^C (gemm) - B*Q^C (gemqr) | = " << error << std::endl;
140 REQUIRE(error < tolerance);
146 ADD_TEST(
"geqrf_tallskinny",
"[dense][lapack]")
150 myra::out() <<
"Testing qr decomposition (tall/skinny).." << std::endl;
151 test<NumberS>(N1,N2,1.0e-5f);
152 test<NumberD>(N1,N2,1.0e-10);
153 test<NumberC>(N1,N2,1.0e-5f);
154 test<NumberZ>(N1,N2,1.0e-10);
155 myra::out() << std::endl;
158 ADD_TEST(
"geqrf_shortfat",
"[dense][lapack]")
162 myra::out() <<
"Testing qr decomposition (short/fat).." << std::endl;
163 test<NumberS>(N2,N1,1.0e-5f);
164 test<NumberD>(N2,N1,1.0e-10);
165 test<NumberC>(N2,N1,1.0e-5f);
166 test<NumberZ>(N2,N1,1.0e-10);
167 myra::out() << std::endl;
170 ADD_TEST(
"geqrf_square",
"[dense][lapack]")
173 myra::out() <<
"Testing qr decomposition (square).." << std::endl;
174 test<NumberS>(N,N,1.0e-5f);
175 test<NumberD>(N,N,1.0e-10);
176 test<NumberC>(N,N,1.0e-5f);
177 test<NumberZ>(N,N,1.0e-10);
178 myra::out() << std::endl;
Routines to reconstruct a Householder Q, as previously factored via geqrf_inplace() ...
Interface class for representing subranges of dense Matrix's.
Interface class for representing subranges of dense Vector's.
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
Routines to concatenate Matrix's in left/right fashion.
Routines for computing Frobenius norms of various algebraic containers.
static Matrix< Number > random(int I, int J)
Generates a random Matrix of specified size.
Definition: Matrix.cpp:353
Routines to compute a Householder QR decomposition.
Represents a const MatrixRange.
Definition: bothcat.h:22
Returns the upper triangle of a dense Matrix.
Various utility functions/classes related to scalar Number types.
int J
---------— Data members, all public ----------------—
Definition: MatrixRange.h:241
int I
---------— Data members, all public ----------------—
Definition: MatrixRange.h:240
General purpose dense matrix container, O(i*j) storage.
Tabulates a vector of length N, allows random access.
Definition: conjugate.h:21
Container for either a column vector or row vector (depends upon the usage context) ...
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
Routines to apply a Householder Q, as previously factored via geqrf_inplace()
Variety of routines all for dense Matrix*Matrix multiplies. Delegates to the BLAS.
Routines to concatenate Matrix's in top/bottom fashion.
Testing qr decomposition (tall/skinny)..
float
|Q*R-A| = 2.92761e-07
|Q'*Q-I| = 3.50315e-07
|Q*B (gemm) - Q*B (gemqr) | = 4.20892e-07
|Q^T*B (gemm) - Q^T*B (gemqr) | = 3.43152e-07
|Q^H*B (gemm) - Q^H*B (gemqr) | = 5.43672e-07
|Q^C*B (gemm) - Q^C*B (gemqr) | = 3.85573e-07
|B*Q (gemm) - B*Q (gemqr) | = 5.54186e-07
|B*Q^T (gemm) - B*Q^T (gemqr) | = 6.20191e-07
|B*Q^H (gemm) - B*Q^H (gemqr) | = 5.92514e-07
|B*Q^C (gemm) - B*Q^C (gemqr) | = 6.60714e-07
double
|Q*R-A| = 6.28688e-16
|Q'*Q-I| = 7.00305e-16
|Q*B (gemm) - Q*B (gemqr) | = 6.02886e-16
|Q^T*B (gemm) - Q^T*B (gemqr) | = 1.01586e-15
|Q^H*B (gemm) - Q^H*B (gemqr) | = 6.75322e-16
|Q^C*B (gemm) - Q^C*B (gemqr) | = 5.7815e-16
|B*Q (gemm) - B*Q (gemqr) | = 1.23947e-15
|B*Q^T (gemm) - B*Q^T (gemqr) | = 7.95845e-16
|B*Q^H (gemm) - B*Q^H (gemqr) | = 9.00953e-16
|B*Q^C (gemm) - B*Q^C (gemqr) | = 6.59508e-16
std::complex<float>
|Q*R-A| = 7.18633e-07
|Q'*Q-I| = 3.57662e-07
|Q*B (gemm) - Q*B (gemqr) | = 8.2653e-07
|Q^T*B (gemm) - Q^T*B (gemqr) | = 7.84967e-07
|Q^H*B (gemm) - Q^H*B (gemqr) | = 5.1556e-07
|Q^C*B (gemm) - Q^C*B (gemqr) | = 7.74009e-07
|B*Q (gemm) - B*Q (gemqr) | = 1.22603e-06
|B*Q^T (gemm) - B*Q^T (gemqr) | = 8.92469e-07
|B*Q^H (gemm) - B*Q^H (gemqr) | = 1.08471e-06
|B*Q^C (gemm) - B*Q^C (gemqr) | = 9.12118e-07
std::complex<double>
|Q*R-A| = 1.14136e-15
|Q'*Q-I| = 6.51389e-16
|Q*B (gemm) - Q*B (gemqr) | = 1.33321e-15
|Q^T*B (gemm) - Q^T*B (gemqr) | = 1.23107e-15
|Q^H*B (gemm) - Q^H*B (gemqr) | = 7.41813e-16
|Q^C*B (gemm) - Q^C*B (gemqr) | = 1.13901e-15
|B*Q (gemm) - B*Q (gemqr) | = 1.90478e-15
|B*Q^T (gemm) - B*Q^T (gemqr) | = 1.86202e-15
|B*Q^H (gemm) - B*Q^H (gemqr) | = 1.80635e-15
|B*Q^C (gemm) - B*Q^C (gemqr) | = 1.54351e-15