多項式でフィットしたい(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は二次関数(放物線)でフィットします。