Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
Functions
JPolynome1D.cc File Reference

Example program to test 1D interpolation of a polynome. More...

#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <map>
#include "TRandom3.h"
#include "JLang/JException.hh"
#include "JMath/JPolynome.hh"
#include "JTools/JFunction1D_t.hh"
#include "JTools/JGrid.hh"
#include "JTools/JQuantile.hh"
#include "JTools/JToolsToolkit.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to test 1D interpolation of a polynome.

Author
mdejong

Definition in file JPolynome1D.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 77 of file JPolynome1D.cc.

78 {
79  using namespace std;
80  using namespace JPP;
81 
83 
84  unsigned int numberOfEvents;
85  unsigned int numberOfBins;
86  JPolynome f1;
87  map_type precision;
88  int debug;
89 
90  precision["spline"] = JPrecision_t(1.0e-3, 1.0e-1, 1.0e-4);
91  precision["hermite"] = JPrecision_t(1.0e-3, 1.0e-1, 1.0e-4);
92  precision["grid"] = JPrecision_t(1.0e-3, 1.0e-1, 1.0e-4);
93  precision["polint"] = JPrecision_t(1.0e-14, 1.0e-12, 1.0e-14);
94 
95  try {
96 
97  JParser<> zap("Example program to test 1D interpolation of a polynome.");
98 
99  zap['n'] = make_field(numberOfEvents) = 0;
100  zap['N'] = make_field(numberOfBins) = 21;
101  zap['P'] = make_field(f1);
102  zap['e'] = make_field(precision) = JPARSER::initialised();
103  zap['d'] = make_field(debug) = 3;
104 
105  zap(argc, argv);
106  }
107  catch(const exception &error) {
108  FATAL(error.what() << endl);
109  }
110 
111 
112  const int N = 3; // fixed degree of polynomial interpolation
113 
114  JSplineFunction1S_t spline;
118  JPolintFunction1D_t<N+1> Polint; // integrand of polint
119 
120  const double xmin = -1.0;
121  const double xmax = +1.0;
122 
123  spline .configure(make_grid(numberOfBins, xmin, xmax), f1);
124  hermite.configure(make_grid(numberOfBins, xmin, xmax), f1);
125  grid .configure(make_grid(numberOfBins, xmin, xmax), f1);
126  polint .configure(make_grid(numberOfBins, xmin, xmax), f1);
127 
128  spline .compile();
129  hermite.compile();
130  grid .compile();
131  polint .compile();
132 
133  integrate(polint, Polint);
134 
135  Polint.compile();
136 
137  if (numberOfEvents != 0) {
138 
139  JABC Qspline ("spline");
140  JABC Qhermite("hermite");
141  JABC Qgrid ("grid");
142  JABC Qpolint ("polint");
143 
144  for (unsigned int i = 0; i != numberOfEvents; ++i) {
145 
146  const double x = gRandom->Uniform(xmin, xmax);
147 
148  const double y1 = f1.getValue(x);
149  const double fp = f1.getDerivative(x);
150  const double F1 = f1.getIntegral(x) - f1.getIntegral(xmin);
151 
152  Qspline .f .put(y1 - spline (x).f);
153  Qhermite.f .put(y1 - hermite(x).f);
154  Qgrid .f .put(y1 - grid (x).f);
155  Qpolint .f .put(y1 - polint (x).f);
156 
157  Qspline .fp.put(fp - spline (x).fp);
158  Qhermite.fp.put(fp - hermite(x).fp);
159  Qgrid .fp.put(fp - grid (x).fp);
160  Qpolint .fp.put(fp - polint (x).fp);
161 
162  Qspline .v .put(F1 - spline (x).v);
163  Qhermite.v .put(F1 - hermite(x).v);
164  Qgrid .v .put(F1 - grid (x).v);
165  Qpolint .v .put(F1 - Polint (x));
166  }
167 
168  if (debug >= debug_t) {
169 
170  cout << "RMS: f f' F " << endl;
171  cout << "_________________________________________" << endl;
172 
173  cout << "spline "
174  << SCIENTIFIC(10,3) << Qspline .f .getSTDev() << ' '
175  << SCIENTIFIC(10,3) << Qspline .fp.getSTDev() << ' '
176  << SCIENTIFIC(10,3) << Qspline .v .getSTDev() << endl;
177 
178  cout << "hermite "
179  << SCIENTIFIC(10,3) << Qhermite.f .getSTDev() << ' '
180  << SCIENTIFIC(10,3) << Qhermite.fp.getSTDev() << ' '
181  << SCIENTIFIC(10,3) << Qhermite.v .getSTDev() << endl;
182 
183  cout << "grid "
184  << SCIENTIFIC(10,3) << Qgrid .f .getSTDev() << ' '
185  << SCIENTIFIC(10,3) << Qgrid .fp.getSTDev() << ' '
186  << SCIENTIFIC(10,3) << Qgrid .v .getSTDev() << endl;
187 
188  cout << "polint "
189  << SCIENTIFIC(10,3) << Qpolint .f .getSTDev() << ' '
190  << SCIENTIFIC(10,3) << Qpolint .fp.getSTDev() << ' '
191  << SCIENTIFIC(10,3) << Qpolint .v .getSTDev() << endl;
192  }
193 
194  ASSERT(Qspline .f .getSTDev() <= precision["spline"].f);
195  ASSERT(Qspline .fp.getSTDev() <= precision["spline"].fp);
196  ASSERT(Qspline .v .getSTDev() <= precision["spline"].v);
197 
198  ASSERT(Qhermite.f .getSTDev() <= precision["hermite"].f);
199  ASSERT(Qhermite.fp.getSTDev() <= precision["hermite"].fp);
200  ASSERT(Qhermite.v .getSTDev() <= precision["hermite"].v);
201 
202  ASSERT(Qgrid .f .getSTDev() <= precision["grid"].f);
203  ASSERT(Qgrid .fp.getSTDev() <= precision["grid"].fp);
204  ASSERT(Qgrid .v .getSTDev() <= precision["grid"].v);
205 
206  ASSERT(Qpolint .f .getSTDev() <= precision["polint"].f);
207  ASSERT(Qpolint .fp.getSTDev() <= precision["polint"].fp);
208  ASSERT(Qpolint .v .getSTDev() <= precision["polint"].v);
209 
210  } else {
211 
212  for ( ; ; ) {
213 
214  string buffer;
215 
216  cout << "> " << flush;
217 
218  getline(cin, buffer);
219 
220  if (buffer != "") {
221 
222  try {
223 
224  double x;
225 
226  istringstream(buffer) >> x;
227 
228  cout << "f1 " << f1 (x) << endl;
229  cout << "spline " << spline (x).f << endl;
230  cout << "hermite " << hermite(x).f << endl;
231  cout << "grid spline " << grid (x).f << endl;
232  cout << "polynomial " << polint (x).f << endl;
233  }
234  catch(const JException& exception) {
235  cout << exception.what() << endl;
236  }
237 
238  } else {
239  break;
240  }
241  }
242  }
243 
244  return 0;
245 }
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
int numberOfBins
number of bins for average CDF integral of optical module
Definition: JSirene.cc:70
General exception.
Definition: JException.hh:24
virtual const char * what() const override
Get error message.
Definition: JException.hh:64
Utility class to parse command line options.
Definition: JParser.hh:1698
const JPolynome F1
Integral.
Definition: JQuadrature.cc:34
const JPolynome f1(1.0, 2.0, 3.0)
Function.
const double xmax
Definition: JQuadrature.cc:24
const double xmin
Definition: JQuadrature.cc:23
@ debug_t
debug
Definition: JMessage.hh:29
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:478
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JElement_t::ordinate_type integrate(const JCollection< JElement_t, JDistance_t > &input, typename JMappable< JElement_t >::map_type &output)
Conversion of data points to integral values.
Definition: JCollection.hh:812
data_type v[N+1][M+1]
Definition: JPolint.hh:866
JGrid< JAbscissa_t > make_grid(const int nx, const JAbscissa_t Xmin, const JAbscissa_t Xmax)
Helper method for JGrid.
Definition: JGrid.hh:209
std::map< int, range_type > map_type
Definition: JSTDTypes.hh:14
Recursive template class for polynomial function.
Definition: JMathlib.hh:1381
double getIntegral(const double x) const
Integral value.
Definition: JPolynome.hh:276
double getValue(const double x) const
Function value.
Definition: JMathlib.hh:1421
double getDerivative(const double x) const
Derivative value.
Definition: JMathlib.hh:1433
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:68
Type definition of a spline interpolation based on a JGridCollection with JResultPDF result type.
Type definition of a spline interpolation method based on a JCollection with JResultPDF result type.
Polynomial interpolation method with result type double.
Polynomial interpolation method with result type JResultDerivative.
Type definition of a spline interpolation method based on a JCollection with JResultPDF result type.
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:488