MyraMath
SumAction


Source: tests/iterative/SumAction.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>
15 
16 // Algorithms.
18 
19 // Iterative solve/action stuff.
23 
24 // Reporting.
25 #include <tests/myratest.h>
26 
27 using namespace myra;
28 
29 namespace {
30 
31 template<class Number> void test(typename ReflectPrecision<Number>::type tolerance)
32  {
33  typedef typename ReflectPrecision<Number>::type Precision;
34  auto A = Matrix<Number>::random(10,10);
35  auto B = Matrix<Number>::random(10,10);
36  auto C1 = A+B;
37  auto C2 = make_GemmAction(A) + make_GemmAction(B);
38  Precision error = frobenius(C1-C2.make_Matrix());
39  myra::out() << "|(A+B)[dense] - (A+B)[action]| = " << error << std::endl;
40  REQUIRE(error < tolerance);
41  }
42 
43 } // namespace
44 
45 ADD_TEST("SumAction","[iterative]")
46  {
47  test<NumberS>(1.0e-4f);
48  test<NumberD>(1.0e-12);
49  test<NumberC>(1.0e-4f);
50  test<NumberZ>(1.0e-12);
51  }
Interface class for representing subranges of dense Matrix&#39;s.
Applies the "Action" of a linear operator, b := A*x, used in iterative solution algorithms.
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
Definition: syntax.dox:1
Various utility functions/classes related to scalar Number types.
Composes two Action&#39;s A and B, yielding an Action that applies (A+B)*X.
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
An Action for multiplying by a dense Matrix or SparseMatrix using gemm().


Results: [PASS]

|(A+B)[dense] - (A+B)[action]| = 0
|(A+B)[dense] - (A+B)[action]| = 0
|(A+B)[dense] - (A+B)[action]| = 0
|(A+B)[dense] - (A+B)[action]| = 0


Go back to Summary of /test programs.