« Mathématiques avec Python et Ruby/Ensembles en Ruby » : différence entre les versions

Contenu supprimé Contenu ajouté
m Carte_française_pique_10.gif remplacé par commons:File:Carte_française_pique_10.png ; demande de commons:User:GifTagger (Replacing GIF by exact PNG duplicate.).
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 9 :
L'évènement impossible, noté <math>\empty</math>, est entré en ''Ruby'' avec des crochets vides:
 
<sourcesyntaxhighlight lang="ruby">
impossible=[]
puts(impossible.length())
puts(impossible.empty?)
</syntaxhighlight>
</source>
 
L'ensemble de toutes les issues possibles de l'expérience aléatoire, appelé ''univers'', est noté <math>\Omega</math>.
Ligne 25 :
On s'apprête à lancer un dé. Alors l'évènement "le résultat sera plus petit que 5" est décrit par l'ensemble <math>\left\{1,2,3,4\right\}</math>. De même, l'évènement "le résultat sera pair" est représenté par <math>\left\{2,4,6\right\}</math>. On construit aisément ces évènements avec la notation ensembliste de ''Ruby'' qui se fait avec des crochets au lieu des accolades. Mais la définition d'ensembles par description est possible avec ''Ruby'':
 
<sourcesyntaxhighlight lang="ruby">
univers=(1..6).to_a
petit=univers.select { |r| r<5 }
pair=univers.select { |r| r%2==0 }
impossible=[]
</syntaxhighlight>
</source>
 
Pour construire l'univers, on peut prend la liste des nombres allant de 1 à 6, et on la transforme en tableau avec ''to_a''. Pour avoir les ''petits'' résultats (moins que 5), on choisit dans l'univers les éléments qui sont inférieurs à 5. ''select'' est une méthode de l'objet ''univers'', qui se crée une variable ''r'' (entre traits verticaux) et lui fait parcourir les éléments du tableau (car ''univers'' en est un) et lui fait passer ou non par un filtre. En bref, on ''sélectionne'' les éléments de l'univers qui sont inférieurs à 5. De même, pour avoir les résultats pairs, on sélectionne les éléments de l'univers dont le quotient par 2 tombe juste (reste nul).
Ligne 42 :
On construit l'univers par un ''produit cartésien'' (des cartes avec [[w:Descartes|Descartes]] !) entre l'ensemble des valeurs et celui des couleurs:
 
<sourcesyntaxhighlight lang="ruby">
valeurs=[1,7,8,9,10,'Valet','Dame','Roi']
couleurs=['carreau','coeur','pique','trèfle']
Ligne 49 :
valeurs.collect { |v| couleurs.collect { |c| univers.push(v+' '+c) }}
puts(univers)
</syntaxhighlight>
</source>
 
La troisième ligne transforme toutes les cartes en chaînes de caractères; en effet certaines d'entre elles étaient des chiffres. La suite du script consiste à créer un univers initialement vide, puis, avec la méthode ''collect'' du tableau des valeurs de cartes, à placer dans le jeu de cartes, l'une après l'autre, toutes les cartes (il est nécessaire de mettre une boucle à l'intérieur de la première, pour les différentes couleurs associées à chaque valeur de carte).
Ligne 57 :
L'évènement "la carte est une figure" (pas un nombre) se construit en choisissant les cartes dont le début du nom n'est pas un nombre entier (donc se transforme en 0 lorsqu'on le convertit en entier):
 
<sourcesyntaxhighlight lang="ruby">
figure=univers.select { |carte| carte[0..1].to_i==0 }
puts(figure)
</syntaxhighlight>
</source>
 
Et pour construire l'évènement "la carte est un pique", on extrait les cartes de pique du jeu entier:
 
<sourcesyntaxhighlight lang="ruby">
pique=univers.select { |carte| carte[-2..-1]=='ue'}
puts(pique)
</syntaxhighlight>
</source>
 
(on extrait les cartes dont le nom termine par ''ue'', puisque seul le mot ''pique'' se termine ainsi).
Ligne 79 :
===Avec le dé===
 
<sourcesyntaxhighlight lang="ruby">
petit=[1,2,3,4]
pair=[2,4,6]
puts(petit&pair)
</syntaxhighlight>
</source>
 
===Avec les cartes===
Ligne 89 :
Le script suivant montre que dans un jeu de 32 cartes, il y en a 3 qui sont à la fois des figures et des piques: Les trois figures de pique:
 
<sourcesyntaxhighlight lang="ruby">
puts(figure&pique)
</syntaxhighlight>
</source>
 
 
Ligne 102 :
===Avec le dé===
 
<sourcesyntaxhighlight lang="ruby">
petit=[1,2,3,4]
pair=[2,4,6]
puts(petit|pair)
</syntaxhighlight>
</source>
 
===Avec les cartes===
Ligne 112 :
On peut compter les cartes qui sont des figures ou des piques:
 
<sourcesyntaxhighlight lang="ruby">
puts(figure|pique)
puts((figure|pique).size)
</syntaxhighlight>
</source>
 
...mais on peut aussi laisser ''Ruby'' les compter, il en trouve 17. Ce comptage est à la base des calculs de probabilité.
Ligne 125 :
===Avec le dé===
 
<sourcesyntaxhighlight lang="ruby">
univers=[1,2,3,4,5,6]
petit=[1,2,3,4]
Ligne 131 :
puts(univers-petit)
puts(univers-pair)
</syntaxhighlight>
</source>
 
Ce qui montre que le contraire de "pair" est "impair".
Ligne 137 :
===Avec les cartes===
 
<sourcesyntaxhighlight lang="ruby">
puts(univers-figure)
puts(univers-pique)
</syntaxhighlight>
</source>
 
=Probabilités=
Ligne 148 :
On peut associer une probabilité à un évènement seul, en baptisant l'univers ''$univers'' ce qui fait qu'il est une variable globale, et en définissant une probabilité par
 
<sourcesyntaxhighlight lang="ruby">
require 'mathn'
def proba(e)
return Rational(e.size,$univers.size)
end
</syntaxhighlight>
</source>
 
Mais pour éviter l'usage d'une variable globale, on peut aussi associer une probabilité à l'évènement et à son univers:
Ligne 160 :
==Avec le dé==
 
<sourcesyntaxhighlight lang="ruby">
require 'mathn'
univers=[1,2,3,4,5,6]
Ligne 178 :
puts(p1==p2)
 
</syntaxhighlight>
</source>
 
 
==Avec les cartes==
 
<sourcesyntaxhighlight lang="ruby">
require 'mathn'
 
Ligne 198 :
p2=proba(figure|pique,univers)
puts(p1==p2)
</syntaxhighlight>
</source>
 
==Probabilités conditionnelles==
Ligne 204 :
Ci-dessus, on a défini les probabilités avec comme paramètre l'univers. En effet, cette variable est globale, donc inaccessible ''a priori'' dans le corps de la fonction. Ceci permet de remplacer l'univers par un autre évènement, et donc de définir la probabilité conditionnelle. Par exemple, avec le dé:
 
<sourcesyntaxhighlight lang="ruby">
require 'mathn'
univers=[1,2,3,4,5,6]
Ligne 219 :
puts(p1==p2)
 
</syntaxhighlight>
</source>
 
==Définitions==
Ligne 225 :
On peut alors définir des booléens concernant des évènements, en utilisant les propriétés de leurs probabilités:
 
<sourcesyntaxhighlight lang="ruby">
require 'mathn'
 
Ligne 238 :
 
 
</syntaxhighlight>
</source>