我理解如何生成从0到1的随机P值以及此处指定的函数:
http://en.wikipedia.org/wiki/Triangular_distribution
但是当编写代码(C#)时,我会陷入if语句,不知道怎么写它们,因为在我的情况下,最小值,模式和最大值将是3,8和14,而P值总是0到1.我明白我没理解数学中非常基本的东西,但我会很感激一些指导。
编辑:这是代码,当然需要替换if语句。
public double a, b, c, F, P;
private Random pRandom = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);
public double Tri(double a, double b, double c)
{
F = (c - a) / (b - a);
P = 1.0e-6 * (double)pRandom.Next(1000000);
if (P > 0 && P < (F))
{
return a + Math.Sqrt(P * (b - a) * (c - a));
}
else
{
return b - Math.Sqrt((1 - P) * (b - a) * (b-c));
}
}
答案 0 :(得分:-1)
你还没有说出你想要达到的目标。从查看维基百科的文章,如果你想为x生成不同的值,在我看来,你需要说一些像,
if (rand < f(a,b,c)) { x = a + Math.Sqrt(rand * (b-a) * (c-a)); } else { x = b - Math.Sqrt((1 - rand) * (b-a) * (b-c));}