Ortalamaları ve varyansları göz önüne alındığında Gauss rastgele değerleri döndürecek bir C ++ işlevi yazmaya çalışıyorum.
Ve rand()
arasında rastgele sayılar döndüren bir kütüphane işlevi vardır . sabit bir değere sahip değildir, ancak en az olacağı garanti edilir . PDF'si aynıdır.0
RAND_MAX
RAND_MAX
Bunu rand()
bir Gauss değişkenine dönüştürmek için Merkezi Limit Teoremini kullanıyorum . Tam olarak ne yapıyorum rand()
bir kullanıcı tarafından belirtilen kez çağırmak , sonra dönüş değerlerini toplamak, sonra ortalamasını kullanıcı tarafından belirtilen ortalamaya kaydırmaktır.
Yukarıdaki çizimde, Gaussian rastgele oluşturucumu kez aradım ve dönüş değerlerinin frekanslarını çizdim. Gördüğünüz gibi, varyansı çok büyük, çünkü diğer birçok rastgele değerin toplamı tarafından yaratıldı.
Gaussian PDF ve belirtilen ortalama değeri olan Gauss değişkenini başarıyla döndürür. Ancak, sorun onun varyansıdır. Bu noktada takılıp kaldım, çünkü kullanıcı tarafından belirtilen değere olan varyansını nasıl değiştireceğimi bilmiyorum.
Bu benim kodum (şimdilik eksik; "Varyans" parametresi yok sayılır):
template <class T>
T Random::GetGaussian(T Mean /*= 0*/, T Variance /*= 1*/)
{
T MeanOfSum = NUM_GAUSSIAN_SUMS / static_cast<T>(2);
T Rand = 0;
for (uint64_t i=0; i<NUM_GAUSSIAN_SUMS; i++)
{
Rand += static_cast<T>(rand()) / RAND_MAX;
}
return Rand - (MeanOfSum - Mean);
}
Bunun NUM_GAUSSIAN_SUMS
100 ve RAND_MAX
32767 olduğunu varsayın .
İşlevin parametresine göre rastgele değişkenin varyansını değiştirmek istiyorum. Sorum şu: Bu rastgele değişkenin varyansını nasıl değiştirebilirim? Nasıl yapabilirim?