MyraMath
frobenius


Source: tests/sparse/frobenius.cpp

1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
11 // Containers.
13 #include <myramath/dense/Matrix.h>
17 
18 // Algorithms.
21 
22 // Reporting.
23 #include <tests/myratest.h>
24 
25 using namespace myra;
26 
27 namespace {
28 
29 template<class Number> void test(int I, int J, int N, typename ReflectPrecision<Number>::type tolerance)
30  {
31  myra::out() << typestring<Number>() << std::endl;
32  // Make random sparse A operand.
33  auto A = SparseMatrix<Number>::random(I,J,N);
34  // Compare frobenius(A) and frobenius(A.make_Matrix())
35  typedef typename ReflectPrecision<Number>::type Precision;
36  Precision fro_sparse = frobenius(A);
37  Precision fro_dense = frobenius(A.make_Matrix());
38  Precision error = fro_sparse - fro_dense;
39  myra::out() << " |frobenius(A) [sparse-dense]| = " << error << std::endl;
40  REQUIRE(error < tolerance);
41  }
42 
43 } // namespace
44 
45 ADD_TEST("frobenius","[sparse]")
46  {
47  test<NumberS>(15,10,40,1.0e-4f);
48  test<NumberD>(15,10,40,1.0e-9);
49  test<NumberC>(15,10,40,1.0e-4f);
50  test<NumberZ>(15,10,40,1.0e-9);
51  }
Interface class for representing subranges of dense Matrix&#39;s.
Routines for computing Frobenius norms of various algebraic containers.
static SparseMatrix< Number > random(int I, int J, int N)
Generates a random SparseMatrix with size IxJ and (approximately) N nonzeros.
Definition: SparseMatrix.cpp:493
General purpose compressed-sparse-column (CSC) container.
Definition: syntax.dox:1
Various utility functions/classes related to scalar Number types.
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
Returns frobenius norm of a SparseMatrix.
Range/Iterator types associated with SparseMatrix.


Results: [PASS]

float
|frobenius(A) [sparse-dense]| = 0
double
|frobenius(A) [sparse-dense]| = 0
std::complex<float>
|frobenius(A) [sparse-dense]| = 0
std::complex<double>
|frobenius(A) [sparse-dense]| = 0


Go back to Summary of /test programs.