J'essaie d'écrire une fonction C ++ qui renverra des valeurs aléatoires gaussiennes, compte tenu de leurs moyennes et de leurs variances.
Il existe une fonction de bibliothèque rand()
, qui renvoie des nombres aléatoires entre 0
et RAND_MAX
. RAND_MAX
n'a pas de valeur fixe, mais il est garanti qu'elle sera d'au moins . Son PDF est uniforme.
J'utilise le théorème de limite centrale pour transformer cela rand()
en une variable gaussienne. Ce que je fais exactement, c'est appeler rand()
un temps spécifié par un utilisateur, puis additionner ses valeurs de retour, puis déplacer sa moyenne vers la moyenne spécifiée par l'utilisateur.
Dans le tracé ci-dessus, j'ai appelé mon générateur aléatoire gaussien pour fois, et tracé les fréquences de ses valeurs de retour. Comme vous le voyez, sa variance est énorme, car elle est créée par la somme de beaucoup d'autres valeurs aléatoires.
Il renvoie avec succès une variable gaussienne avec un PDF gaussien et avec la valeur moyenne spécifiée. Cependant, le problème est sa variance. Je suis bloqué à ce stade, car je ne sais pas comment modifier sa variance à la valeur spécifiée par l'utilisateur.
Voici mon code (incomplet pour l'instant; le paramètre "Variance" est ignoré):
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);
}
Supposons que ce NUM_GAUSSIAN_SUMS
soit 100 et RAND_MAX
32767.
Je veux changer la variance de la variable aléatoire en fonction du paramètre de la fonction. Ma question est, comment puis-je changer la variance de cette variable aléatoire? Comment puis-je le faire?