[octave/matlab] fnction qui retourne un vecte

Fermé
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - 23 mai 2011 à 16:44
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 7 juin 2011 à 14:08
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 lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
Modifié par damlegone32 le 31/05/2011 à 22:34
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 samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
6 juin 2011 à 22:07
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juin 2011 à 09:05
soit plus clair, donne un exemple.
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
7 juin 2011 à 13:18
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juin 2011 à 14:08
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