我需要编写一个返回IEnumerable>的函数。其中每个元组代表生成范围的每个成员,以及与倾斜分布的概率近似的相应概率。
我设想了一个函数签名:
IEnumerable<Tuple<double, double>> SkewedRange(double min, double max, double mean, double step = 1.0)
例如,1.0到10.0之间的范围,平均值为2.3,默认步骤为1.0,我想要一个像这样的值列表:
Item1 Item2 Histogram (for demo only)
1.0 p1 *****
2.0 p2 *********
3.0 p3 *******
4.0 p3 *****
5.0 p3 ***
6.0 p3 **
7.0 p3 **
8.0 p3 *
9.0 p3 *
10.0 p10 *
这些值的结果图将类似于偏差分布,其峰值在2-3之间。
问题:
答案 0 :(得分:0)
您要求的是从分布中采样,该分布被截断到给定范围并且在该范围内具有其模式(最大密度)。
我认为它与分发的确切含义并不重要。所以我假设截断的正态分布是可以的。
让a和b成为一些数字。这些描述了凹凸。设c和d为其他数字。这些指定了范围。
设x是来自正态分布的随机样本,均值为0,方差为1.在C#中可能存在这样的函数,但我不知道它的名称。然后a + b x也是正常的,其中均值a和方差b ^ 2。
如果a + b x介于c和d之间,则将其输出为一个样本。否则再试一次,直到你得到一个介于c和d之间的数字。
您可以改变a,b,c和d,看看你得到了什么。希望这会有所帮助。