34 #include <tests/myratest.h> 44 myra::out() << typestring<Number>() << std::endl;
51 auto result = sytrf_inplace(
'L',
'R',L);
57 Precision error = frobenius( transpose(P)*L*R*transpose(Q)*I*Q*transpose(R)*transpose(L)*P-A ) / frobenius(A);
58 myra::out() <<
" |P'*L*R'*Q'*I*Q*R*L'*P - A| = " << error << std::endl;
59 REQUIRE(error < tolerance);
64 auto result = sytrf_inplace(
'L',
'L',L);
70 Precision error = frobenius( transpose(P)*transpose(L)*transpose(R)*transpose(Q)*I*Q*R*L*P-A ) / frobenius(A);
71 myra::out() <<
" |P'*L'*R'*Q'*I*Q*R*L*P - A| = " << error << std::endl;
72 REQUIRE(error < tolerance);
77 auto result = sytrf_inplace(
'U',
'R',U);
83 Precision error = frobenius( transpose(P)*U*R*transpose(Q)*I*Q*transpose(R)*transpose(U)*P-A ) / frobenius(A);
84 myra::out() <<
" |P'*U*R*Q'*I*Q*R'*U'*P - A| = " << error << std::endl;
85 REQUIRE(error < tolerance);
90 auto result = sytrf_inplace(
'U',
'L',U);
96 Precision error = frobenius( transpose(P)*transpose(U)*transpose(R)*transpose(Q)*I*Q*R*U*P-A ) / frobenius(A);
97 myra::out() <<
" |P'*U'*R'*Q'*I*Q*R*U*P - A| = " << error << std::endl;
98 REQUIRE(error < tolerance);
106 myra::out() << typestring<Number>() << std::endl;
109 A = A + transpose(A);
112 auto result = sytrf_inplace(L);
118 Precision error = frobenius( transpose(P)*Lf*R*transpose(Q)*I*Q*transpose(R)*transpose(Lf)*P-A ) / frobenius(A);
119 myra::out() <<
" |P'*L*R*Q'*I*Q*R'*L'*P - A| = " << error << std::endl;
120 REQUIRE(error < tolerance);
125 ADD_TEST(
"sytrf_Matrix",
"[dense][lapack]")
127 myra::out() <<
"Checking sytrf(MatrixRange)" << std::endl;
128 test1<NumberS>(169,1.0e-4f);
129 test1<NumberD>(169,1.0e-10);
130 test1<NumberC>(169,1.0e-4f);
131 test1<NumberZ>(169,1.0e-10);
132 myra::out() << std::endl;
135 ADD_TEST(
"sytrf_LowerMatrix",
"[dense][lapack]")
137 myra::out() <<
"Checking sytrf(LowerMatrix)" << std::endl;
138 test2<NumberS>(192,1.0e-3f);
139 test2<NumberD>(192,1.0e-8);
140 test2<NumberC>(192,1.0e-3f);
141 test2<NumberZ>(192,1.0e-8);
142 myra::out() << std::endl;
Interface class for representing subranges of DiagonalMatrix's.
Interface class for representing subranges of dense Matrix's.
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
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 for multiplying by a DiagonalMatrix.
Range construct for a lower triangular matrix stored in rectangular packed format.
LDL' decompositions for real symmetric Matrix A (indefinite is fine).
Specialized container for a lower triangular matrix, O(N^2/2) storage. Used by symmetry exploiting ma...
Returns a transposed copy of a Matrix. The inplace version only works on a square operand...
Returns the lower triangle of a dense Matrix.
Returns the upper triangle of a dense Matrix.
Various utility functions/classes related to scalar Number types.
Routines related to swap sequences, often used during pivoting.
General purpose dense matrix container, O(i*j) storage.
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
static DiagonalMatrix< Number > inertia(int N_plus, int N_minus)
Generates an inertia DiagonalMatrix, [+I -I].
Definition: DiagonalMatrix.cpp:221
Stores a lower triangular matrix in rectangular packed format.
Definition: conjugate.h:22
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.
Interface class for representing subranges of contiguous int's.
Checking sytrf(LowerMatrix)
float
|P'*L*R*Q'*I*Q*R'*L'*P - A| = 2.74094e-06
double
|P'*L*R*Q'*I*Q*R'*L'*P - A| = 8.12533e-15
std::complex<float>
|P'*L*R*Q'*I*Q*R'*L'*P - A| = 4.55581e-06
std::complex<double>
|P'*L*R*Q'*I*Q*R'*L'*P - A| = 9.3345e-15