Generator liczb pseudolosowych (cz.3) – rozkład Cauchy’ego

Witajcie, zgodnie z obietnicą, w tym odcinku generujemy liczby losowe z rozkładu Cauchy’ego.

Jak w poprzednim odcinku, użyjemy generatora rozkładu równomiernego. Kod metody getFromCauchyDistribution() wygląda następująco:

double RandomNumberGenerator::getFromCauchyDistribution() {

    // generuj X o rozkładzie równomiernym U(-1,1)
    double X = getFromUniformDistribution() * 2 - 1;

    // generuj X o rozkładzie równomiernym U(0,1)
    double U = getFromUniformDistribution();

    if ((U + 0.27324) * (1 + X * X) > 1.27324) {
        X = getFromUniformDistribution() * 2 - 1;
    }

    // uzupelnienie rozkładu o "ramiona"
    if (getFromUniformDistribution() > 0.5) {
        return X;
    } else {
        if (X != 0) {
            return (1 / X);
        } else {
            return MAXDOUBLE;
        }
    }
}


Przerabiając nieco program z poprzedniego odcinka generujący dane statystyczne, otrzymamy dane potrzebne do narysowania histogramu. Otrzymane wyniki porównamy z tymi, które dostarczył nam generator rozkładu normalnego.

random-rozklady

Jak nietrudno się domyślić, ten pomarańczowy wykres to histogram dla liczb z rozkładu normalnego a niebieski – z Cauchy’ego.

Podziel się:
Facebooktwittergoogle_plusredditpinterestlinkedintumblrmail

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *