16 Temmuz 2018 Pazartesi

std::normal_distribution Sınıfı - Gaussian Distribution

Giriş
Şu satırı dahil ederiz.
#include <random>
uniform_real_distribution ve uniform_int_distribution sınıfları ile kardeştir.

"Standart normal distribution" tanım olarak standart sapma = 1 değerini kullanır. Standart sapma büyüdükçe çan eğrisi denilen görüntü düzleşmeye başlar.

Dağılım Aralığı
Açıklaması şöyle.
The possible values under a normal distribution extend from −∞ to ∞
Dolayısıyla Normal distribution ile sadece artı sayıları kullanmak doğru değil deniliyor. Ancak bu bence doğru değil. Açıklaması şöyle.
Many quantities that are strictly positive can often be approximated by a normal distribution.
Bir başka açıklama şöyle.
Gaussian distributions are validly used as models for a lot of things that don't even in principle extend to infinity (test scores?). A physics example: velocities are actually bounded by ±c, but a Gaussian velocity distribution describes well gases at room temperature.
Simetri
Orta noktanın sol ve sağ tarafı simetrik olmalıdır. Açıklaması şöyle.
Normal distributions are symmetric about their mean,

Constructor - mean + standard deviation
Birinci parametre mean, ikinci parametre standard deviation anlamına gelir

Örnek
Şöyle yaparız.
// Define random generator with Gaussian distribution
const double mean = 0.0;
const double stddev = 0.1;
std::normal_distribution<double> dist (mean, stddev);
Örnek
Şöyle yaparız.
std::normal_distribution<float> normalDistribution(0.5, 1);
operator ()
Şöyle yaparız.
std::default_random_engine generator = ...;
dist (generator);
Generator sınıfını sürekli geçmemek için şöyle yapabiliriz.
auto dist = std::bind(std::normal_distribution<double>{mean, stddev},
                      std::mt19937(std::random_device{}()));
Daha sonra şöyle yaparız.
double val = dist();
Kalıtım
distribution sınıfları arasında kalıtım ilişkisi yok. Oluşturmak istersek çoklu kalıtım kullanarak şöyle yaparız.
class base_distribution {};

template<typename ...Args>
class normal_distribution :
public base_distribution, public std::normal_distribution<Args...> {};

template<typename ...Args>
class uniform_int_distribution :
public base_distribution, public std::inform_int_distribution<Args...> {};

Hiç yorum yok:

Yorum Gönder