Combien d’élèves de prepa ECS, ECE et ECT se reconnaîtront dans ces phrases que j’ai pu entendre tellement de fois durant mes trois années passées en prépa ? « Scilab c’est vraiment du chinois », « L’informatique de toute façon je suis nul et je ne comprends rien donc pourquoi la travailler ? », « En DS ou aux concours, si je vois une question d’informatique, je la saute et je passe à la suivante, c’est du temps de perdu de toute façon… » Que d’erreurs qui peuvent coûter cher le jour J dans l’optique d’une intégration ! Certes les questions d’informatiques restent minoritaires aux concours BCE et Écricome, pour autant, elles sont une constante dans chacune des épreuves au cours des années. Elles sont en général en plus plutôt bien coefficientée. Il vaut donc mieux les réussir. Ceci est d’autant plus vrai qu’elles sont en général assez simples et que maîtriser quelques bases d’informatique peut suffire pour y obtenir le maximum de points dans la grande majorité des cas. Voici donc une nouvelle série pour les éternels fâchés du Scilab, afin de vous donner tous les conseils et les moyens afin de cartonner dans ce domaine et d’obtenir l’école de vos rêves. Continuons aujourd’hui avec les simulations de loi, éléments centraux du programme d’informatique en prépa EC.
Simulation d’une expérience aléatoire
Dans les différentes méthodes pouvant apparaître concernant la simulation et les probabilités par Scilab, il y a évidemment celles consistant à représenter l’expérience aléatoire elle-même, sans passer par un calcul mettant en jeu les probabilités en découlant. En général, cela passera alors par l’utilisation de la fonction rand(). Celle-ci a pour objectif principal d’obtenir un nombre aléatoire entre 0 inclus et 1 exclus. Mais dès lors, pour obtenir un nombre compris entre 0 et un nombre entier naturel A, il suffit d’écrire floor(rand()*(A+1). De même pour trouver un entier entre 1 et B, on écrira cette fois A+floor(rand()*(B-A). Ainsi, on peut simuler un tirage simple. De même, en combinant un rand() avec une boucle if, while ou for, on peut simuler une expérience mettant en place une condition, une continuité tant que quelque chose est établie ou encore un certain nombre de tirages.
On a donc largement les moyens de simuler une expérience même lorsqu’on ne connaît pas la loi de probabilité concernée.
Simulation des lois classiques, la fonction grand
- Simuler une loi de Bernoulli: y=grand(1,1, « bin »,1,p), où p est le paramètre de la loi de Bernoulli.
- Simuler une loi binomiale: y=grand(1,1, « bin »,n,p),où n et p sont les paramètres de la loi Binomiale.
- Simuler une loi exponentielle y=grand(1,1, « exp »,alpha), où alpha est la moyenne de la loi Exponentielle (donc si celle-ci est de paramètre lambda, on écrit y=grand(1,1, « exp »,1/lambda) ).
- Simuler une loi géométrique : y=grand(1,1, « geom »,p), où p est le paramètre de la loi géométrique.
- Simuler n états successifs d’une chaîne de Markov : y=grand(n, « markov »,P,x), où P est la matrice de transition de la chaîne de Markov et x son état d’origine.
- Simuler une loi de poisson: y=grand(1,1, « poi »,lambda), où lambda est le paramètre de la loi de poisson concernée.
- Simuler une variable discrète suivant une loi uniforme: y=grand(1,1, « uin »,a,b), où a et b sont les deux valeurs extrêmes prises par la loi uniforme.
- Simuler une variable à densité suivant une loi uniforme: y=grand(1,1, « uni »,a,b), où a et b sont les deux valeurs extrêmes prises par la loi uniforme.
- Simuler une loi normale: y=grand(1,1, « nor »,a,b), où a est la moyenne de la loi normale et b son écart type. Donc si on veut simuler une loi normale de paramètres a et b, on écrira y=grand(1,1, « nor »,a,racine de b).
Simuler une loi par la méthode d’inversion
Supposons que l’on s’intéresse maintenant à une loi discrète qui ne fait pas partie des lois particulières. On pourrait déjà la simuler du point de vue purement expérimental comme nous en avons parlé dans la première partie de notre article. Cependant, imaginons maintenant que l’on ait à faire à une expérience dont on connaît la fonction de répartition. On peut à présent simuler une loi par un procédé simple. On sait qu’une fonction de répartition prend es valeurs entre 0 et 1. Si l’on simule un nombre aléatoire entre 0 et 1 à l’aide une fois de plus de la fonction rand(). A partir de là, à l’aide d’une boucle while, on regarde entre quelles valeurs prises par la fonction de répartition se trouve le nombre aléatoire obtenu. A partir de là, on pourra en choisissant la valeur prise par la loi correspondant à la valeur inférieure prise par la fonction de répartition dans l’intervalle ainsi défini, avoir une simulation de la loi.