生成范围内的正态分布称量常数

时间:2014-06-05 08:32:15

标签: c++ normal-distribution

我有一些结果,其相关性随着距离而减少。我想用结果接近正态或折叠法线的常量对结果数组元素进行加权。在开始时,我想通过一个函数生成一个N个常数从1到0.01的数组。

结果应该类似于以下内容,以接近0.01的数字结尾。

const double normalDistWeight[] = { 
    1.000, 0.997, 0.994, 0.989, 0.984, 0.977, 0.970, 0.961, 0.951, 0.939,
    0.926, 0.910, 0.893, 0.874, 0.853, 0.830, 0.805, 0.778, 0.750, 0.719,
    0.687, 0.654, 0.619, 0.584, 0.548, 0.512, 0.476, 0.440, 0.405, 0.370,
    0.337, 0.305, 0.274, 0.246, 0.219, 0.194, 0.171, 0.150, 0.131, 0.114,
    0.098, 0.085, 0.073, 0.063, 0.054, 0.047, 0.040, 0.035, 0.030, 0.027
};

不幸的是,我不能使用任何第三方库或C ++ 11功能,只能使用普通的C ++。

编辑:哦,我过度思考了......它只是一个简单的高斯错误,所以exp(-x ^ 2)应该有效。

1 个答案:

答案 0 :(得分:1)

在我看来,你想要的只是一个Gaussian function值的数组,对应于正半轴上均匀间隔的点,直到值约为0.01的点。

这是直截了当的。高斯函数是 f x )= exp( - x 2 ),如下所示:

Gaussian function, from MathWorld

在选择的表达式中,我们已经有 f (0)= 1,所以剩下的就是找到最终点 x 我们有 f X )= 0.01。反转: x =√-log(0.01)≈2.15。

所以你需要做的就是在[0,2.15]区间的均匀间隔点上评估 f