Java中的三角分布

时间:2015-10-19 17:12:19

标签: java random numbers distribution triangular

我有4个零件,每个零件10000次,应该适合大小写,零件的尺寸由均匀,正常和三角形分布给出,通过随机生成每个分布的附加尺寸的数字。

对于每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();
}

但我无法弄清楚三角形的那个。我的尺寸是:

  

a = 7:6,b = 8:0,c = 8:4

2 个答案:

答案 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对象:只创建一次并重复使用它。

答案 1 :(得分:2)

要添加@Tunaki的优秀答案,如果您使用对称三角形进行采样,您可以通过使用具有两个自由度的Irwin-Hall分布(然后按比例缩放)

链接https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution

代码

public double IH2() {
    return Math.random() + Math.random();
}