Inscription / Connexion Nouveau Sujet
Niveau calculatrices
Partager :

Matlab

Posté par
KKK
10-05-07 à 23:53

Quelqu'un pourrait-il m'aider à créer un script Matlab prenant en entrée le nombre d'élèves d'une classe (45) se partageant des cadeaux et donnant en sortie la probabilité que personne ne reparte avec son cadeau ?
Sur papier j'ai le raisonnement( j'ai pris l'évènement contraire et appliqué la formule du crible) mais Matlab et moi...n'en parlons pas !

Posté par
Rouliane
re : Matlab 11-05-07 à 00:15

Bonsoir,

C'est quoi le but de ton programme ? ( quelles sont les données qui vont évoluer ? )

Etant nul en proba, si tu me donne ton raisonnement (avec les formules ) je peux essayer de te faire un truc avec matlab

Posté par
ben314-2
re : Matlab 11-05-07 à 18:08

function s=probacadeau(m,n)
t=1:n;
a=0;
for l=1:m
    b=1;
    for k=1:n
        z=floor((n+1-k)*rand+k);
        c=t(z);
        t(z)=t(k);
        t(k)=c;
    end
    for p=1:n
        if t(p)==p
            b=0;
        end
    end
    a=a+b;
end
s=a/m;

m étant le nombre de fois où l'opération est répétée (par exemple 1000), n est le nb d'enfants (e.g 45)
Mon nom de prog est essai24
essai24(10000,45) renvoie par exemple: 0.3806  ou 0.3658

Posté par
ben314-2
re : Matlab 11-05-07 à 18:16

ce qui colle à la proba attendue qui est de (44/45)^45=0.36375 et des poussières

Posté par
KKK
re : Matlab 11-05-07 à 22:53

whaou..je comprends un peu le principe mais il y a des trucs qui m'échappent un peu..
Peux-tu m'expliquer quelques trucs ?
Tout d'abord je ne comprends pas très bien l'initialisation avec t=1:n je ne vois pas où il intervient.
Puis surtout qu'elle action précise désigne  z=floor((n+1-k)*rand+k);
Merci d'avance,
kkk

Posté par
ben314-2
re : Matlab 12-05-07 à 20:46

t=1:n permet de créer un vecteur de longueur n tel que t(1)=1...t(n)=n. Les cases représentent les numéros des cadeaux.
A la première étape (k=1), on prend un nombre au hasard entre 1 et n, par exemple on tombe sur 5. On échange ensuite t(1) et t(5). Tu as donc dans la première case de ton tableau le numéro du cadeau choisi par le premier élève.
OK? A la k-ième étape, tu ne peux pas prendre un chiffre des k-1 premières cases, puisque ces cadeaux ont déjà été pris. Donc tu prends la partie entière (floor) d'un nombre aléatoire compris entre k et n, ce qui correspond à (n+1-k)*rand+k  Quand k est très proche de 1, cela vaut n
Quand k est très proche de zéro cela vaut k. Et tu fais l'échange entre le contenu des deux cases. Une fois cette boucle terminée, la boucle correspondant à
for p=1:n
        if t(p)==p
            b=0;
        end

est le test pour savoir si qqn est parti avec son cadeau ou pas. Pour le reste, réfléchis un peu, teste sur un cas simple, tu comprendras rapidement (je vais quand même pas faire tout le boulot, je partage! )

Posté par
KKK
re : Matlab 12-05-07 à 21:20

merci beaucoup, pfioouu..le jour où je penserais à tout ça !
Est-ce que "a" donne le nombre de cas favorables, c'est à dire les élèves qui ne repartent pas avec leur cadeau ? Et m le nombre d'issues possibles comme on a l=1:m ?
Du coup "s" donne bien la probabilité que personne ne reparte avec son cadeau...
Encore merci pour toutes ces explications
kkk

Posté par
ben314-2
re : Matlab 13-05-07 à 14:53

a est effectivement le nombre de fois où personne ne part avec son cadeau. Pour avoir une probabilité fiable, il faut réitérer plusieurs fois l'algorithme, d'où la boucle for l=1:m, qui permet d'effectuer m fois l'algorithme, c'est à dire la distribution de cadeau. Si m =10000 et a=3627, tu auras une proba de a/m ,s=0.3627,i.e nb de cas favorables/nb de cas en tout.

Posté par
KKK
Simplification 13-05-07 à 22:43

Bonjour,
Je suis en train de déterminer la probabilité qu'aucune personne ne reparte avec son cadeau lors de la répartion de 45 cadeaux entre 45 personnes.
J'ai utilisé l'évènement contraire puis appliqué la formule du crible.
J'arrive a p(A) (la probabilité cherchée) =
1-(somme de k=1 à 45 de (-1)^k-1/k!) j'aimerais simplifier par la valeur de la somme mais c'est la détermination de la raison mais j'ai un peu de mal.
Pouvez-vous m'aider ?
merci

*** message déplacé ***

Posté par
ben314-2
re : Simplification 13-05-07 à 23:04

Je m'aperçois d'ailleurs que j'avais raconté n'importe quoi sur l'autre topic en balançant (44/45)⁴45 mais en fait c'est complètement faux.

*** message déplacé ***

Posté par
KKK
re : Simplification 13-05-07 à 23:29

tu n'aurais pas une petite idée quant à ma simplification ?

*** message déplacé ***

Posté par Narss452 (invité)re : Matlab 14-05-07 à 00:59

bonsoir tous les 2,en ecrivant la somme complete c'est a dire tous les terme que l'on obtient par la somme et en appliquant une simplification j'obtiens comme resultat p(A)= somme de k=1 à 22 de 1/(2k)! moins la somme de k=1 à 22 de 1/(2k+1)!
mais il possible que je me sois trompé

Posté par
veleda
re:matlab 14-05-07 à 10:11

bonjour
je trouve p(A)=de k=0 à n)(-1)k/k!
en cherchant le nombre de permutations sans points fixes et en utilisant bien sur la formule du crible
cela ne s'arrange pas on peut seulement remarquer que si n tend vers oo lim p(A)=1/e

Posté par
veleda
re:matlab) 14-05-07 à 10:17

j'ai pris n mais dans le cas de l'exo n c'est 45

Posté par
veleda
re:matlab 14-05-07 à 10:25

si Xnest la variable aléatoire égale au nombre de personnes repartant avec leur cadeau
p(Xn=k)=1/k!de i=0 à n-k(-1)i/i!
  pour 0kn        sauf erreur de ma part c'est la loi de Monmort

Posté par
imzard
Programmer un Toolbox de fonctions d'éléctroniques sous matlab 20-05-08 à 19:01

Bonjour,
je suis debutant sous matlab et j'ai un projet dans le quel je dois programmer un toolbox des fonctions d'éléctronique sous matlab.

si quelqu'un à une idée sur ça , svp .

merci d'avance



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !