【问题标题】:C++ Root library - TF1.GetRandom() function not working properlyC++ 根库 - TF1.GetRandom() 函数无法正常工作
【发布时间】:2020-04-14 01:53:26
【问题描述】:

我将 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 函数的作用或其他错误?

【问题讨论】:

  • 什么是TF1?一些TensorFlow 类型或你写的东西?
  • @KorelK 它是根库的类部分,来自 CERN。 root.cern.ch/doc/master/classTF1.html
  • 注意你用root标记了这个问题,这里指的是unix root用户和这个Root库。
  • @KorelK 我添加了正确的标签。老实说,我很惊讶 unix 用户 root 获得了标签的优先权。作为标签,它并没有真正的用处。
  • @guia4273 我自己不使用 ROOT,但文档指出 GetRandom 返回随机值,其分布由曲线指定。它并不是说将随机的x 值插入到公式中。

标签: c++ root-framework


【解决方案1】:

在您的示例中,f1-&gt;GetRandom 返回0.2*M_PI, 0.5*M_PI 范围内的值。每个值的密度由函数f1 描述:如果您要求GetRandom 提供足够的值,它们的相对出现将匹配f1 的形状。

【讨论】:

    【解决方案2】:

    正如@walnut 所说,GetRandom 返回随机值,其分布由曲线指定,而不是对应公式的值返回随机“x”值。问题解决了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2017-12-15
      • 2013-03-27
      • 2012-08-15
      相关资源
      最近更新 更多