SmallTalk VisualWorks nombre pseudo-aléatoire

Résolu/Fermé
HelpMePlease - 19 nov. 2007 à 16:19
 HelpMePlease - 4 janv. 2008 à 15:58
Bonjour,

VisualWorks / SmallTalk (-> via plateforme de simulation CORMAS du CIRAD)

Je cherche à générer un nombre pseudo-aléatoire entre -5 et 30 avec SmallTalk. Le tirage doit suivre une loi normale (ou dans l'idéal une loi béta), centrée sur 15.
Le résultat voulu est d'obtenir un nombre très souvent proche de 15 et rarement proche de -5 ou 30.

Merci d'avance.

PS : si ce n'est pas faisable, merci de me le signaler !
A voir également:

4 réponses

Bonjour,

J'ai une petite idée sur l'algorithme mais je ne connais pas du tout ton environnement de travail.
0
HelpMePlease
19 nov. 2007 à 16:34
Bonjour,

Si tu as le temps de me conseiller sur l'algorithme, je t'en remercie. Par exemple en R ? Ou simplement en formalisant les équations ?
D'avance merci.
0
Bonjour,

Si tu n'as pas encore trouvé ta solution,
indépendamment du langage, il me semble que tu cherches un nombre aléatoire auquel tu appliques une fonction qui reformate la sortie de sorte qu'elle corresponde à ton souhait.
A toi de définir la fonction : hyperbolique, parabolique, logarithmique ou autre ;
Le "centre de gravité" souhaité étant 15, avec comme limites -5 et +30, ce "centre" ne se trouve pas au centre des sorties possibles : 15 n'est pas à mi-chemin de -5 et +30 ; à toi de définir arbitrairement une méthode pour répartir les sorties autour de ton centre (15) : soit en tronquant les sorties qui sortent du champs attendu, soit en appliquant une fonction différente suivant que le nombre aléatoire obtenu sort à droite ou à gauche de ton "centre"

A ta dispo au besoin ;
Joyeux Noël et Bonne Année !
0
Pour une loi normale... la solution trouvée ci-dessous en smallTalk (Cormas random est un tirage aléatoire entre 0 et 1 : CIRAD). La je n'utilise qu'une dimension mais on peut le faire en deux dimensions en utilisant y2. Merci à ceux qui m'ont répondus.

| x1 x2 y1 y2 w t|

x1 := (2 * (Cormas random)) - 1.
x2 := (2 * (Cormas random)) - 1.
w := (x1 * x1) + (x2 * x2).

w<=1 ifTrue: [
w := ( ((0-2) * ((w)ln)) /w )sqrt.
y1 := x1 * w.
t := 0 - 2.
y1<=t ifTrue: [y1 := t].
y1>=2 ifTrue: [y1 := 2].
y2 := x2 * w.].



self stochastic: y1.

^stochastic ifNil: [stochastic := 0]
0