Que fait cette instruction ?

Bonjour, je souhaiterais savoir ce que fait l'instruction V=V|grand(1,1,'uin',1,b+r)<=b; dans ce programme Scilab dans ce sujet.
Merci d'avance pour votre réponse.94894

Réponses

  • C'est le "ou"
    A la fin de la boucle, v est vrai sauf si les 3 grand ont tous été > b, dans ce cas v est faux.
  • C'est un script très mal fichu, pas dans l'esprit du programme de la classe. (subtilités syntaxiques, booléens)

    Je propose ce qui suit à la place
    function y = X(b,r)
      y = 2
      for k = 1:3
        if grand(1,1,'uin',1,b+r)<=b
          y = 1
        end
      end
    endfunction
    
    Ou encore mieux, mais plus astucieux :
    function y = X(b,r)
      if min(grand(1,3,'uin',1,b+r))<=b
        y = 1
      else
        y = 2
      end
    endfunction
    
  • D'accord merci.
    Par contre par rapport à l'interprétation du "grand(1,1,'uin',1,b+r)" j'ai du mal à me le représenter concrètement.
    En fait si je comprends bien on simule une loi uniforme discrète sur [|1;b+r|].
    C'est comme si on demandait au programme de nous créer une urne avec les (b+r) boules dedans, qui ont toutes la même probabilité d'être tiré, et on demande au programme de nous tirer une boule au hasard.
    C'est bien ça ?

    Si oui par contre après avec le "<=b" ça se complique, car qu'est ce que ça signifie concrètement quand "grand(1,1,'uin',1,b+r)<=b" est réalisé ? ça veut dire qu'on a tiré une boule blanche ?
    Si oui, pourquoi ?
  • Oui exactement, on modélise les $b+r$ boules par les entiers $1\le n \le b+r$.

    Les $b$ boules blanches correspondent aux entiers $1 \le n \le b$.
    Les $r$ restantes aux $b+1 \le n \le b+r$.
  • marsup a écrit:
    pas dans l'esprit du programme de la classe
    Quelle classe ?
  • Bonjour ,
    la programmation ne devrait pas être l'art d'écrire des programmes obscurs ou indéfrichables mais le contraire .
    Cordialement
  • Prépa ece
  • Effectivement, fm_31,

    et un programme se doit d'être commenté. Celui-ci ne l'est pas.

    Cordialement.
  • Comme souvent, un programme, c'est d'abord un crayon et une feuille pour poser le problème, définir les différents situations (cas typique de la division par zéro), ou encore types de résultats possibles, etc. (liste non exhaustive) sous peine de faire planter le programme et passer des heures à debugger (et il y a souvent un cas de figure qui n'a pas été anticipé B-) ) ; et oui il faut commenter pour expliquer ce qui est fait (pour soi comme pour les autres) si on est amené à y revenir longtemps après.

    Pour Python, Guido Van Rossum a participé à la rédaction d'un guide connu sur la terme "PEP 8" (lien1 ou lien2)
  • Ok merci donc je pense avoir compris le programme jusqu'au premier "end"
    Par contre je ne comprends pas la ligne "if..."
    Car moi ce que j'en comprends c'est que :
    le "for k=1:3" signifie qu'on va répéter 3 fois une expérience.
    3 fois la même expérience qui représente 3 tirages d'une boule dans l'urne avec remise.

    L'expérience consiste dans la ligne: "V=V|grand(1,1,'uin',1,b+r)<=b"
    Pour moi cela signifie que pour chacune des 3 expériences on tire une boule dans l'urne (grand(1,1,'uin',1,b+r)) et on regarde si on a tiré une boule blanche (grand(1,1,'uin',1,b+r)<=b). Si ce n'est pas le cas (grand(1,1,'uin',1,b+r)>b), alors V=%F.
    Si à la 2ème expérience on a encore obtenu une boule rouge (grand(1,1,'uin',1,b+r)>b), alors V=%F.
    Et si à la 3ème expérience on a encore obtenu une boule rouge (grand(1,1,'uin',1,b+r)>b), alors V=%F.
    Donc en fin de compte au bout des 3 expériences on a V=%F, donc V a gardé sa valeur initiale, donc le "if V" est vérifié.
    Donc y=1
    Or problème car dans cet exemple on n'a obtenu que des boules rouges, or le corrigé dit " la fonction retourne 1 si au moins une boule blanche a été tirée au cours des trois tirages avec remise dans l'urne".
    Comment est-ce possible ?94970
  • Donc en fin de compte au bout des 3 expériences on a V=%F, donc V a gardé sa valeur initiale, donc le "if V" est vérifié.
    Donc y=1
    Euh... On est d'accord que %F signifie "faux" ?

    Si V a gardé sa valeur initiale, alors on a V==%F
    Donc le if V n'est pas vérifié.
    Donc y=2.
  • Mais alors ça veut dire quoi "if V" ? C'est la même chose que "if V ==%T" ?
    Car pour moi ça veut rien dire "if V" tout seul, "V" c'est juste le nom d'une variable aléatoire, rien d'autre, c'est comme si on disais "Si Florian, alors y=1". Mais si Florian quoi ?
  • Oui c'est ça, si v est vrai, on passe au then, si v est faux, on passe au else.

    Dans le cas que tu regardes, v est faux (v=%f) donc on passe au else et ça donnera y=2.
  • Et, pour réitérer, ce sont des booléens, qui valent "vrai" ou "faux", et qui ne sont pas explicitement au programme de prépa ECE. Voir aussi : http://www.les-mathematiques.net/phorum/read.php?15,1869652,1869688#msg-1869688
  • marsup écrivait : http://www.les-mathematiques.net/phorum/read.php?15,1916770,1916784#msg-1916784
    > C'est un script très mal fichu, pas dans l'esprit du programme de la classe. (subtilités syntaxiques, booléens)

    Ben, c'est un oral d'HEC, donc on peut éventuellement comprendre qu'il s'éloigne un peu du niveau nominal moyen en ECE.
  • Oui, d'accord, mais je remarque que dans la correction, il y a, dans le code, le commentaire
    // "|" signifie ou
    

    Choix pédagique audacieux : la correction précise les points "au bord" du programme, mais le sujet, sur lequel travaillent les candidats, ne les précise pas.

    C'est une manière comme une autre de s'assurer de l'inégalité des chances des candidats : hors programme ou non !

    Par exemple, Shadows Asgard ne semble pas avoir été exposé au concept de booléen, qui n'est pas à son programme. Tant pis pour lui, il n'avait qu'à faire sa prépa dans le bon lycée, alors, on lui aurait dit ce qui est vraiment au programme pour intégrer cette école !
  • Tu as raison sur le fait que les booléens ne sont pas au programme ("[Les expressions peuvent] être du type numérique, matricielle(s) ou du type chaîne de caractères"), cependant le programme inclut les opérateurs "logiques" and / & et or / | . La contradiction n'est pas seulement entre le sujet et le programme, mais aussi entre le programme et lui-même...

    Par ailleurs la conception des sujets ne relève pas d'un choix pédagogique, mais plutôt docimologique, enfin de sélection. La question est de savoir si on peut raisonnablement taxer de hors-programme un sujet qui emploie certes le mot "booléen" qui n'est pas réputé connu par les candidats, mais qui indique qu'un tel objet peut être faux, qu'on peut en prendre la disjonction avec une comparaison qui est vraie ou fausse, qu'on peut le mettre devant un if, en somme qu'il s'agit d'une condition, vraie ou fausse.

    Bref, à mon sens on peut aussi défendre le fait que le sujet oblige le candidat à réfléchir à des objets nouveaux, courants dans l'enseignement des maths et de l'info au-delà de la L2, et qui sont presque définis explicitement dans le sujet, ou en tout cas dont le comportement peut être inféré depuis le sujet.

    Enfin tu dis que Shadows "n'a pas été exposé... n'avait qu'à...", mais si je comprends bien il prépare l'oral d'HEC sur la base d'annales corrigées rendues publiques par HEC : pour le coup l'équité vis-à-vis de cet oral semble plus améliorée qu'aggravée par la publication des documents ! (On n'est même pas certains que cet exo E42 ait déjà vraiment été posé à un candidat, si ?)
  • Merci pour vos réponses je pense que je comprends beaucoup mieux le programme. Seulement j'ai un doute sur la capacité de ce programme à simuler de manière réaliste le processus expérimental, car par exemple:
    L'expérience consiste dans la ligne: "V=V|grand(1,1,'uin',1,b+r)<=b"
    Pour moi cela signifie que pour chacune des 3 expériences on tire une boule dans l'urne (grand(1,1,'uin',1,b+r)) et on regarde si on a tiré une boule blanche (grand(1,1,'uin',1,b+r)<=b). Si c'est le cas (grand(1,1,'uin',1,b+r)<=b), alors V=%T.
    Mais alors dès la 2ème expérience la répétition de cette expérience devient sans intérêt car on a alors V qui vaut "true" puisqu'on a bien eu une boule blanche au premier tirage, et donc à la 2ème expérience avec le booléen on a le choix entre "V" (V garde ça valeur obtenue à l'expérience précédente c'est-à-dire "true") ou " (grand(1,1,'uin',1,b+r)<=b)" (on a obtenu une boule blanche, autrement dit V=true), donc dans les deux cas on a "V=true". Et donc ça enlève tout le réalisme de la simulation du processus expérimental car cela signifie qu'à partir du moment où on a obtenu une boule blanche à une des trois expriences, alors après aux expériences suivantes on ne peut avoir que des boules blanches. Non ?
  • La composition de l'urne ne change pas entre les différents tirages. Par ailleurs, pourquoi obtiendrait-on nécessairement une boule blanche lors du premier (ou du deuxième) tirage ?
  • Je ne dis pas que la composition de l'urne change entre les tirages. Si je dis qu'on obtient nécessairement une boule blanche à tous les tirages après le tirage d'une boule blanche, c'est parce que:
    Par exemple, si on tire une boule blanche à la première des trois expériences, que se passe-t-il ?
  • Rien de spécial, puisque les trois expériences sont indépendantes (on effectue un tirage avec remise).
  • Mais V prend la valeur quoi à l'issue de la première des 3 expériences ?
  • Si l'on a "tiré une blanche" (c'est-à-dire si le résultat de grand est inférieur ou égal à $b$), alors vrai, sinon faux.
  • Rappel : On peut faire fonctionner à la main un algorithme (simple) pour comprendre ce qu'il fait. Et si cet algorithme simule on traduit ce qu'il fait.
    Ça peut éviter d'y passer 15 jours en attendant des explications des autres.

    Cordialement.
  • Voilà skilveg, vous avez dit "Si l'on a "tiré une blanche" (c'est-à-dire si le résultat de grand est inférieur ou égal à b), alors vrai", donc V prend la valeur "vrai" à la fin de la première des 3 expériences.
    Or " vrai" c'est "grand(1,1,'uin',1,b+r)<=b".
    Donc à l'issue de la première des 3 expériences, V vaut "grand(1,1,'uin',1,b+r)<=b", c'est-à-dire qu'on a V=grand(1,1,'uin',1,b+r)<=b
    Et c'est là que je ne comprend plus ce qu'il se passe car pour la deuxième expérience le booléen V=V|grand(1,1,'uin',1,b+r)<=b n'a plus de sens car puisque V=grand(1,1,'uin',1,b+r)<=b à l'issue de la 1ère des trois expériences, c'est comme si pour le booléen on avait "V=grand(1,1,'uin',1,b+r)<=b|grand(1,1,'uin',1,b+r)<=b".
    C'est comme si on demandait si un cheval en question est blanc ou blanc. Quel est l'intérêt ?

    Vous voyez ce que je veux dire et où est mon problème ?
  • Il faut bien comprendre que le résultat de la fonction grand est pseudo-aléatoire, et donc que deux appels différents vont donner deux résultats a priori différents ! Ici, on simule des tirages successifs indépendants avec remise dans l'urne. Donc on lance trois fois la fonction grand, qui va donner trois résultats a priori indépendants. À la fin, le booléen V (très mauvais choix de nom de variable au passage...) est vrai si on a tiré au moins une fois une boule blanche, et faux si on n'a tiré que des boules rouges.
  • Ah OK ! Je viens de comprendre quelque chose de capital avec votre explication et je pense que c'est ça qui me bloquait. En fait le booléen V ne prend pas une valeur, soit "V", soit "grand(1,1,'uin',1,b+r)<=b" après chacune des 3 expériences. On réalise d'abord les 3 expériences et là une fois que les 3 ont été faites le booléen V prend une nouvelle valeur, soit "V" soit "grand(1,1,'uin',1,b+r)<=b" (c'est-à-dire "%T"). Donc finalemnt après les 3 expériences réalisés V n'a pas pris 3 valeurs successivement, mais une seule à la toute fin.
    Merci beaucoup pour l'explication :-)
  • Alors, pas exactement : il y a trois tours de boucle, chacun simulant une expérience individuelle de tirage avec remise, et chacun susceptible de modifier la valeur de la variable V. Celle-ci bascule à "true" l'éventuelle première fois que l'on rencontre une boule blanche, et reste ensuite toujours égale à "true".

    Une instruction de la forme
        V = V | W
    
    remplace V par la disjonction logique de V et W : si au moins l'une des deux variables est vraie, alors V devient vraie, sinon V reste fausse.
  • D'accord merci beaucoup pour la précision ^^
  • Et j'avais une autre question toujours concernant la question 1, quand il est demandé "quelle loi X simule-t-elle ?", et notamment concernant la valeur de P(X=1) car moi je trouve P(X=1)= ((bxr^2)+(b^2xr)+b^3)/(b+r). Pourquoi est-ce faux ?95698
    95700
    95702
  • D'une part la définition de tes événements $B_i$ n'est pas très claire, d'autre part la probabilité d'une réunion ne coïncide avec la somme des probabilités que si les événements sont incompatibles.
  • Merci pour votre réponse Skilveg. Pourquoi dîtes vous que la définition de mes événements Bi n'est pas très claire ? Car par exemple B1 c'est l'événement "on a obtenu une seule boule blanche au cours des 3 expériences (et donc 2 rouges ).
    L'événement B2 est l'événement "on a obtenu deux boules blanches au cours des trois expériences (et donc 1 boule rouge ) et l'événement B3 est l'événement "on a obtenu 3 boules blanches au cours des trois expériences ". Pourquoi n'est-ce pas clair ?
    Et de plus ici la probabilité d'une réunion coïncide avec la somme des probabilités car les événements B1, B2 et B3 sont incompatibles, car par exemple au cours des trois expériences on ne peut pas avoir à la fois 2 boules blanches et 3 boules blanches, donc B2 et B3 ne sont pas compatibles ?
  • Oui, je retire ce que j'ai dit ! par contre le calcul de $\mathbb{P}(X=2)$ est beaucoup plus simple puisqu'il s'agit de ne tirer que des boules non-blanches. Donc il est bien possible qu'il y ait une interversion dans le corrigé proposé (si je lis bien).
  • Effectivement, il y a une erreur dans la corrigé, puisque $\left(\frac r{b+r}\right)^3$ est la probabilité de tirer 3 fois une boule rouge, probabilité contraire de celle de "tirer au moins une boule blanche".

    Cordialement.
  • Merci beaucoup pour vos réponses :-)
  • Et j'ai une autre question, concernant la question 2) de ce sujet, car je ne comprends pas l'explication du corrigé que j'ai indiquée en vert
    En effet je ne comprends pas le passage "La valeur affichée sera proche de l'espérance d'une variable aléatoire Y=1+B où B suit la loi de Bernoulli B((0,2)^3) dont le paramètre est égal à la probabilité de ne tirer aucune boule blanche en trois tirages"

    Et au passage que signifie le "X(40,10)" ?98088
  • C'est la loi faible des grands nombres : si tu as un grand nombre de réalisations d'une même variable aléatoire, sous certaines hypothèses, la moyenne empirique va se rapprocher (en un certain sens) de l'espérance théorique de la variable aléatoire considérée.

    Ici, tu fais des simulations d'une variable X de paramètres b et r avec b = 40 et r = 10 (donc correspondant à une urne contenant 40 boules blanches et 10 boules rouges).

    Or X = 1 ou 2 selon qu'un certain événement est vérifié ou non, donc X = 1 + B où B suit une loi de Bernoulli de paramètre la probabilité de cet événement...
  • Ah ok j'ai compris merci beaucoup ! :-)
Connectez-vous ou Inscrivez-vous pour répondre.