【发布时间】:2011-11-22 18:43:20
【问题描述】:
我很难理解如何在 boost 中使用二项式和正态(高斯)分布。我需要从这些函数中获取单个值。我确定我目前可能正在错误地尝试使用这些功能,但这是我目前所拥有的:
#include <boost/math/distributions.hpp>
#include <boost/math/tools/roots.hpp>
#include <boost/random/variate_generator.hpp>
#include <boost/random.hpp>
//valueH is assigned before
int value;
/* Should this assign value to "value" ?*/
value = boost::math::binomial_distribution<> value(1,valueH);
正态分布为
normal norm;
double someValue = boost::math::pdf(norm, (value1*value2+value3)/(value1*sqrt(value2)));
或者我应该在这里使用 boost::math::normal_distribution 还是它是如何工作的?我已经阅读了 boost 文档,但我仍然不知道如何从分布中分配值。我也读过 C++ TR1: how to use the normal_distribution? 所以我是否需要使用一些随机数生成器并生成链接显示的数字,这是否允许我为变量分配单个值?
如果这条信息有点混乱,我很抱歉,但无论如何谢谢!
好的,到目前为止,我已经理解了二项式并让它工作,现在我需要让正态分布工作......参考上面的链接,我的情况与我只需要一个值但我想调用 normal有值的分布。就像“给我 N(0.1) 和数字 2 左右。
好吧,我认为这变得越来越容易,但似乎不是我想使用提升二等分函数Bisection 但问题是有时我只有函数,最小值和最大值,而二等分函数至少需要 4 arguments 第 4 个参数是 Tol tol.. 这是某种公差,但如果我想找到一个绝对值,或者我需要用 3 个参数编写自己的二等分,我可以将它分配给 0 吗?
【问题讨论】:
-
Boost documentation中有完整的例子。
-
是的,但是让我们进行二项式翻转(翻转,成功分数); “翻转”是否包括通话后的值,还是我必须以某种方式从翻转中提取二项式值?
-
一旦创建,
flip就是一个代表分布的对象。您可以对其执行任何您想要的操作——参见示例。 -
哦,对了,这似乎奏效了。我对如何使用它有完全错误的想法,谢谢大卫!无论如何,现在我有一个不同的问题。我需要形成一个矩阵并使用二项分布生成随机数。我找不到获取数字 B(n,p) 的函数?我假设我可以通过使用随机数生成器作为“mt19937”来解决随机数问题,并在每次创建新值之前播种它?
-
是的,但不要每次都播种。只需播种一次。