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. 
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.