11 void splines_test(Int_t np=23, Double_t a=-0.5, Double_t b=31)
14 Double_t *xx=0, *yy=0;
18 TText *text5, *text3, *textn;
20 const Double_t power=0.75;
23 TF1 *f=
new TF1(
"f",
"sin(x)*sin(x/10)",
24 a-0.05*(b-a),b+0.05*(b-a));
29 Double_t xx1, yy1, xx2, yy2, dx, dy;
31 gPad->GetRangeAxis(xx1,yy1,xx2,yy2);
34 line5=
new TLine(xx1+dx*0.3,yy1+dy*1.02,
35 xx1+dx*0.38,yy1+dy*1.02);
36 line5->SetLineColor(kRed);
37 line5->SetLineWidth(2);
38 text5 =
new TText(xx1+dx*0.4,
39 yy1+dy*1.03,
"quintic spline");
40 text5->SetTextAlign(12);
41 text5->SetTextSize(0.04);
42 line3=
new TLine(xx1+dx*0.67,yy1+dy*1.02,
43 xx1+dx*0.75,yy1+dy*1.02);
44 line3->SetLineColor(kGreen);
45 line3->SetLineWidth(2);
46 text3 =
new TText(xx1+dx*0.77,
47 yy1+dy*1.03,
"third spline");
48 text3->SetTextAlign(12);
49 text3->SetTextSize(0.04);
50 textn =
new TText(xx1+dx*0.8,yy1+dy*0.91,
" ");
51 textn->SetTextAlign(12);
52 textn->SetTextSize(0.04);
61 for(Int_t nnp=2; nnp<=np; ++nnp) {
65 xx =
new Double_t[nnp];
67 yy =
new Double_t[nnp];
68 for (Int_t i=0; i<nnp; ++i) {
69 xx[i]=a+(b-a)*TMath::Power(i/Double_t (nnp-1),power);
74 Double_t eps=(b-a)*1.e-5;
75 if(spline5)
delete spline5;
76 spline5 =
new TSpline5(
"Test",xx,f,nnp,
"b1e1b2e2",
77 f->Derivative(a),f->Derivative(b),
78 (f->Derivative(a+eps)-f->Derivative(a))/eps,
79 (f->Derivative(b)-f->Derivative(b-eps))/eps);
81 spline5->SetLineColor(kRed);
82 spline5->SetLineWidth(3);
85 spline5->Draw(
"lcsame");
88 if(spline3)
delete spline3;
89 spline3 =
new TSpline3(
"Test",xx,yy,nnp,
"b1e1",
90 f->Derivative(a),f->Derivative(b));
92 spline3->SetLineColor(kGreen);
93 spline3->SetLineWidth(3);
94 spline3->SetMarkerColor(kBlue);
95 spline3->SetMarkerStyle(20);
96 spline3->SetMarkerSize(1.5);
99 spline3->Draw(
"lcpsame");
101 sprintf(text,
"%3d knots",nnp);
102 textn->SetTitle(text);