Algorithme pour distribuer plus * partie * d'une distribution normale
-
21-09-2019 - |
Question
Y at-il un algorithme passe unique qui peut produire des chiffres répartis sur partie d'une distribution normale (gaussienne)?
Je veux spécifier une valeur de base (le centre de la distribution), un écart-type, et un valeurs min et max.
Par exemple je pourrais vouloir toutes les valeurs à répartir entre -0,5 et +1 écarts types dans le même rapport que l'on trouverait dans une distribution normale (évidemment augmentée pour tenir compte des queues manquantes).
Il est évident que l'on peut utiliser une boucle et la sortie que si le nombre généré était entre le minimum et le maximum, mais qui pourrait se poursuivre pendant une longue période si min / max sont trop rapprochés ou trop loin le long d'une queue.
Je suppose une langue avec une gaussienne de nombres aléatoires (j'utilise Java, mais peut lire presque tout).
La solution
Vous pouvez calculer erf pour la gaussienne donnée aux points minimum et maximum d'intérêt, générer le nombre aléatoire (uniformément) entre ces deux valeurs, et prendre erf
inverse.
Je sais que la bibliothèque Apache a une fonction erf
en Java, voir ici , mais je ne suis pas sûr où vous point pour l'inverse de erf
(pire des cas, bien sûr, vous pouvez calculer cette dernière avec Newton-Raphson).
(j'ai trouvé un algorithme pour inverse erf
, avec la mise en œuvre Java , mais ne peut pas se porter garant de sa qualité).