16 TCanvas *SimpleFitting(){
17 TCanvas *c1 =
new TCanvas(
"c1",
"Curve Fitting",700,500);
21 TMultiGraph *mg =
new TMultiGraph();
30 for (Int_t i = 0; i < n; i++) {
31 x1[i] = rg.Uniform(0, 1);
32 y1[i] = TMath::Power(x1[i], 3) + rg.Gaus() * 0.06;
35 TGraph *gr1 =
new TGraph(n,x1,y1);
36 gr1->SetMarkerColor(kBlue);
37 gr1->SetMarkerStyle(8);
38 gr1->SetMarkerSize(1);
42 TF1 *f_known=
new TF1(
"f_known",
"pow(x,3)",0,1);
43 TGraph *gr2 =
new TGraph(f_known);
44 gr2->SetMarkerColor(kRed);
45 gr2->SetMarkerStyle(8);
46 gr2->SetMarkerSize(1);
49 ROOT::R::TRInterface &r=ROOT::R::TRInterface::Instance();
50 r[
"x"]<<TVectorD(n, x1);
51 r[
"y"]<<TVectorD(n, y1);
53 r<<
"ds<-data.frame(x=x,y=y)";
55 r<<
"m <- nls(y ~ I(x^power),data = ds, start = list(power = 1),trace = T)";
58 r[
"summary(m)$coefficients[1]"]>>power;
60 TF1 *f_fitted=
new TF1(
"f_fitted",
"pow(x,[0])",0,1);
61 f_fitted->SetParameter(0,power);
63 TGraph *gr3 =
new TGraph(f_fitted);
64 gr3->SetMarkerColor(kGreen);
65 gr3->SetMarkerStyle(8);
66 gr3->SetMarkerSize(1);
72 TPaveText *pt =
new TPaveText(0.1,0.6,0.5,0.9,
"brNDC");
75 pt->AddText(
"Fitting x^power ");
76 pt->AddText(
" \"Blue\" Points with gaussian noise to be fitted");
77 pt->AddText(
" \"Red\" Known function x^3");
79 fmsg.Form(
" \"Green\" Fitted function with power=%.4lf",power);