概要
xの値の範囲を決め、そのxに対する計算式または関数を指定してx-yグラフを描画する。
これにはCERN ROOTのclass TF1を使う。
実行環境
sw_vers
ProductName: macOS
ProductVersion: 14.6.1
BuildVersion: 23G93
root --version
ROOT Version: 6.32.06
Built for macosxarm64 on Sep 21 2024, 18:21:53
From tags/6-32-06@6-32-06
計算式を文字列で与える
root [0] auto tf = new TF1("sin","TMath::Sin(x)", 0,10);
root [1] tf->Draw();
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
root [2]
"TMath::Sin(x)"
が計算式です。2次関数なら"x*x+3*x+1"
となどとできます。ROOTで使える関数ならいろいろな関数を含めた計算式が指定できます。
第3、4の引数がx
の値の範囲です。
また、計算した(x,y)の点をマーカーで表示したい場合は次のようにします。
root [0] auto tf = new TF1("sin","TMath::Sin(x)", 0,10);
root [1] tf->SetMarkerStyle(20);
root [2] tf->Draw("pl");
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
root [3]
計算しているx座標の数を指定することが次のようにするとできます。
root [3] tf->SetNpx(30);
Draw
を実行しなくても即座にグラフへ反映されます。マーカーを数えたら30有りました。
パラメータ付き計算式
2次関数$ax^2+bx+c$の$a,b,c$をパラメータとする。
root [0] auto tf = new TF1("xx","[0]*x*x+[1]*x+[2]", -10,10);
root [1] tf->SetParameters(1,-2,-10);
root [2] tf->Draw();
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
root [3]
[0],[1],[2]
がそれぞれ$a,b,c$を表している。SetParameters
の引数が順番に
[0],[1],[2]
へ値を設定している。Draw
の後にSetParameters
で値を変更すると即座にグラフが更新される。また、個別にパラメータを変更したい場合はtr->SetParameter(0,3);
とすると[0]
の値が3に変更されグラフも更新される。
計算式をCの関数として定義
上記と同様の2次関数をCの関数で計算する例を示します。
root [0] Double_t func(Double_t *x, Double_t *p){Double_t xx = *x; return p[0]*xx*xx+p[1]*xx+p[2];}
root [1] auto tf = new TF1("xx",func, -10,10, 3);
root [2] tf->SetParameters(1,-2,-10);
root [3] tf->Draw();
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
root [4]
計算する関数をDouble_t 関数名(Double_t *x, Double_t *p)
として定義します。TF1
の第5引数の値の数だけのパラメータをSetParamters
などで設定した値が p
に渡されます。パラメータが無いときは第5引数に0指定するか省略します。
終わりに
使用は限定されますが、TGraph
より簡便に使えます。また、計算式の設定の仕方は上記以外にも幾つかあります。