我正在将GetRandom()函数用于TF1类型(Root library)函数,但无法使其正常工作。 两者都带有此示例:
TF1* f1 = new TF1("f1", "30+x", 0.2*M_PI, 0.5*M_PI);
for(int i = 0; i < N; i++) {
cout << f1->GetRandom(0.2*M_PI, 0.5*M_PI) << endl;
}
,并带有以下示例:
TF1* f1 = new TF1("f1", "cos(x)", 0.2*M_PI, 0.5*M_PI);
for(int i = 0; i < N; i++) {
cout << f1->GetRandom(0.2*M_PI, 0.5*M_PI) << endl;
}
我得到这样的输出:
1.31227
0.933722
0.915021
1.52884
0.83633
1.55911
0.73908
哪个与我期望的值不匹配。在第一个示例中,我希望它输出30.6到31.8之间的数字,第二个在0到0.8之间。 是我误解了GetRandom函数的作用还是其他错误?
答案 0 :(得分:0)
正如@walnut所说,GetRandom返回返回具有曲线指定分布的随机值,而不是将对应公式的值转换为随机“ x”值。问题解决了
答案 1 :(得分:0)
在您的示例中,f1->GetRandom
返回范围为0.2*M_PI, 0.5*M_PI
的值。每个值的密度由函数f1
来描述:如果您要求GetRandom
提供足够的值,则它们的相对出现将与f1
的形状相匹配。