在 ROOT Cern 上分段拟合,范围不受尊重
Picewise fit on ROOT Cern, ranges not respected
我正在尝试使用 TF1 的总和来拟合 ROOT Cern 上的分段函数。这是代码的重要部分。
TCanvas *cvi = new TCanvas("V(i)","V(i)",200,10,600,400);
TGraphErrors *gvi = new TGraphErrors(27,i,V,si,sV);
TF1 *vi1 = new TF1("vi1","[0]*log(x*[1]+1)");
gvi->Fit(vi1,"MR+");
TF1 *vi2 = new TF1("vi2","[0]*x+[1]",0.005,0.012);
gvi->Fit(vi2,"MR+");
TF1 *vitot = new TF1("vi1+vi2","vi1+vi2");
gvi->Fit(vitot,"MR+");
vi1 和 vi2 的拟合很好,但是,如您所见,vi2 有一个范围,因此与 vtot 的拟合应该是函数
尽管如此,该程序在执行 fit vitot 时不遵守我为 vi2 提供的范围。也就是说,它适合 vitot,就好像我根本没有给出范围一样。
考虑到我为 vi2 提供的范围,如何强制 ROOT 适合 vtot?
我不能直接在 vitot 上设置一个范围,因为它只能适合那部分数据,而我试图用不同的函数来适应所有数据。
如您所见,我已经给出了 "R" 选项,但这似乎还不够。
您似乎希望 ROOT 为 vi2
函数假定初始提供范围 0 < x < 0.05
之外的某些 "default" 值。在您的情况下,您希望 "default" 值为 0,但总的来说,我认为 ROOT 不应该假设任何东西。不确定 ROOT 开发人员是否使用了相同的逻辑,但功能总和不太可能按照您的预期实现。尽管如此,为 vitot
编写一个自定义 C 函数是直截了当的,它会尊重您想要的任何范围。只需查看位于 https://root.cern.ch/doc/master/classTF1.html
的 TF1 文档的 "A general C function with parameters" 部分
我正在尝试使用 TF1 的总和来拟合 ROOT Cern 上的分段函数。这是代码的重要部分。
TCanvas *cvi = new TCanvas("V(i)","V(i)",200,10,600,400);
TGraphErrors *gvi = new TGraphErrors(27,i,V,si,sV);
TF1 *vi1 = new TF1("vi1","[0]*log(x*[1]+1)");
gvi->Fit(vi1,"MR+");
TF1 *vi2 = new TF1("vi2","[0]*x+[1]",0.005,0.012);
gvi->Fit(vi2,"MR+");
TF1 *vitot = new TF1("vi1+vi2","vi1+vi2");
gvi->Fit(vitot,"MR+");
vi1 和 vi2 的拟合很好,但是,如您所见,vi2 有一个范围,因此与 vtot 的拟合应该是函数
尽管如此,该程序在执行 fit vitot 时不遵守我为 vi2 提供的范围。也就是说,它适合 vitot,就好像我根本没有给出范围一样。
考虑到我为 vi2 提供的范围,如何强制 ROOT 适合 vtot?
我不能直接在 vitot 上设置一个范围,因为它只能适合那部分数据,而我试图用不同的函数来适应所有数据。
如您所见,我已经给出了 "R" 选项,但这似乎还不够。
您似乎希望 ROOT 为 vi2
函数假定初始提供范围 0 < x < 0.05
之外的某些 "default" 值。在您的情况下,您希望 "default" 值为 0,但总的来说,我认为 ROOT 不应该假设任何东西。不确定 ROOT 开发人员是否使用了相同的逻辑,但功能总和不太可能按照您的预期实现。尽管如此,为 vitot
编写一个自定义 C 函数是直截了当的,它会尊重您想要的任何范围。只需查看位于 https://root.cern.ch/doc/master/classTF1.html