J'essaie de générer des nombres aléatoires avec une probabilité non uniforme simple pour imiter des données réalistes à des fins de test. Je suis à la recherche d'une fonction qui accepte mu et sigma comme paramètres et renvoie x où le x de certaines plages suit probablement une courbe en cloche standard, ou à peu près. Il n'a pas besoin d'être super précis ou même efficace. L'ensemble de données résultant n'a pas besoin de correspondre exactement au mu et au sigma que j'ai définis. Je cherche juste un générateur de nombres aléatoires non-uniforme relativement simple. Limiter l'ensemble des valeurs de retour possibles à ints serait bien. J'ai vu beaucoup de suggestions là-bas, mais aucune qui semble correspondre à ce cas simple.exemple d'algorithme pour générer une valeur aléatoire dans un ensemble de données avec une distribution normale?
Répondre
Box-Muller transform en un mot:
Tout d'abord, obtenir deux nombres aléatoires indépendants, uniformes de l'intervalle (0, 1], les appeler U et V.
Ensuite, vous pouvez obtenir deux indépendants, UNIT- nombres aléatoires normaux distribués à partir des formules
X = sqrt(-2 * log(U)) * cos(2 * pi * V);
Y = sqrt(-2 * log(U)) * sin(2 * pi * V);
Cela vous donne IID nombres aléatoires pour mu = 0, sigma = 1; pour définir sigma = s, il faut multiplier vos nombres aléatoires par s, pour définir mu = m, ajouter m à vos nombres aléatoires
Ma première pensée est pourquoi ne pouvez-vous pas utiliser une bibliothèque existante? Je suis sûr que la plupart des langues ont déjà une bibliothèque pour générer des nombres aléatoires normaux.
Si pour une raison quelconque vous ne pouvez pas utiliser une bibliothèque existante, alors la méthode décrite par @ellisbben est assez simple à programmer. Une encore plus simple (approximatif) algorithme est juste pour résumer 12 nombres uniformes:
X = -6 ## We set X to be -mean value of 12 uniforms
for i in 1 to 12:
X += U
La valeur de X est approximativement normal. La figure suivante montre 10^5 tirages de cet algorithme par rapport à la distribution normale.
- 1. Java: Générer un nombre aléatoire avec une distribution logarithmique
- 2. Générer un graphe de distribution normale en utilisant C#
- 3. Générer des nombres aléatoires avec une distribution probabiliste
- 4. Algorithme de distribution sur * partie * d'une distribution normale
- 5. Comment générer une coordonnée normale?
- 6. générer une valeur aléatoire pour champ d'entrée caché
- 7. Générer un nombre de plages pour un ensemble aléatoire de valeurs
- 8. Conversion d'une distribution uniforme en distribution normale
- 9. Amélioration du code pour générer une distribution
- 10. C++: générer une distribution gaussienne
- 11. Générer un nombre aléatoire avec une longueur de nombre aléatoire dans Objective-C
- 12. Générer une branche d'arbre aléatoire
- 13. élément aléatoire dans un ensemble
- 14. Comment générer un histogramme pour une distribution de probabilité donnée (pour tester un serveur)?
- 15. générer un seul nombre aléatoire dans une vue en xcode
- 16. C++ TR1: comment utiliser la distribution normale?
- 17. toutes les fonctions disponibles dans les bibliothèques java ou apparentées pour générer des données aléatoires dans la distribution normale
- 18. Générer un index aléatoire pour un tableau
- 19. Ruby, Générer une couleur hexadécimale aléatoire
- 20. Convertir Z-score (valeur Z, score standard) en valeur p pour la distribution normale en Python
- 21. Générer une énumération aléatoire en C# 2.0
- 22. Comment puis-je calculer la probabilité à un point donné une distribution normale en Perl?
- 23. Générer plusieurs nombres aléatoires pour égaler une valeur en python
- 24. Générer un terrain aléatoire dans Blender3D
- 25. Utilisez une valeur conditionnelle dans un ensemble de données Reporting Services pour le débogage
- 26. Structure de données pour un monde aléatoire
- 27. Problème avec une distribution MSI
- 28. Test si une distribution de données suit une distribution gaussienne dans MATLAB
- 29. Comment générer une clé pour une entité de groupe?
- 30. SSRS renvoie une valeur vide et une valeur normale pour fonctionner
Il y a plusieurs questions existantes qui répondent à cette ... Je vais courir un ou plusieurs vers le bas bientôt. [Générer des nombres aléatoires suivant une distribution normale en C/C++] (http://stackoverflow.com/questions/2325472/), [Conversion d'une distribution uniforme en distribution normale] (http://stackoverflow.com/questions/75677) /), [C++: génère une distribution gaussienne] (http://stackoverflow.com/questions/1109446/) – dmckee