Generowanie liczb o rozkładzie normalnym z parametrami

0

Witam,
potrzebuję funkcję która będzie mi generowała liczby pseudolosowe o rozkładzie normalnym, tak abym mógł podać swoje parametry średniej i odchylenia. Niestety metoda nextGaussian nie przyjmuje żadnych argumentów. Nie mam pojęcia jak się za to zabrać.

Pozdrawiam

2

nextGaussian zwraca liczby losowe o średniej 0 i odchyleniu 1. Aby zmienić średnią dodajesz, a aby zmienić odchylenie mnożysz.
Czyli przykładowo:
r.nextGaussian() * 100 + 500;
Oznacza rozkład o średniej 500 i odchyleniu 100.

0

aaa... Dzieki za przydatne info! A ja rozkminiałem metode box'a=mullera, ale nie wiem czy to jest dobrze.

public double NormalDistribution(double mi, double sigma)
    {      
        double u1 = generatorExponential.nextDouble();
        double u2 = generatorExponential.nextDouble();
        
        double z1 = Math.sqrt(-2 * Math.log(u1)) * Math.sin(2 * Math.PI * u2);
        double z2 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);

        double x1 = mi + z1 * sigma;
        double x2 = mi + z2 * sigma;

        return x2;
    } 
1

Po co samemu to implementujesz? Dokładnie tę metodę wykorzystuje Random.nextGaussian:

         
if (haveNextNextGaussian) {
            haveNextNextGaussian = false;
            return nextNextGaussian;
        } else {
            double v1, v2, s;
            do {
                v1 = 2 * nextDouble() - 1; // between -1 and 1
                v2 = 2 * nextDouble() - 1; // between -1 and 1
                s = v1 * v1 + v2 * v2;
            } while (s >= 1 || s == 0);
            double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
            nextNextGaussian = v2 * multiplier;
            haveNextNextGaussian = true;
            return v1 * multiplier;
        }
 } 

Wystarczy, że zrobisz sobie metodę:

    public static double nextGaussian(double mean, double deviation){
        return random.nextGaussian() * deviation + mean;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1