C/C 中的累积正态分布函数

新手上路,请多包涵

我想知道数学库中是否内置了统计函数,这些函数是标准 C++ 库(如 cmath)的一部分。如果没有,你们能推荐一个具有累积正态分布函数的好的统计库吗?提前致谢。

更具体地说,我希望使用/创建累积分布函数。

原文由 Tyler Brock 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 944
2 个回答

在我之前回答的人的建议下,我想出了如何使用 gsl 来做到这一点,但后来找到了一个非库解决方案(希望这可以帮助许多像我一样正在寻找它的人):

 #ifndef Pi
#define Pi 3.141592653589793238462643
#endif

double cnd_manual(double x)
{
  double L, K, w ;
  /* constants */
  double const a1 = 0.31938153, a2 = -0.356563782, a3 = 1.781477937;
  double const a4 = -1.821255978, a5 = 1.330274429;

  L = fabs(x);
  K = 1.0 / (1.0 + 0.2316419 * L);
  w = 1.0 - 1.0 / sqrt(2 * Pi) * exp(-L *L / 2) * (a1 * K + a2 * K *K + a3 * pow(K,3) + a4 * pow(K,4) + a5 * pow(K,5));

  if (x < 0 ){
    w= 1.0 - w;
  }
  return w;
}

原文由 Tyler Brock 发布,翻译遵循 CC BY-SA 2.5 许可协议

由于这个问题是在大约 13 年前提出的并且答案已经过时了,到目前为止,要计算正态分布的 cdf,我们可以使用可以从这里下载的 boost 库 https://www.boost.org / 。一旦你安装了最新版本,#include 任何发行版,例如#include “boost/math/distributions/normal.hpp”,你就可以直接使用 cdf。请记住使用命名空间 boost::math。您可以参考此链接以获取更多参考: https ://www.boost.org/doc/libs/1_80_0/boost/math/distributions.hpp

原文由 Khanh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题