2015-10-19 46 views
1

我有4个部分,每个部分10000次,这应该适合情况,并且通过在每个分布的附加维度中随机生成数字,统一,正态和三角分布给出部分的尺寸。Java中的三角形分布

对于每4个零件有决定它们是否合适。但这应该不成问题。

我已经成功在某种程度上做匀速和正态分布:

public double uniformDistrubution(double min, double max) { 
    Random rand = new Random(); 
    return Math.random() * max + min; 
} 

public double normalDistrubution(double mean, double std) { 
    Random rng = new Random(); 
    return mean + std * rng.nextGaussian(); 
} 

但我想不通的三角之一。我已经尺寸为它:

一个= 7:6,B = 8:0,C = 8:4

+0

有你'uniformDistribution'方法的一个严重问题。返回值应该是'(max - min)* Math.random()+ min' - 您需要按范围缩放,而不是'max'。此外,你从不使用Random()对象,你应该删除该行。并根据@ Tunaki的建议,使'Random()'对象为'static'并在'normalDistribution'的方法之外实例化它。 – pjs

+0

是的,当我调试时,发现它也没有检查尺寸:)无论如何谢谢 –

回答

3

把代码this Wikipedia formula,可以产生与三角分布以下:

public double triangularDistribution(double a, double b, double c) { 
    double F = (c - a)/(b - a); 
    double rand = Math.random(); 
    if (rand < F) { 
     return a + Math.sqrt(rand * (b - a) * (c - a)); 
    } else { 
     return b - Math.sqrt((1 - rand) * (b - a) * (b - c)); 
    } 
} 

作为一个方面说明,在正态分布,你不应该创建一个Random对象每次:创建它只有一次,重复使用。

+0

非常感谢Tunaki。你是救世主:) –