24{
27
28 double precision;
29 int numberOfEvents;
31
32 try {
33
34 JParser<> zap(
"Example program to test inversion of symmetric matrix.");
35
39
40 zap(argc, argv);
41 }
42 catch(const exception &error) {
43 FATAL(error.what() << endl);
44 }
45
46
47 ASSERT(numberOfEvents > 0);
48
49 gRandom->SetSeed(0);
50
53
54 for (int i = 0; i != numberOfEvents; ++i) {
55
56 if (i%100 == 0) {
STATUS(setw(8) << i <<
'\r');
DEBUG(endl); }
57
59
60 TMatrixTSym<double> R(5);
61
62 R(0,0) = A.a00; R(0,1) = A.a01; R(0,2) = A.a02; R(0,3) = A.a03; R(0,4) = A.a04;
63 R(1,0) = A.a10; R(1,1) = A.a11; R(1,2) = A.a12; R(1,3) = A.a13; R(1,4) = A.a14;
64 R(2,0) = A.a20; R(2,1) = A.a21; R(2,2) = A.a22; R(2,3) = A.a23; R(2,4) = A.a24;
65 R(3,0) = A.a30; R(3,1) = A.a31; R(3,2) = A.a32; R(3,3) = A.a33; R(3,4) = A.a34;
66 R(4,0) = A.a40; R(4,1) = A.a41; R(4,2) = A.a42; R(4,3) = A.a43; R(4,4) = A.a44;
67
68
69 DEBUG(
"Matrix A" << endl);
71
72 DEBUG(
"Determinant A " << A.getDeterminant() << endl);
73
74 try {
75
77
78 t1.start();
79
80 for (int i = 11; i != 0; --i) {
81 B.invert();
82 }
83
84 t1.stop();
85
86 t2.start();
87
88 for (int i = 11; i != 0; --i) {
89 R.Invert();
90 }
91
92 t2.stop();
93
94 DEBUG(
"Matrix A^-1" << endl);
96
97 DEBUG(
"Determinant A^-1 = " << B.getDeterminant() << endl);
98
100
101 DEBUG(
"Matrix A x A^-1" << endl);
103
104 DEBUG(
"Determinant (A x A^-1) = " << C.getDeterminant() << endl);
105 DEBUG(
"Determinant A x Determinant A^-1 = " << A.getDeterminant() * B.getDeterminant() << endl);
106 DEBUG(
"A x A^-1 = I ? " << C.isIdentity(precision) << endl);
107
108 if (!C.isIdentity(precision)) {
109 ERROR(
"Matrix A x A^-1 /= I" << endl);
110 }
111
112 JMatrix5D D = C - JMatrix5D::getIdentity();
113
114 DEBUG(
"Matrix D = C - I" << endl);
116
117 ASSERT (C.isIdentity(precision));
118 }
120 FATAL(error << endl);
121 }
122 }
124
125 if (numberOfEvents > 0) {
126
127 const double factor = 1.0;
128
129 t1.print(cout, factor, micro_t);
130 t2.print(cout, factor, micro_t);
131 }
132
133 return 0;
134}
#define DEBUG(A)
Message macros.
#define ASSERT(A,...)
Assert macro.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Auxiliary class for CPU timing and usage.
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).