三角随机数发生器
Triangular random number generator
我了解如何生成从 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));
}
}
你还没有说出你想要达到的目标。通过查看那篇维基百科文章,如果你想为 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));}
我了解如何生成从 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));
}
}
你还没有说出你想要达到的目标。通过查看那篇维基百科文章,如果你想为 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));}