[octave/matlab] fnction qui retourne un vecte

Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

existe-t-il une fonction qui me permette d'avoir un vecteur de N valeurs aléatoires à partir d'une valeur d'une moyenne connue, et d'un écart type connu ?

par exemple ;

A=[1,2,6,7,89,43,123,32,13]
Vecteur = fonction (mean(A),std(A), N)

Et je veux qu'après je retrouve mean(V)=mean(A) et std(V)=std(A)

j'ai rien trouvé de concluant jusqu'à maintenant et pensez bien que la matrice A ici n'est là qu'en exemple, j'ai vraiment beaucoup beaucoup de valeurs en réalité.

merci beaucoup !
A voir également:

2 réponses

damlegone32 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   29
 
Bonjour,
Tu peux faire:
vecteur  = randn(N,1) %loi normale d'écart-type 1 et de moyenne nulle
ou
vecteur  = rand(N,1) %loi uniforme entre 0 et 1
et forcer les moyenne et écart-type aux valeurs désirées
vecteur = vecteur/std(vecteur)*ecart_type_voulu %on force l'écart-type à la valeur désirée  
vecteur = vecteur-mean(vecteur)+moyenne_voulue %on force la moyenne à la valeur désirée

Mais si ce que tu voulais faire c'était générer des nombres aléatoires suivant une loi normale de moyenne moy et d'écart-type sigma alors la syntaxe est:
vecteur = moy+sigma*randn(N,1)
1
Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   110
 
Salut et merci beaucoup de ta réponse !
tu m'as fait découvrir deux fonctions très utiles et ta solution fonctionne à merveille...pour une très grande quantité de nombres.

Par contre, curieusement (ou pas) pour une dizaine de nombre, c'est très approximatif... je pense que c'est "normal" mais c'est bizarre quand même...
Tu saurais l'expliquer ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
soit plus clair, donne un exemple.
0
Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   110
 
vecteur = 10+2*randn(10,1)

mean(vecteur) n'est pas exactement égal à 10
std(vecteur) n'est pas exactement égal à 2

mais si je prends
vecteur = 10+2*randn(10000,1)
alors on s'approche tellement de 10 et 2 que ça finit par tomber dessus aux arrondis près.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
ba oui, c'est on ne peut plus logique.
une variable aléatoire ne correspond à ses caractéristiques que dans la limite des grand nombre. Et encore, elle ne fait que tendre. 10 est loin d'être un grand nombre. Si tu veux le résultat exacte de ce que tu attends, la méthode n'est pas bonne (mais je ne vois pas ce que tu cherches à faire au final). Si tu veux le résultat exacte pour toutes les tailles de vecteur, il faut faire un truc du genre :
vec_tmp=rand(N,1);
vecteur=moy-mean(vec_tmp)+(dev/std(vec_tmp))*vec_tmp;
(à vérifier et corriger pour l'écart type, je ne suis pas sur du tout).
0