47{
49
50 int numberOfEvents;
52 double precision;
54
55 try {
56
57 JParser<> zap(
"Example program to test multi-dimensional interpolation.");
58
63
64 zap(argc, argv);
65 }
66 catch(const exception &error) {
67 FATAL(error.what() << endl);
68 }
69
70
72
73
74 const double xmin = -1.0;
75 const double xmax = +1.0;
77
78
80
85
87
88
89 JMultiFunction_t g5;
90
91
92 for (
double x0 = xmin; x0 <=
xmax + 0.5*dx; x0 += dx) {
93 for (
double x1 = xmin; x1 <=
xmax + 0.5*dx; x1 += dx) {
94 for (
double x2 = xmin; x2 <=
xmax + 0.5*dx; x2 += dx) {
95 for (
double x3 = xmin; x3 <=
xmax + 0.5*dx; x3 += dx) {
96 for (
double x4 = xmin; x4 <=
xmax + 0.5*dx; x4 += dx) {
97 g5[x0][x1][x2][x3][x4] =
f5(x0, x1, x2, x3, x4);
98 }
99 }
100 }
101 }
102 }
103
105 g5.setExceptionHandler(
new JFunction1D_t::JDefaultResult(
JMATH::zero));
106
107 ASSERT(numberOfEvents > 0);
108
109 {
110 const double x =
xmin - dx;
111
112 ASSERT(fabs(g5(x, 0.0, 0.0, 0.0, 0.0)) <= precision);
113 ASSERT(fabs(g5(0.0, x, 0.0, 0.0, 0.0)) <= precision);
114 ASSERT(fabs(g5(0.0, 0.0, x, 0.0, 0.0)) <= precision);
115 ASSERT(fabs(g5(0.0, 0.0, 0.0, x, 0.0)) <= precision);
116 ASSERT(fabs(g5(0.0, 0.0, 0.0, 0.0, x)) <= precision);
117 }
118
120
122
123 for (int i = 0; i != numberOfEvents; ++i) {
124
125 const double x0 = gRandom->Uniform(xmin, xmax);
126 const double x1 = gRandom->Uniform(xmin, xmax);
127 const double x2 = gRandom->Uniform(xmin, xmax);
128 const double x3 = gRandom->Uniform(xmin, xmax);
129 const double x4 = gRandom->Uniform(xmin, xmax);
130
131 const double v =
f5(x0,x1,x2,x3,x4);
132
134
135 const double w = g5(x0,x1,x2,x3,x4);
136
138
140 }
141
142 if (
debug >- debug_t) {
143
145
146 timer.
print(cout, 1.0 / numberOfEvents);
147 }
148
151
152 return 0;
153}
#define ASSERT(A,...)
Assert macro.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double f5(const double x0, const double x1, const double x2, const double x3, const double x4)
5D function.
int numberOfBins
number of bins for average CDF integral of optical module
Auxiliary class for CPU timing and usage.
void print(std::ostream &out, const JScale_t scale=milli_t) const
Print timer data.
Utility class to parse command line options.
static const JZero zero
Function object to assign zero value.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).