Jpp  master_rocky-43-ge265d140c
the software that should make you happy
JMatrixND.cc
Go to the documentation of this file.
1 #include <string>
2 #include <iostream>
3 #include <iomanip>
4 
5 #include "JLang/JException.hh"
6 #include "JMath/JMatrixND.hh"
7 
8 #include "Jeep/JTimer.hh"
9 #include "Jeep/JParser.hh"
10 #include "Jeep/JMessage.hh"
11 
12 
13 /**
14  * \file
15  *
16  * Example program to test matrix operations.
17  * \author mdejong
18  */
19 int main(int argc, char**argv)
20 {
21  using namespace std;
22 
23  int N;
24  int numberOfEvents;
25  int debug;
26 
27  try {
28 
29  JParser<> zap("Example program to test matrix operations.");
30 
31  zap['N'] = make_field(N);
32  zap['n'] = make_field(numberOfEvents);
33  zap['d'] = make_field(debug) = 2;
34 
35  zap(argc, argv);
36  }
37  catch(const exception &error) {
38  FATAL(error.what() << endl);
39  }
40 
41  using namespace JPP;
42 
43 
44  JMatrixND A(N);
45 
46  const double u = 2.0;
47 
48  for (int i = 0; i != N; ++i) {
49 
50  A(i,i) = u;
51 
52  for (int j = 0; j != i; ++j) {
53  A(j,i) = A(i,j) = 0.0;
54  }
55  }
56 
57  {
58  JTimer t1("standard");
59 
60  for (int i = 0; i != numberOfEvents; ++i) {
61 
62  t1.start();
63 
64  JMatrixND B(N);
65 
66  B.mul(A,A);
67 
68  JMatrixND C(N);
69 
70  C.mul(B,A);
71 
72  JMatrixND D(N);
73 
74  D.mul(C,A);
75 
76  JMatrixND E(N);
77 
78  E.mul(D,A);
79 
80  t1.stop();
81 
82  E.div(u*u*u*u*u);
83 
84  if (!E.isIdentity()) {
85  ERROR("Matrix product error" << endl);
86  }
87  }
88 
89  t1.print(cout);
90  }
91  {
92  JTimer t1("calculator");
93 
94  JMatrixND B(N);
95 
96  for (int i = 0; i != numberOfEvents; ++i) {
97 
98  t1.start();
99 
100  B = A * A * A * A * A;
101 
102  t1.stop();
103 
104  B.div(u*u*u*u*u);
105 
106  if (!B.isIdentity()) {
107  ERROR("Matrix product error" << endl);
108  }
109  }
110 
111  t1.print(cout);
112  }
113 }
Exceptions.
int main(int argc, char **argv)
Definition: JMatrixND.cc:19
General purpose messaging.
#define ERROR(A)
Definition: JMessage.hh:66
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
Auxiliary class for CPU timing and usage.
Definition: JTimer.hh:33
void print(std::ostream &out, const JScale_t scale=milli_t) const
Print timer data.
Definition: JTimer.hh:172
void stop()
Stop timer.
Definition: JTimer.hh:127
void start()
Start timer.
Definition: JTimer.hh:106
Utility class to parse command line options.
Definition: JParser.hh:1698
static const double C
Physics constants.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double u[N+1]
Definition: JPolint.hh:865
int j
Definition: JPolint.hh:792
Definition: JSTDTypes.hh:14
NxN matrix.
Definition: JMatrixND.hh:352
JMatrixND & div(const double factor)
Scale matrix.
Definition: JMatrixND.hh:579
bool isIdentity(const double eps=std::numeric_limits< double >::min()) const
Test identity.
Definition: JMatrixND.hh:726
JMatrixND & mul(const double factor)
Scale matrix.
Definition: JMatrixND.hh:561