Logo ROOT   6.08/07
Reference Guide
Interpolation.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_r
3 /// \notebook -nodraw
4 /// More Information for R interpolation in
5 /// http://stat.ethz.ch/R-manual/R-patched/library/stats/html/approxfun.html
6 /// NOTE: this example illustrates an interpolation with random points given from ROOT
7 /// and procedures made in R's environment.
8 ///
9 /// \macro_code
10 ///
11 /// \author Omar Zapata
12 
13 #include<TRInterface.h>
14 #include<TRandom.h>
15 #include<vector>
16 
17 void Interpolation()
18 {
19  ROOT::R::TRInterface &r=ROOT::R::TRInterface::Instance();
20  //Creating points
21  TRandom rg;
22  std::vector<Double_t> x(10),y(10);
23  for(int i=0;i<10;i++)
24  {
25  x[i]=i;
26  y[i]=rg.Gaus();
27  }
28 
29  r["x"]=x;
30  r["y"]=y;
31 
32 
33  // do plotting only in non-batch mode
34  if (!gROOT->IsBatch() ) {
35 
36  r<<"dev.new()";//Required to activate new window for plot
37  //Plot parameter. Plotting using two rows and one column
38  r<<"par(mfrow = c(2,1))";
39 
40  //plotting the points
41  r<<"plot(x, y, main = 'approx(.) and approxfun(.)')";
42 
43  //The function "approx" returns a list with components x and y
44  //containing n coordinates which interpolate the given data points according to the method (and rule) desired.
45  r<<"points(approx(x, y), col = 2, pch = '*')";
46  r<<"points(approx(x, y, method = 'constant'), col = 4, pch = '*')";
47  }
48  else {
49  r << "print('Interpolated points')";
50  r << "print(approx(x,y,n=20))";
51  }
52 
53  //The function "approxfun" returns a function performing (linear or constant)
54  //interpolation of the given data.
55  //For a given set of x values, this function will return the corresponding interpolated values.
56  r<<"f <- approxfun(x, y)";
57  //using approxfun with const method
58  r<<"fc <- approxfun(x, y, method = 'const')";
59 
60  if (!gROOT->IsBatch() ) {
61  r<<"curve(f(x), 0, 11, col = 'green2')";
62  r<<"points(x, y)";
63 
64  r<<"curve(fc(x), 0, 10, col = 'darkblue', add = TRUE)";
65  // different interpolation on left and right side :
66  r<<"plot(approxfun(x, y, rule = 2:1), 0, 11,col = 'tomato', add = TRUE, lty = 3, lwd = 2)";
67  r<<"dev.off()";//Required to close new window for plot
68  }
69  else {
70  r << "x2=x+0.5";
71  r << "print('Result of approxfun with default method')";
72  r << "print(paste('x = ',x,' f(x) = ',f(x2)))";
73  r << "print('Result of approxfun with const method')";
74  r << "print(paste('x = ',x,' f(x) = ',fc(x2)))";
75  }
76 }
virtual Double_t Gaus(Double_t mean=0, Double_t sigma=1)
Samples a random number from the standard Normal (Gaussian) Distribution with the given mean and sigm...
Definition: TRandom.cxx:235
#define gROOT
Definition: TROOT.h:364
Double_t x[n]
Definition: legend1.C:17
This is the base class for the ROOT Random number generators.
Definition: TRandom.h:31
TRandom2 r(17)
Double_t y[n]
Definition: legend1.C:17