我试图使用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的拟合应该是函数
尽管如此,该程序并不尊重我为vi2所做的范围。也就是说,它确实适合维特,就好像我根本没有给出任何范围。
考虑到我为vi2提供的范围,我如何强制ROOT适合vtot?
我不能直接在vitot上设置范围,因为它只适合那部分数据,而我试图使所有数据都适合不同的功能。
我已经给出了选项" R"正如你所看到的那样,但这似乎还不够。
答案 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%"> <input type='checkbox'/> 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%">
<input type='checkbox' ng-model="dummyModel[item.id]" ng-change="selectItem(item)"/> {{ 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函数”部分