多項式でフィットしたい(TF1 with "pol"

 1#include <TGraphErrors.h>
 2#include <TF1.h>
 3#include <TRandom3.h>
 4
 5const int n = 50;
 6double x[n], y[n], ey[n];
 7TRandom3 random;
 8
 9for (int i = 0; i < n; i++) {
10    x[i] = 20 + (60.0 / n) * i;
11    y[i] = 2 * x[i] + 100;
12    ey[i] = 5;
13}
14
15TGraphErrors *g = new TGraphErrors(n, x, y, nullptr, ey);
16TF1 *f = new TF1("polynomial", "pol1", 20, 80);
17g->Fit(f);

多項式関数"pol<n>"でデータをフィットできます。 <n>は多項式の次数を指定してください。

定数でフィットしたい(pol0

 1#include <TGraphErrors.h>
 2#include <TF1.h>
 3
 4const int n = 50;
 5double x[n], y[n], ey[n];
 6
 7for (int i = 0; i < n; i++) {
 8    x[i] = 20 + (60.0 / n) * i;
 9    y[i] = 50;
10    ey[i] = 2;
11}
12
13TGraphErrors *g = new TGraphErrors(n, x, y, nullptr, ey);
14TF1 *f = new TF1("polynomial", "pol0", 20, 80);
15g->Fit(f);

pol0は定数でフィットします。

一次関数でフィットしたい(pol1

 1#include <TGraphErrors.h>
 2#include <TF1.h>
 3
 4const int n = 50;
 5double x[n], y[n], ey[n];
 6
 7for (int i = 0; i < n; i++) {
 8    x[i] = 20 + (60.0 / n) * i;
 9    y[i] = 2 * x[i] + 100;
10    ey[i] = 3;
11}
12
13TGraphErrors *g = new TGraphErrors(n, x, y, nullptr, ey);
14TF1 *f = new TF1("polynomial", "pol1", 20, 80);
15g->Fit(f);

pol1は一次関数(直線)でフィットします。

二次関数でフィットしたい(pol2

 1#include <TGraphErrors.h>
 2#include <TF1.h>
 3
 4const int n = 50;
 5double x[n], y[n], ey[n];
 6
 7for (int i = 0; i < n; i++) {
 8    x[i] = 20 + (60.0 / n) * i;
 9    y[i] = x[i] * x[i] - 50 * x[i] + 3000;
10    ey[i] = 10;
11}
12
13TGraphErrors *g = new TGraphErrors(n, x, y, nullptr, ey);
14TF1 *f = new TF1("polynomial", "pol2", 20, 80);
15g->Fit(f);

pol2は二次関数(放物線)でフィットします。