29 #include <tests/myratest.h>    38   myra::out() << typestring<Precision>() << std::endl;
    42   for (
int n = 0; n < N; ++n)
    44   for (
int n = 0; n < N-1; ++n)
    45     T(n+1,n) = T(n,n+1) = T1(n);
    47   auto XD = stev(T0,T1);
    48   const auto& X = XD.first;
    49   const auto& D = XD.second;
    52   Precision R_error = frobenius(T-X*D*transpose(X))/frobenius(D);
    53   myra::out() << 
"  |T-X*D*X'| = " << R_error << std::endl;
    55   Precision X_error = frobenius(gemm(X,
'T',X)-I);
    56   myra::out() << 
"  |X'X-I| = " << X_error << std::endl;
    61   Precision Xk_error = frobenius(gemm(Xk,
'T',Xk)-Ik)/N;
    62   myra::out() << 
"  |Xk'Xk-Ik| = " << Xk_error << std::endl;  
    65   for (
int n = 0; n < N-1; ++n)
    66     sorted &= D(n) <= D(n+1);
    67   myra::out() << std::boolalpha;
    68   myra::out() << 
"  sorted D(n) <= D(n+1) = " << sorted << std::endl;
    70   REQUIRE(R_error < tolerance);
    71   REQUIRE(X_error < tolerance);
    72   REQUIRE(Xk_error < tolerance);
    77 template<
class Precision> 
void test_random(
int N, Precision tolerance)
    81   test_detail(T0,T1,tolerance);
    85 template<
class Precision> 
void test_split(
int N, 
int S, Precision tolerance)
    90   test_detail(T0,T1,tolerance);
    96 ADD_TEST(
"sstev",
"[dense][lapack]")
    97   { test_random<float>(50,1.0e-4f); }
   100 ADD_TEST(
"sstev_split",
"[dense][lapack]")
   101   { test_split<float>(100,27,1.0e-4f); }
   104 ADD_TEST(
"sstev_stress",
"[dense][lapack][.]")
   108   for (
int n = 1; n < N; ++n)
   109     for (
int t = 0; t < T; ++t)
   110       test_random<float>(n,1.0e-4f);
   114 ADD_TEST(
"dstev",
"[dense][lapack]")
   115   { test_random<double>(50,1.0e-12); }
   118 ADD_TEST(
"dstev_split",
"[dense][lapack]")
   119   { test_split<double>(100,27,1.0e-12); }
   122 ADD_TEST(
"dstev_stress",
"[dense][lapack][.]")
   126   for (
int n = 1; n < N; ++n)
   127     for (
int t = 0; t < T; ++t)
   128       test_random<double>(n,1.0e-12);
 Interface class for representing subranges of DiagonalMatrix's. 
Interface class for representing subranges of dense Matrix's. 
MatrixRange< Number > left(int j) const
Returns the j leftmost columns, this(:,0:j) 
Definition: MatrixRange.cpp:223
Interface class for representing subranges of dense Vector's. 
Routines for computing Frobenius norms of various algebraic containers. 
Routines for multiplying by a DiagonalMatrix. 
static Vector< Number > random(int N)
Generates a random Vector of specified size. 
Definition: Vector.cpp:276
Overloads expr() for Matrix<Number>, LowerMatrix<Number>, Vector<Number> and DiagonalMatrix<Number> ...
Returns a transposed copy of a Matrix. The inplace version only works on a square operand...
Various utility functions/classes related to scalar Number types. 
static Matrix< Number > identity(int IJ)
Generates an identity Matrix of specified size. 
Definition: Matrix.cpp:349
General purpose dense matrix container, O(i*j) storage. 
int size() const
Size inspector. 
Definition: Vector.cpp:118
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) ...
Computes all eigenpairs of real symmetric tridiagonal matrix. 
Container for a diagonal matrix, O(n) storage. Used by SVD, row/column scaling, etc. 
Variety of routines all for dense Matrix*Matrix multiplies. Delegates to the BLAS.