在ROOT Cern上进行Picewise适合,范围不受尊重

时间:2017-03-13 21:22:29

标签: c++ parameters curve-fitting data-fitting root-framework

我试图使用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的拟合应该是函数

enter image description here

尽管如此,该程序并不尊重我为vi2所做的范围。也就是说,它确实适合维特,就好像我根本没有给出任何范围。

考虑到我为vi2提供的范围,我如何强制ROOT适合vtot?

我不能直接在vitot上设置范围,因为它只适合那部分数据,而我试图使所有数据都适合不同的功能。

我已经给出了选项" R"正如你所看到的那样,但这似乎还不够。

1 个答案:

答案 0 :(得分:1)

您希望ROOT在最初提供的范围html code- <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <script src="script.js"></script> <body ng-app="test" ng-controller="test"> <table style="width:100%;overflow: scroll; border: 2px solid #AAA; "> <thead style="border-bottom: 1px solid #AAA"> <tr> <th style="width:50%">&nbsp;&nbsp;<input type='checkbox'/>&nbsp;&nbsp; catalog</th> <th style="width:25%">currentVersion</th> <th style="width:25%">new Version</th> </tr> </thead> <tbody style="color: #007db8;"> <tr ng-repeat="item in items" ng-attr-id="item.id"> <td style="width:50%"> &nbsp;&nbsp;<input type='checkbox' ng-model="dummyModel[item.id]" ng-change="selectItem(item)"/>&nbsp;&nbsp;{{ item.catalog }} </td> <td style="width:25%">{{ item.currentVersion }}</td> <td style="width:25%">{{ item.newVersion }}</td> </tr> </tbody> </table> <button style="font-size: 11px;" type="button" class="btn btn-primary" ng-click="update()" >Update</button> </body> 之外为vi2函数设置一些“默认”值。在您的情况下,您希望“默认”值为0,但一般来说,我认为ROOT不应该假设任何东西。不确定ROOT开发人员是否使用了相同的逻辑,但不太可能按照您的预期实现功能总和。然而,可以直接为0 < x < 0.05编写一个自定义C函数,它可以满足您想要的任何范围。只需查看https://root.cern.ch/doc/master/classTF1.html上的TF1文档的“带参数的通用C函数”部分