C++ 创建给定最小值、最大值和长度的曲线

C++ 创建给定最小值、最大值和长度的曲线,c++,normal-distribution,bell-curve,C++,Normal Distribution,Bell Curve,我得到了所需的最小值、最大值和数组长度。如何生成适合此数组的正态分布/钟形曲线的数字,以及指定的最小值和最大值 i、 e 最低:0 最高:6 长度=7 结果:[0,2,4,6,4,2,0] 我知道我可以在最小值和最大值之间线性插值到中间,然后在相反的方向回到数组末尾的最小值。然而,有没有一种方法可以通过发行版来做到这一点?然后从中提取值 i、 我是这样想的 max - min = diff diff / (length/2) = increment [min + increment*index

我得到了所需的最小值、最大值和数组长度。如何生成适合此数组的正态分布/钟形曲线的数字,以及指定的最小值和最大值

i、 e

最低:0 最高:6 长度=7

结果:[0,2,4,6,4,2,0]

我知道我可以在最小值和最大值之间线性插值到中间,然后在相反的方向回到数组末尾的最小值。然而,有没有一种方法可以通过发行版来做到这一点?然后从中提取值

i、 我是这样想的

max - min  = diff
diff / (length/2) = increment
[min + increment*index, ..., max, max - increment*index, ..., min ] 

如果您的问题真的是使用三角形形状的值生成一个数组,那么除了您建议的简单循环之外,没有什么可以做的了。您甚至可以编写一个返回fk的函数。例如:

double get_kth_value(double min, double max, int length, int k) {
    int mid = length/2;
    if (k < mid) {
         return min + (max - min) * k / mid;
    } else {
         return min + (max - min) * (length - 1 - k) / mid;
    }
}
当你说:

然而,有没有一种方法可以通过发行版来做到这一点?然后拉 它的价值观

我不知道你是不是在暗示你的问题有点不同。措辞表明您希望根据给定的分布进行采样。也就是说,你想计算x的y=fx,一个均匀的随机变量,得到给定y的概率由给定的分布,钟形分布,二项式分布,三角形分布,等等来规定。然后它变得更加有趣,尽管它是超古典的

通用的大锤是。你计算了累积分布函数,就这样。对于你建议的三角形,这很简单。基本上你会想要

double t = 2*uniformly_random_double_in_01()-1;
double y = breadth/2*(1-sqrt(1-fabs(1-t)))*(1-2*(t<0));
请原谅我没有正确调整边界的懒惰,你也需要一些东西,特别是如果你想要整数值的话

对于钟形曲线,有多种选择:

如果你对没有大脑的方法感到满意,你可能会尝试并截断结果。 如果你想得到与二项分布相关的东西,那么也有一些方法。看见
钟形曲线没有最小值和最大值。有一个平均值和标准差。从技术上讲,尾部是正无穷大和负无穷大。你们的输出更像是一个三角形的波形。@CoryKramer,对了,明白了。如果绘制,我希望阵列本身模仿钟形曲线的形状。看我的例子,近似值有个问题,因为[0,0,1,6,1,0,0]也是符合条件的钟形曲线