ガウス関数でフィットしたい(TF1::Fit with "gaus"

 1#include <TH1D.h>
 2#include <TF1.h>
 3#include <TRandom3.h>
 4#include <TCanvas.h>
 5
 6// テスト用にガウス分布のヒストグラムを作成
 7TH1D *h = new TH1D("h", "Gaussian Distribution", 100, 0, 100);
 8
 9TRandom3 random;
10for (int i = 0; i < 10000; i++) {
11    h->Fill(random.Gaus(50, 10));
12}
13
14// ガウス関数を定義してフィッティング
15TF1 *gaussian = new TF1("gaussian", "gaus", 20, 80);
16h->Fit(gaussian);
17
18TCanvas *c = new TCanvas("c", "canvas", 800, 600);
19h->Draw();
20gaussian->Draw("same");

ガウス関数"gaus"を使用してヒストグラムをフィットします。 "gaus"はROOTが提供する組み込み関数で、3つのパラメーター(正規化、平均値、標準偏差)を持ちます。

 1from ROOT import TH1D, TF1, TRandom3, TCanvas
 2
 3# テスト用にガウス分布のヒストグラムを作成
 4h = TH1D("h", "Gaussian Distribution", 100, 0, 100)
 5
 6random = TRandom3()
 7for i in range(10000):
 8    h.Fill(random.Gaus(50, 10))
 9
10# ガウス関数を定義してフィッティング
11gaussian = TF1("gaussian", "gaus", 20, 80)
12h.Fit(gaussian)
13
14c = TCanvas("c", "canvas", 800, 600)
15h.Draw()
16gaussian.Draw("same")

ガウス関数

\[f(x) = N \cdot \exp\left( - \frac{ (x- \mu)^{2}}{ 2 \sigma^{2} } \right)\]

パラメーター

ガウス関数"gaus"は以下の3つのパラメーターで定義されます。

パラメーター

インデックス

説明

デフォルト値

\(N\) : 正規化係数(Normalization)

[0]

ガウス曲線の高さ

ヒストグラムから自動設定

\(\mu\) : 平均値(Mean)

[1]

分布の中心

ヒストグラムから自動設定

\(\sigma\) : 標準偏差(Sigma)

[2]

分布の幅

ヒストグラムから自動設定

複数のガウス関数でフィットしたい

 1#include <TH1D.h>
 2#include <TF1.h>
 3#include <TRandom3.h>
 4
 5// テスト用 : 2つのピークを持つヒストグラムを作成
 6TH1D *h = new TH1D("h", "bimodal data", 100, -10, 10);
 7
 8TRandom3 random;
 9for (int i = 0; i < 5000; i++) {
10    if (random.Uniform() < 0.5) {
11        h->Fill(random.Gaus(-3, 1));
12    } else {
13        h->Fill(random.Gaus(3, 1));
14    }
15}
16
17// 2つのガウス関数の和
18TF1 *f = new TF1("f", "gaus(0) + gaus(3)", -10, 10);
19
20// 各ガウス関数のパラメーターを初期化
21f->SetParameter(0, 250);   // 第1ガウスの正規化
22f->SetParameter(1, -3);    // 第1ガウスの平均値
23f->SetParameter(2, 1);     // 第1ガウスの標準偏差
24
25f->SetParameter(3, 250);   // 第2ガウスの正規化
26f->SetParameter(4, 3);     // 第2ガウスの平均値
27f->SetParameter(5, 1);     // 第2ガウスの標準偏差
28
29h->Fit(f);
30f->Draw();

複数のガウス関数を組み合わせることで、複雑な分布をフィットできます。

関連メソッド

参考リンク