Vous êtes sur la page 1sur 92

N=1000; f(1)=1;

for k=1:N
T=tirage_reel(2,0,1);
d=abs(T(1)-T(2));
D=floor(d+0.5);
f(k+1)=(k*f(k)+D)/(k+1);
end
clf;quadrillage;plot(f,".")

2e dition

Scilab
pour lenseignement
des mathmatiques
Ralis avec le soutien dInria, ce livret a t co-crit par Scilab Enterprises et Christine Gomez, professeur de mathmatiques
au lyce Descartes Antony.

2013 Scilab Enterprises. Tous droits rservs.


Table des maTires

Introduction
PROPOS DE CE LIVRET 3
INSTALLATION DE SCILAB 3
LISTE DE DIFFUSION ET DINFORMATION 4
RESSOURCES COMPLMENTAIRES 4

1- Se familiariser Scilab
LENVIRONNEMENT GNRAL ET LA CONSOLE 5
LDITEUR 8
LA FENTRE GRAPHIQUE 10
LAIDE EN LIGNE 11
GRER LES FENTRES ET PERSONNALISER SON ESPACE DE TRAVAIL 12

2- Programmer
VARIABLES, AFFECTATION ET AFFICHAGE 13
LES BOUCLES 17
LES TESTS 19
LES TRACS EN 2 ET 3 DIMENSIONS 21
LARITHMTIQUE 30
COMPLMENTS SUR LES MATRICES ET LES VECTEURS 30
PROBLMES DE PRCISION 36
RSOLUTION DQUATIONS DIFFRENTIELLES 38
CODAGE ET DCODAGE 40
Table des maTires

3- Exemples dutilisation
VARIABLES, AFFECTATION, AFFICHAGE 45
BOUCLES 48
TESTS 53
TRACS DE COURBES 56
SIMULATIONS, STATISTIQUES ET PROBABILITS 59
ARITHMTIQUE 71
CODAGE ET DCODAGE 76
DIVERS 79

4- Fonctions Scilab utiles


POUR LANALYSE 85
POUR LARITHMTIQUE 85
POUR LES PROBABILITS ET STATISTIQUES 85
POUR SIMULER 87
POUR DFINIR DES LOIS 87
POUR AFFICHER ET TRACER 88
UTILITAIRES 89
inTrOdUCTiOn

Introduction

ProPoS dE cE lIvrEt
lobjectif de ce livret est de vous guider pas pas dans la dcouverte des direntes fonctionnalits de base
du logiciel scilab dans le cadre dune utilisation en classes de mathmatiques au lyce. Cette prsentation se
limite volontairement lessentiel pour permettre une prise en main facilite de scilab.

les calculs, graphiques et illustrations sont raliss avec scilab 5.4.0 enrichi du module lyce. Vous pouvez
donc reproduire toutes les commandes prsentes partir de la version 5.4.0 de scilab.

InStallatIon dE ScIlab
scilab est un logiciel de calcul numrique que chacun peut tlcharger gratuitement. la version utile au
lyce est la version de base du logiciel laquelle un module complmentaire appel module lyce est
ajout. Ce module contient des fonctions spciques lenseignement des mathmatiques au lyce. le
fonctionnement par dfaut de scilab est modi par le module lyce pour adapter son utilisation en classe.
Par exemple, les axes des tracs graphiques passent toujours par le point (0,0) et la division par 0 retourne
Inf au lieu dune erreur.

disponible sous Windows, linux et mac Os X, scilab est tlchargeable ladresse suivante :
http://www.scilab.org/

Une fois scilab tlcharg et install, il faut ajouter le module lyce.


Pour cela, il sut :
w dtre connect internet,
w de lancer scilab,
w dans la barre de menus,
de cliquer sur
applications > Gestionnaire de Modules - atoMS
puis dans la fentre qui apparat sur Education >
Module lyce

sur la fentre ci-contre :


w Cliquez sur le bouton Installer.
w Quittez scilab, relancez-le, le module est install.

Cette opration ne se fait quune fois, dsormais le


module lyce se chargera automatiquement chaque
dmarrage de scilab.

|3
inTrOdUCTiOn

Si vous ne disposez pas de connexion Internet, connectez-vous depuis un autre poste reli internet
pour connatre la marche suivre ladresse suivante :
http://www.scilab.org/fr/community/education/maths/install

Vous pouvez tre averti des sorties de nouvelles versions de ce module en vous inscrivant sur une liste de
diusion (voir ci-aprs). la mise jour du module sera ralise en suivant les oprations prcdemment
dcrites et en cliquant cette fois sur le bouton Mettre jour.

lIStE dE dIFFuSIon Et dInForMatIon


Pour faciliter lchange entre les utilisateurs de scilab du monde de lducation, une liste de diusion leur est
ddie. le principe est simple. les personnes inscrites peuvent communiquer les unes avec les autres par
courrier lectronique (questions, rponses, partage de documents, retour dexpriences...). il sut denvoyer
son message ladresse enseignement@lists.scilab.org, pour que celui-ci soit redistribu automatiquement
tous les inscrits de la liste.

Pour sinscrire, il sut de complter un formulaire en ligne ladresse suivante :


http://lists.scilab.org/mailman/listinfo/enseignement.
Vous recevrez une conrmation de votre inscription.

rESSourcES coMPlMEntaIrES
si vous disposez dune connexion internet, vous pouvez accder au site Web de scilab sur lequel vous
trouverez une rubrique consacre lutilisation de scilab pour lenseignement
(http://www.scilab.org/fr/community/education), avec des liens et des documents utiles, dont le prsent
livret au format PdF, des exercices et des corrigs dpreuves pratiques, pouvant tre tlchargs et
imprims librement.

4|
se Familiariser sCilab

chapitre 1 - Se familiariser Scilab


lespace de travail utile au lyce dans scilab est constitu de plusieurs fentres :
w la console pour faire des calculs,
w lditeur pour crire des programmes,
w les fentres graphiques pour acher des graphiques,
w laide.

lEnvIronnEMEnt Gnral Et la conSolE


aprs avoir double-cliqu sur licne de scilab pour lancer le logiciel, l'environnement par dfaut de scilab
prsente les fentres suivantes dockes - console, navigateurs de chiers et de variables, historiques des
commandes (voir Grer les fentres et personnaliser son espace de travail , page 12) :

dans la console, aprs linvite de commande --> , il sut de saisir une commande et dappuyer sur la
touche Entre (Windows et linux) ou retour (mac Os X) du clavier pour obtenir le rsultat correspondant.

--> 57/4
ans =
14.25 noter
--> (2+9)^5 devant le rsultat, ans
sache pour answer
ans = ( rponse en anglais).
161051.

il est possible de revenir en arrire tout moment, avec les ches du clavier ou avec la souris ; les
touches gauche et droite permettant de modier les instructions et les touches haut et bas, donnant la
possibilit de revenir sur une commande prcdemment excute.

|5
se Familiariser sCilab

calculs numriques simples


Tous les calculs eectus par scilab sont numriques.
scilab calcule avec des matrices (voir le chapitre 2, page 30).

les oprations se notent + pour laddition, - pour la soustraction, * pour la multiplication, / pour
la division, ^ pour les exposants. la virgule des nombres dcimaux est note avec un point. Par exemple :

-->2+3.4
ans =
5.4

il est ncessaire de bien respecter la casse (majuscules et minuscules) pour que les calculs seectuent
correctement. Par exemple, avec la commande sqrt qui permet de calculer la racine carre :

-->sqrt(9) -->SQRT(9)
ans = alors que : !--error 4
3. Variable non dfinie: SQRT

des nombres particuliers


%e et %pi reprsentent respectivement e et :

-->%e -->%pi
%e = %pi =
2.718281828459 3.1415926535898

%i reprsente la variable complexe i en entre et sache i en sortie :

-->2+3*%i
ans =
2. + 3.i

6|
se Familiariser sCilab

Pour ne pas acher le rsultat


en ajoutant un point virgule ; la n dune ligne de commande, le calcul seectue mais le rsultat ne
sache pas.

-->(1+sqrt(5))/2; -->(1+sqrt(5))/2
ans =
1.6180339887499

Pour se rappeler le nom dune fonction


les noms des principales fonctions sont rcapituls au chapitre 4 de ce livret (page 85).

Par exemple : noter


-->exp(10)/factorielle(10) les fonctions disponibles sont
ans = galement listes dans laide
0.0060699034928 accessible en cliquant dans la
barre de menus sur :
? > aide de Scilab

il est possible dutiliser la touche tabulation de son clavier, pour complter le nom dune fonction ou
dune variable dont on a donn les premires lettres.

Par exemple, si lon tape dans la console :


-->fact
et que lon tape sur la touche tabulation, une petite fentre apparat permettant de choisir entre toutes les
fonctions et noms de variables commenant par fact, comme factorielle et factorise. il sut alors
de double-cliquer sur la fonction souhaite ou de la slectionner avec la souris ou avec avec les ches du
clavier et dappuyer sur la touche Entre (Windows et linux) ou retour (mac Os X) pour linsrer.

la barre de menus
Vous serez amen utiliser tout particulirement les menus lists ci-dessous.

applications
w lhistorique des commandes permet de retrouver toutes les commandes des sessions prcdentes et
de la session courante.
w le navigateur de variables permet de retrouver toutes les variables utilises prcdemment au cours
de la mme session.

|7
se Familiariser sCilab

dition
Prfrences (dans le menu scilab sous mac Os X) permet de rgler et de personnaliser les couleurs, les
polices et la taille des caractres dans la console et dans lditeur, ce qui est trs utile quand on projette sur
un cran devant une classe.
Cliquez sur Eacer la console pour eacer tout le contenu de la console. dans ce cas, lhistorique est
conserv et les calculs eectus lors de la session restent en mmoire. Vous pourrez toujours revenir sur une
commande qui a t eace en utilisant les ches du clavier.

contrle
Pour interrompre un programme en cours dexcution, on peut :
w Taper pause dans le programme ou cliquer sur contrle > Interrompre dans la barre de menus (Ctrl X
sous Windows et linux ou Commande X sous mac Os X), si le programme est dj lanc. dans tous les
cas, linvite de commande --> se transformera en -1->, puis en -2->, si lopration est
rpte.
w Pour revenir au moment de linterruption du programme, taper resume dans la console ou cliquer sur
contrle > reprendre
w Pour arrter dnitivement un calcul sans possibilit de retour, taper abort dans la console ou cliquer
sur contrle > abandonner dans la barre de menus.

lyce
partir du menu lyce, deux applications vous sont proposes pour illustrer votre cours en classe :
w ajustement ane par la mthode des moindres carrs,
w calcul daire pour lencadrement de laire du domaine compris entre une courbe et laxe des abscisses
par la mthode des rectangles.

ldItEur
Taper directement dans la console a deux inconvnients : lenregistrement nest pas possible, et si plusieurs
lignes dinstructions ont t tapes, les modications ne sont pas aises. Pour enchaner plusieurs
instructions, lditeur est loutil appropri.

ouvrir lditeur
Pour ouvrir lditeur partir de la console, cliquez sur la premire icne dans la barre doutils ou sur
applications > Scinotes dans la barre de menus.

lditeur souvre avec un chier par dfaut qui sintitule Sanstitre1.

8|
se Familiariser sCilab

crire dans lditeur


On tape du texte dans lditeur comme dans nimporte quel traitement de texte.

dans lditeur de texte, lapparition des parenthses, ouvrantes et fermantes et des commandes de n de
boucle, de fonction et de test est automatique.
On peut cependant dsactiver ces deux fonctionnalits dans le menu options > compltion automatique,
en cliquant sur les deux entres ci-dessous actives par dfaut :
w (,[,
w if,function,

en principe, il faut aller la ligne aprs chaque instruction, mais il est possible de taper plusieurs instructions
sur une mme ligne en les sparant par un point virgule ; .

Un dcalage de dbut de ligne appel indentation se fait automatiquement lorsquon commence une
boucle ou un test.

dans lexemple suivant, on calcule 10 termes de la suite (un) dnie par :


u1 = 1
un+1 = 2u n - 3{
noter
Pour crire des
commentaires qui
ne seront pas pris
en compte dans les
calculs, les faire
prcder de // .

noter
w Pour changer la police, cliquez sur options > Prfrences.
w lcriture dun programme, lindentation est automatique. si toutefois cela ntait pas le cas, cliquez sur Format > corriger
lindentation pour la rtablir (Ctrl i sous Windows et linux ou Commande i sous mac Os).

Enregistrer
il est possible denregistrer tout chier en cliquant sur Fichier > Enregistrer sous.
lextension .sce la n du nom de chier dclenchera automatiquement le lancement de scilab
louverture du chier (except sous linux et mac Os X).

|9
se Familiariser sCilab

copier dans la console, excuter le programme


en cliquant sur Excuter dans la barre de menus, trois options sont proposes :
w excuter chier sans cho (Ctrl maj e sous Windows et linux, Cmd maj e sous mac Os X) : le
chier est excut sans que le programme ne scrive dans la console (en ayant enregistr le chier au
pralable).
w excuter chier avec cho (Ctrl l sous Windows et linux, Cmd l sous mac Os X) : rcrit le chier
dans la console et lexcute.
w excuter jusquau curseur, avec cho (Ctrl e sous Windows et linux, Cmd e sous mac Os X) :
rcrit la slection choisie avec la souris dans la console et lexcute ou excute les donnes du chier
jusqu la position du curseur dnie par lutilisateur).

On peut aussi utiliser le copier / coller classique.

la FEntrE GraPhIquE
ouvrir une fentre graphique
Une fentre graphique souvre pour tout trac.
il est possible de tracer des courbes, des surfaces, des nuages de points, des histogrammes (voir le chapitre
2, page 21).

On obtient un exemple de courbe en tapant dans la console :


-->plot

noter
w Pour eacer un trac
prcdent, tapez clf
( clear gure en anglais).
w Pour ouvrir une autre fentre
graphique, tapez scf; ( set
current gure en anglais).
si plusieurs fentres
graphiques ont t ouvertes,
on peut choisir celle dans
laquelle on veut faire son trac
en tapant scf(n); o n est le
numro de la fentre (indiqu
en haut gauche).

10 |
se Familiariser sCilab

Modier un trac
la loupe permet de faire un zoom. Pour eectuer un zoom en deux dimensions, cliquez sur licne et
avec la souris crez un rectangle qui constituera la nouvelle vue agrandie. Pour eectuer un zoom en trois
dimensions, cliquez sur licne et crez le paralllpipde qui constituera la nouvelle vue agrandie. il est
galement possible de zoomer en utilisant la molette de la souris.
1
Pour revenir lcran initial, cliquez sur lautre loupe .

licne permet de faire tourner la gure (particulirement utile en 3d) avec des actions de clic droit qui
seront guides par des messages en bas de la fentre graphique.

Pour faire apparatre un quadrillage, tapez dans la console quadrillage.


Pour des modications plus prcises, cliquez sur dition > Proprits de la gure ou Proprits des axes et
laissez-vous guider (cette option nest pas encore disponible sous mac Os X).

laIdE En lIGnE
Pour accder laide en ligne, cliquez sur ? > aide Scilab dans la barre de menus, ou tapez dans la console :
-->help

noter
Une partie de laide est
disponible en franais, le
reste est en anglais.
des exemples dutilisation
peuvent tre excuts
dans scilab et dits dans
scinotes en utilisant les
boutons associs dans le
cadre de lexemple.
laide sur les fonctions du
module lyce (en bas de
la liste) est entirement
disponible en franais.

Pour obtenir de laide sur des fonctions, tapez dans la console help et le nom de la fonction souhaite. Par
exemple :
-->help sin
achera laide de la fonction sin (sinus).

| 11
se Familiariser sCilab

GrEr lES FEntrES Et PErSonnalISEr Son ESPacE dE travaIl


Comme pour lenvironnement par dfaut de scilab, rassemblant les fentres de la console, les navigateurs de
chiers et de variables et lhistorique des commandes, toutes les autres fentres de scilab peuvent tre
repositionnes dans une seule et mme fentre. Par exemple, lutilisateur peut choisir de placer lditeur
dans lenvironnement par dfaut de scilab.

Pour placer une fentre dans une autre, on repre dabord la barre horizontale bleue sous Windows et noire
sous mac Os X et linux situe en haut de la fentre sous la barre doutils, contenant un point dinterrogation
droite.
w sous Windows et linux, cliquez sur cette barre avec le bouton gauche de la souris, et, en maintenant
ce bouton enfonc, dplacez la che de la souris dans la fentre souhaite.
w sous mac Os X, cliquez sur cette barre et en maintenant le clic sur la souris, dplacez-la dans la fentre
souhaite.

Un rectangle apparat indiquant le positionnement futur de la fentre. lorsque la position est celle que vous
souhaitez, relchez le bouton de la souris. Pour annuler et faire ressortir la fentre, cliquez sur la petite che
droite de la mme barre.

12 |
PrOGrammer

chapitre 2 - Programmer
dans les exemples donns dans ce livret, toute ligne prcde de --> est une commande, les autres
lignes sont les retours (rsultats de calcul, messages derreur). il ne faut pas crire --> dans lditeur.
nous lavons introduit uniquement pour bien direncier les lignes de commande des retours de calculs,
lachage se faisant ainsi dans la console aprs un copier / coller. Prsentes dans un tableau (sans --> et
sans retour de calcul), les commandes sont donc reprsentes telles quelles devront tre tapes dans
lditeur.

varIablES, aFFEctatIon Et aFFIchaGE


les variables
scilab nest pas un logiciel de calcul formel. il calcule uniquement avec des nombres. Tous les calculs sont en
ralit faits avec des matrices, mais cela peut passer inaperu. bien que la notion de matrice ne soit pas
connue dans la plupart des classes de lyces, on utilise les vecteurs et les suites de nombres qui sont, en fait,
des matrices 1 n ou n 1, de mme quun nombre est une matrice de dimension 1 1.

les variables nont pas besoin dtre dclares lavance, mais toute variable doit avoir une valeur.
Par exemple, demander la valeur de la variable a sans lui avoir donn de valeur auparavant, produit une
erreur :
-->a
!--error 4
Variable non dfinie : a

si lon aecte une valeur la variable a, il ny a plus derreur :


-->a=%pi/4
a =
0.7853981633974
-->a
a =
0.7853981633974

On peut utiliser nimporte quel nom de variable qui nest pas dj dni par le systme :
-->Pisur2=%pi/2
Pisur2 =
1.5707963267949
noter
Tout comme les fonctions
scilab, un nom de variable ne
doit pas comporter daccents ou
de caractres spciaux.

| 13
PrOGrammer

si lon naecte pas le rsultat dun calcul une variable, la valeur sera aecte automatiquement la
variable appele ans :
-->3*(4-2)
ans =
6.

-->ans
ans =
6.

les fonctions
les fonctions sont le moyen le plus simple et le plus naturel pour faire des calculs partir de variables et
obtenir des rsultats partir de celles-ci.

la dnition dune fonction commence par function et nit par endfunction. Par exemple, pour
transformer des euros (e) en dollars (d) avec un taux de change (t), dnissons la fonction dollars. les
variables sont e et t et limage est d.
-->function d=dollars(e,t); d=e*t; endfunction

-->dollars(200,1.4)
ans =
280.

le plus souvent, on utilise au lyce des fonctions numriques une variable relle. Par exemple, deux
fonctionsf et g sont dnies laide des commandes ci-dessous :
-->function y=f(x); y=36/(8+exp(-x)); endfunction noter
w les variables x et y sont des
-->function y=g(x); y=4*x/9+4; endfunction variables muettes, leurs noms
pouvant tre rutiliss dans la
dnition dautres fonctions ou
les fonctions ayant t dnies, elles peuvent tre utilises pour calculer
dans scilab.
des valeurs : w la commande return
-->f(10) permet de sortir dune fonction
ans = (voir lexemple 34, page 72).
4.4999744626844

-->g(12.5)
ans =
9.5555555555556

14 |
PrOGrammer

demander laectation dune valeur


laectation se fait de faon simple avec le symbole = .
Pour demander avec une phrase la valeur attribuer une variable, on utilise input, en mettant la phrase
entre des guillemets droits "" .

reprenons lexemple du calcul des dollars partir deuros :


diteur Scilab console Scilab

e=input("Somme en euros : "); Somme en euros : 200


t=input("Taux de change : "); Taux de change : 1.4
d=e*t;
afficher("Somme en dollars : "+string(d)) Somme en dollars : 280

avec input, le programme attend une valeur.

Pour excuter correctement le programme, enregistrez-le puis cliquez sur Excuter > chier sans cho
dans la barre de menus. renseignez alors dans la console, les valeurs au fur et mesure quelles vous sont
demandes (dans lexemple, on a tap 200, entre, puis 1.4, entre).

si vous cliquez sur Excuter > chier avec cho ou sur Excuter > jusquau curseur, avec cho, ou lors
dun copier / coller, vous obtiendrez une erreur car le programme tant recopi, la valeur attendue pour e
sera t, qui nest pas un nombre.

lachage
crire
Taper le nom dune variable ache sa valeur, sauf avec ; en n de commande.

les crochets
les crochets permettent de dnir des matrices(voir la page 30).
Comme nonc prcdemment, le calcul matriciel est la base des calculs eectus dans scilab.

Un espace ou une virgule permet de passer dune colonne la suivante et un point virgule, dune ligne
lautre.

| 15
PrOGrammer

Pour dnir un vecteur colonneet obtenir un achage en colonne :


-->v=[3;-2;5]
v =
3.
- 2.
5.

Pour dnir un vecteur ligneet obtenir un achage en ligne :


noter
-->v=[3,-2,5]
il est aussi possible de taper
v = cette commande sous la forme :
3. - 2. 5. v=[3-25]

Pour dnir une matriceet acher un tableau :


-->m=[1 2 3;4 5 6;7 8 9]
m = noter
1. 2. 3. il est aussi possible de taper
4. 5. 6. cette commande sous la forme :
m=[1,2,3;4,5,6;7,8,9]
7. 8. 9.

la fonction acher
afficher est le nom francis de la fonction disp utilise dans scilab sans le module lyce. elle est toujours
suivie de parenthses.

avec le vecteur v prcdent :


-->v(2)
ans =
- 2.

-->afficher(v(2))
- 2.

Pour acher une chane de caractres (en gnral une phrase), on la met entre guillemets :
-->afficher("Bob a gagn")
Bob a gagn

16 |
PrOGrammer

Pour mlanger des mots et des valeurs, utilisez la commande string qui transforme les valeurs en
caractres, et + entre les direntes parties :
-->d=500;

-->afficher("Bob a gagn "+string(d)+" dollars")


Bob a gagn 500 dollars

si la phrase contient une apostrophe, il est ncessaire de la doublerdans la chane de caractres pour quelle
sache correctement :
-->afficher("C''est juste")
C'est juste

lES bouclES
lincrmentation
loprateur : permet de dnir des vecteurs de nombres dont les coordonnes sont en suite
arithmtique. On donne la premirevaleur : le pas : la dernire valeur (pas forcment atteinte). si le pas
nest pas mentionn, sa valeur est 1 par dfaut.

Par exemple, pour dnir un vecteur ligne dentiers qui sincrmentent de 1entre 3 et 10 :
-->3:10
ans =
3. 4. 5. 6. 7. 8. 9. 10.

ou qui sincrmentent de 2entre 1 et 10 :


-->1:2:10
ans =
1. 3. 5. 7. 9.

ou qui se dcrmentent de 4entre 20 et 2 :


-->u=20:-4:2
u =
20. 16. 12. 8. 4.

| 17
PrOGrammer

For
la structure de boucle la plus simple pour un nombre connu ditrations scrit avec for end qui signie
Pour n de pour .

exemple : Calcul de 20 termes dune suite dnie par rcurrencepar : u1 = 4 et un+1 = un + 2n + 3


algorithme diteur Scilab
mettre 4 dans u(1) u(1)=4;
Pour n allant de 1 20 for n=1:20
u(n+1) prend la valeur u(n)+2n+3 u(n+1)= u(n)+2*n+3;
acher n et u(n) afficher([n,u(n)])
Fin de pour end

noter
Cette suite a t pose au bac en donnant u0=1, mais pour dnir le vecteur u, nous devons commencer u(1), premire
coordonne de u.

While
si lon veut que la boucle sarrte lorsquun objectif donn est atteint, on utilisera la forme whileend
qui signie Tant que n de tant que .

exemple : Jai replant en 2005 un sapin de nol qui mesurait 1,20 m. il grandit de 30 cm par an. Jai dcid
de le couper quand il dpasserait 7 m. en quelle anne vais-je couper mon sapin ?

algorithme diteur Scilab


mettre 1,2 dans h (h = hauteur du sapin) h=1.2;
mettre 2005 dans a (a = anne) a=2005;
Tant que h<7 while h<7
h=h+0.3;
h prend la valeur h+0,3 (mon sapin grandit)
a=a+1;
a prend la valeur a+1 (une anne se passe) end
Fin de tant que afficher("Je couperai mon..
acher a (la dernire anne) sapin en "+string(a))

noter
Quand une commande est trop longue pour tre crite sur une seule ligne, lditeur va automatiquement la ligne. On peut
aussi mettre .. avant daller la ligne.

18 |
PrOGrammer

lES tEStS
les oprateurs de comparaison
Comparer des nombres ou vrier si une armation est vraie ou fausse sont des tests utiles. Voici les
commandes correspondantes :

Infrieur Suprieur
gal dirent Infrieur Suprieur
ou gal ou gal
== <> < > <= >=

noter vrai Faux Et ou non


attention la prcision. les calculs faits
tant approchs, le test == donne %T %F & | ~
parfois des rponses fausses (voir les
problmes de prcision, page 36).

lorsque lon veut comparer deux vecteurs (ou deux matrices), les tests == et <> comparent terme
terme. Par exemple :
-->X=[1,2,5]; Y=[5,3,5];

-->X==Y
ans =
F F T

Pour tester si les vecteurs sont gaux, on utilise isequal, et sils sont dirents, ~isequal :
-->isequal(X,Y)
ans =
F

-->~isequal(X,Y)
ans =
T

| 19
PrOGrammer

Ifthen
les structures classiques sont les suivantes :
w ifthenelseend ( sialorssinonn de si ),
w ifthenelseifthenelseend( sialorsou sialors ou n de si ).

ifthen doivent tre crits sur la mme ligne, de mme que elseifthen.

Exemple
alice lance trois ds :
w si elle obtient trois 6, elle gagne 20 ,
w si elle obtient trois rsultats identiques dirents de 6, elle gagne 10 ,
w si elle obtient deux rsultats identiques, elle gagne 5 ,
w sinon, elle ne gagne rien.

simulez un lancer et calculez le gain dalice, en utilisant les fonctions :


w tirage_entier(voir page 26),
w unique(D) qui ne garde quune fois les valeurs qui apparaissent plusieurs fois dans D,
w taille(unique(D))qui donne la taille du vecteur ainsi obtenu, donc 1 si les trois termes sont
gaux, 2 si deux termes sont gaux.

algorithme diteur Scilab


mettre les trois valeurs dans d D=tirage_entier(3,1,6);
si alice obtient trois 6, alors if D==[6,6,6] then
alice gagne 20 euros G=20;
sinon, si elle obtient 3 ds identiques, alors elseif taille(unique(D))==1 then
G=10;
alice gagne 10 euros
elseif taille(unique(D))==2 then
sinon, si elle obtient 2 ds identiques, alors
G=5;
alice gagne 5 euros else
sinon G=0;
alice ne gagne rien end
Fin de si afficher("Alice gagne "+..
acher le gain dalice string(G)+ " euros")

20 |
PrOGrammer

lES tracS En 2 Et 3 dIMEnSIonS


les tracs dans le plan se font avec la commande plot. On peut choisir la couleur et laspecten mettant les
indications de couleur et de style de points entre guillemets :

w les couleurs
"b"= bleu (par dfaut), "k" = noir, "r" = rouge, "g" = vert, "c" = cyan, m" = magenta, "y" = jaune,
"w" = blanc.

w les styles de points


relis (par dfaut), ou ".", "+", "o", "x", "*".
dautres options sont disponibles avec : "s", "d", "v", "<", et ">".

tracs de base
w Pour tracer un point
Tracer le point a (1 ; 2) avec un point rouge.

diteur Scilab Fentre graphique

plot(1,2,".r")

| 21
PrOGrammer

w Pour tracer un segment


Tracer le segment [ab] en bleu (par dfaut) avec a (1 ; 2) et b (3 ; 5).
diteur Scilab Fentre graphique

plot([1,3],[2,5])

w Pour tracer un cercle


Trac du cercle de centre a (1 ; 2) et de rayon 5 en jaune dans un repre orthonorm.
diteur Scilab Fentre graphique

orthonorme;cercle(1,2,5,"y")

tracs de courbes planes dnies par des fonctions y=f(x)


Pour une fonction x f (x) dnie sur un intervalle de R , donnez avec la commande linspace les valeurs
de x,en crivant : x=linspace(a,b,n);o a est la plus petite valeur de la variable x, b est la plus grande
valeur de x, et n le nombre de valeurs qui seront calcules entre a et b.
ne pas oublier le ; sinon les n valeurs de x sacheront.

Par exemple, soient deux fonctions f et g dnies sur [-2; 5] par :

f (x) = (x 2 + 2x)e -x , et g(x) = sin ( x2 (


22 |
PrOGrammer

Ci-dessous avec ce programme, on obtient le trac de la courbe de f, en bleu par dfaut.


diteur Scilab Fentre graphique

function y=f(x)
y=(x^2+2*x)*exp(-x)
endfunction
x=linspace(-2,5,50);
plot(x,f)

en ajoutant le programme ci-dessous, on obtient le trac des deux courbes, celle de f en rouge et celle de g
en vert. le trac prcdent a t eac grce la commande clf ( clear gure en anglais).

diteur Scilab Fentre graphique

function y=g(x)
y=sin(x/2)
endfunction
x=linspace(-2,5,50);
clf
plot(x,f,"r",x,g,"g")

noter
les arguments de la fonction plot sont toujours des nombres rels. si
lon donne des nombres complexes comme arguments, la fonction
plot utilise leur partie relle sans donner de message derreur.

Par exemple, si lon trace la courbe de la fonction ln entre -10 et 10 en


utilisant la commande x=linspace(-10,10,100);
plot(x,ln(x)), la fonction plot tracera entre -10 et 10 la partie
relle du logarithme. On aura ainsi ln(3) comme image de -3 puisque
ln (-3) = ln (3e i) = ln (3) + i + 2ki.

| 23
PrOGrammer

tracs de nuages de points


termes dune suite
le cas le plus courant est celui o lon veut tracer les points M (n , u(n)) aprs avoir calcul les coordonnes
u(n) dun vecteur u. On crit alors plot(u,"*r")en spciant la forme et la couleur des points du nuage
entre guillemets.

On a choisi ici des toiles de couleur rouge qui ne sont pas relies. Par dfaut, les points sont bleus et relis.

diteur Scilab Fentre graphique

for n=1:50
u(n)=(-0.8)^n;
end
clf; plot(u,"*r")

Statistiques doubles
les nuages statistiques sont donns sous la forme de deux vecteurs : appelons les X et Y, on crira alors
plot(X,Y,"<") pour tracer le nuage des points M (Xi ; Yi) avec des triangles bleus.

diteur Scilab Fentre graphique

X=[1,3,3,7,7,9,10];
Y=[8,7,5,5,4,2,2];
clf; plot(X,Y,"<")

24 |
PrOGrammer

tracs en trois dimensions


scilab permet de tracer des surfaces et des courbes dans lespace avec un grand nombre doptions pour le
traitement des faces caches, la couleur des faces, les points de vue, etc. nous ne donnerons ici que deux
exemples.

la fonction surf permet de tracer une surface. Cette fonction prend trois variables dentre, x, y et z.
x et y sont des vecteurs de taille respective m et n correspondant des points des axes (Ox) et (Oy). z est
une matrice de dimension n m dont llment zij est la cote du point de la surface dabscisse xi et
dordonne yj.

Pour tracer la surface dnie par une fonction du type z = f (x , y), il faut donc :
w dnir la fonction f
w Calculer z=feval(x,y,f)'
feval(x,y,f) retourne la matrice m n dont llment ij est f (xi , yj) que lon va transposer en
utilisant lapostrophe ' .
w appliquer surf(x,y,z).

le trac de la surface z = 2 x2 + y2 (parabolode elliptique) :


diteur Scilab Fentre graphique

function z=f(x,y)
z=2*x^2+y^2;
endfunction
x=linspace(-1,1,100);
y=linspace(-2,2,200);
z=(feval(x,y,f))';
clf
surf(x,y,z)

la fonction param3d permet de tracer une courbe dans lespace. param3d prend trois arguments, x, y et z
qui sont des vecteurs de mme taille correspondant aux points (xi , yi , zi) de la courbe.

| 25
PrOGrammer

le trac de lhlice dnie par (x = cos (t), y = sin (t), z = t) :


diteur Scilab Fentre graphique

t=linspace(0,4*%pi,100);
param3d(cos(t),sin(t),t)

Simulations et statistiques
de nombreuses fonctions ont t cres dans le module lyce pour faciliter les simulations de faon rapide
et performante.

tirages alatoires avec ordre et remise


w tirage_entier(p,m,n) retourne un vecteur de p tirages entiers alatoires pris entre m et n avec p
entier positif, m et n entiers et m n.
-->t=tirage_entier(4,1,6)
t =
3. 1. 3. 6.

w tirage_reel(p,a,b) retourne un vecteur de p tirages rels alatoires pris entre a et b avec p entier
positif, a et b rels et a b.
-->tr=tirage_reel(2,-1,1)
tr =
- 0.7460263762623 0.9377355421893

w frequence(n,s) retourne la frquence de n dans la suite de nombres s avec n entier.


Par exemple, pour obtenir la frquence dapparition du 6 dans 1 000 lancers de d :
-->t=tirage_entier(1000,1,6);
-->frequence(6,t)
ans =
0.173

26 |
PrOGrammer

tirages alatoires sans ordre ni remise


dnir un ensemble
w la fonction ensemble permet de crer un ensemble :
-->E=ensemble("e1","e2","e3")
E =
{e1,e2,e3}

-->E(1)
ans =
e1

les lments de lensemble e1, e2,... sont des chanes de caractres. Un ensemble est non ordonn et na
pas dlments dupliqus. Par exemple, {a,b,c} et {b,a,c,a} reprsentent le mme ensemble. lorsquun
ensemble est cr, les lments dupliqus sont supprims et, par commodit, ces lments sont ordonns
par ordre alphabtique.

il est possible dattribuer des valeurs des lments dun ensemble, par exemple pour des ensembles de
pices, de billets ou de cartes jouer avec des valeurs. la valeur est donne en la mettant entre parenthses
la n du nom de llment.

Par exemple, pour un ensemble U contenant trois boules rouges numrotes 1, 2, 3 et deux boules noires
numrotes 1, 2, tapez :
-->U=ensemble("n(1)","n(2)","r(1)","r(2)","r(3)");

il est galement possible davoir des vecteurs de chanes de caractres comme arguments de la fonction
ensemble. Cela permet, par exemple, de crer facilement un ensemble dont les lments sont des nombres
entiers :
-->ensemble(string(1:9))
ans =
{1,2,3,4,5,6,7,8,9}

w la fonction valeur donne alors le vecteur des valeurs des lments, permettant ainsi de les utiliser
dans des calculs.
-->valeur(U)
ans =
1. 2. 1. 2. 3.

| 27
PrOGrammer

w la fonction taille donne le nombre dlments dun ensemble.


Pour comparer deux ensembles, on utilise loprateur habituel == .
noter
On dispose aussi des fonctions ajouter, appartient, complmentaire, enlever, inclus, intersection, union.

w Faire un tirage alatoire dans un ensemble


On utilise la fonction tirage_ensemble en indiquant combien dlments on souhaite tirer.
supposons que lon tire deux boules dans lensemble U prcdent et que lon souhaite vrier si elles sont
rouges :
-->U=ensemble("n(1)","n(2)","r(1)","r(2)","r(3)"); noter
-->R=ensemble("r(1)","r(2)","r(3)"); ensemble() cre
-->T=tirage_ensemble(2,U) un ensemble vide
T =
{n(1),r(3)}
-->if inclus (T,R)==%T then
-->afficher ("Les deux boules sont rouges")
-->else
-->afficher("Les deux boules ne sont pas rouges")
Les deux boules ne sont pas rouges
-->end

Statistiques
Toutes les fonctions statistiques habituelles sont listes la page 85.

Gardez particulirement en mmoire :


w la fonction bar(x,n,couleur) qui trace des diagrammes en barre :

diteur Scilab Fentre graphique

x=[1:10];
n=[8,6,13,10,6,4,16,7,8,5];
clf; bar(x,n)

28 |
PrOGrammer

w Pour un diagramme en barres reprsentant deux sries cte cte : soit la srie de valeurs X, et les
deux sries deectifs n1 et n2. Pour le trac, n1 et n2 doivent tre des vecteurs colonne, cest pourquoi
dans lexemple ci-dessous, on prend les transposes :
diteur Scilab Fentre graphique

X=[1,2,5];n1=[5,10,5];n2=[6,8,7];
bar(X,[n1',n2'])

w la fonction histogramme(a,n,couleur) qui permet de tracer lhistogramme dune srie


statistique o les valeurs de la variable sont regroupes dans des intervalles. a est le vecteur donnant
les bornes des intervalles dans lordre croissant et n est le vecteur des eectifs ou des frquences
correspondants. le vecteur a a un lment de plus que le vecteur n.

diteur Scilab Fentre graphique

a=[0,10,15,20,40];
n=[8,6,13,10];
clf; histogramme(a,n,"r")

Pour ces deux fonctions, largument optionnel couleur dnit la couleur comme dans la fonction
plot.

| 29
PrOGrammer

larIthMtIquE
Toutes les fonctions arithmtiques habituelles sont rcapitules la page 85.

Gardez particulirement en mmoire :


w la fonctionreste qui donne le reste dans la division euclidienne.
-->reste(75,4)
ans =
3.

-->reste(-75,4)
ans =
1.

w la fonction diviseurs qui donne tous les diviseurs positifs.


-->diviseurs(75)
ans =
1. 3. 5. 15. 25. 75.

w la fonction factorise qui donne la dcomposition en facteurs premiers.


-->factorise(75)
ans =
3. 5. 5.

coMPlMEntS Sur lES MatrIcES Et lES vEctEurS


accder aux lments
les crochets permettent de dnir une matrice. Un espace ou une virgule permet de passer dune colonne
la suivante et un point virgule, dune ligne lautre.

-->m=[1 2 3;4 5 6] noter


m = il est aussi possible de taper
cette commande sous la forme :
1. 2. 3.
m=[1,2,3;4,5,6]
4. 5. 6.

30 |
PrOGrammer

les parenthses permettent daccder aux lments ou de les modier.


-->m(2,3)
ans =
6.

-->m(2,3)=23
m =
1. 2. 3.
4. 5. 23.

loprateur : sert dsigner toutes les lignes ou toutes les colonnes dune matrice.

Pour avoir la deuxime ligne de la matrice m, tapez :


-->m(2,:)
ans =
4. 5. 23.

et la troisime colonne :
-->m(:,3)
ans =
3.
23.

Pour obtenir la transpose dune matrice ou dun vecteur, on utilise lapostrophe ' :
-->m'
ans =
1. 4.
2. 5.
3. 23.

| 31
PrOGrammer

oprations
les oprations * , / sont des oprations matricielles. Pour faire des oprations lment par lment, on
fera prcder le signe opratoire dun point : .* , ./ .
-->A=[1,2,3;4,5,6]
A =
1. 2. 3.
4. 5. 6.
-->B=[1;1;2]
B =
1.
1.
2.
-->A*B
ans =
multiplication matricielle
9.
21.

-->A*A
!--error 10 les dimensions ne sont pas bonnes
Multiplication incohrente.

-->A.*A
ans =
multiplication lment par lment
1. 4. 9.
16. 25. 36.

-->2*(A+2)
ans =
lopration se fait sur chaque lment car 2 est un nombre
6. 8. 10.
12. 14. 16.

donne la matrice X telle que X*a = a


la rponse exacte est :
-->A/A 1. 0
ans = 0 1.
1. 1.518259871D-16
3.795187214D-15 1. Pour des raisons de prcision de calcul, le rsultat peut tre
lgrement dirent suivant votre version de scilab et votre
systme dexploitation (voir les prcisions de calcul, page 36).

32 |
PrOGrammer

-->A./A
ans =
donne la matrice divise lment par lment
1. 1. 1.
1. 1. 1.

dans le cas des vecteurs :

-->C=1:4
C =
1. 2. 3. 4.

-->C*C
!--error 10 les dimensions ne sont pas bonnes
Multiplication incohrente.

-->C.*C il est aussi possible dcrire C^2 car, pour les vecteurs,
lcriture avec un exposant se traduit par une
ans =
opration lment par lment. Ce nest pas le cas
1. 4. 9. 16. pour les matrices.

-->1/C
ans =
0.0333333333333 dans ce cas spcique aux vecteurs, on trouve le
0.0666666666667 vecteur X tel que C*X = 1
0.1
0.1333333333333

inverse lment par lment

-->(1)./C Comme prcdemment, C^(-1) aurait t possible.


ans = les parenthses autour de 1 sont ncessaires pour
1. 0.5 0.3333333333333 0.25 que le point ne soit pas considr comme une virgule,
faisant partie du nombre 1. On peut aussi crire
1./C avec un espace entre 1 et .

| 33
PrOGrammer

rsolutions de systme
Pour rsoudre le systme linaire aX = Y, o a est une matrice carre, utilisez lanti-slash \
X = a \ Y ou bien la puissance -1 : X = a^(-1)*Y.
attention, lopration Y / a donnera ( condition que les dimensions soient bonnes) un autre rsultat, soit la

( ( ((
matrice Z telle que Z a = Y. lopration X = a^(-1)*Y sera beaucoup plus coteuse en temps de calcul.
1 2 3 1
Pour rsoudre le systme : X X =
4 5 6 1
-->A=[1 2 3;4 5 6];

-->Y=[1;1];

-->X=A\Y
X =
- 0.5
0.
0.5

-->A*X
ans =
1.
1.

quelques fonctions utiles


trier
la fonction trier permet dordonner par ordre croissant ou dcroissant les lments dun vecteur.
-->v=[2,6,9,6,-4,0,2]
v =
2. 6. 9. 6. - 4. 0. 2.

-->trier(v)
ans =
- 4. 0. 2. 2. 6. 6. 9.

-->trier(v,">")
ans =
- 4. 0. 2. 2. 6. 6. 9.

34 |
PrOGrammer

-->trier(v,"<")
ans =
9. 6. 6. 2. 2. 0. - 4.

taille
la fonction taille retourne le nombre de coordonnes dans le cas dun vecteur, et les dimensions (lignes,
colonnes) dans le cas dune matrice.
-->m=[1 2 3;4 5 6];

-->taille(m)
ans =
2. 3.

-->U=[1:10]
U =
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

-->taille(U)
ans =
10.

Somme et produit
les fonctions sum et prod calculent respectivement la somme et le produit des lments de leur argument.
On reprend le vecteur U, vu au point prcdent :
-->U=[1:10];

-->sum(U)
ans =
55.

-->prod(U)
ans =
3628800.

| 35
PrOGrammer

unique
la fonction unique ne garde quune fois les lments dans un vecteur (mme si ceux-ci sont rpts
plusieurs fois) et les ordonne par ordre croissant. elle peut tre trs utile pour faire des tests (voir lexemple
23, page 62).
-->v=[2,6,9,6,-4,0,2]
v =
2. 6. 9. 6. - 4. 0. 2.

-->unique(v)
ans =
- 4. 0. 2. 6. 9.

trouver
la fonction find permet de rechercher des lments dans un vecteur ou une matrice et retourne un
vecteur contenant les indices correspondants.

Pour trouver tous les lments du vecteur w plus petits que 5 :


-->w=[1,5,3,8,14,7,3,2,12,6]; find(w<5)
ans =
1. 3. 7. 8.

le vecteur rsultat (1,3,7,8) nous indique que les lments w1, w3, w7 et w8 sont plus petits que 5.

Pour trouver tous les lments du vecteur w gaux 3 :


-->w=[1,5,3,8,14,7,3,2,12,6]; find(w==3)
ans =
3. 7.

le vecteur rsultat (3,7) indique que les lments w3 et w7 sont gaux 3.

ProblMES dE PrcISIon
Pour le calcul
les nombres ont une valeur absolue comprise entre environ 2,2 10-308 et 1,8 10+308.

le nombre %eps gal 2.220446049D-16 donne la plus petite prcision relative que lon puisse esprer
dans le calcul, soit environ 16 chires.

36 |
PrOGrammer

Exemple 1 : calcul de sin()

-->sin(%pi)
ans =
1.224646799D-16

la valeur de sin() ci-dessus nest pas 0, mais on la considre comme nulle. en eet, par rapport la valeur
maximale de la fonction sinus (soit 1), elle est gale 0 avec une erreur infrieure %eps.

Exemple 2 : testons si le triangle de cts 3, 1 et 2 est rectangle :

-->a=sqrt(3)
a =
1.7320508075689

-->b=1
b =
1.

-->c=2
c =
2.

-->a^2+b^2==c^2 le programme rpond faux


ans = car la valeur de a^2+b^2
F est approche

-->abs(a^2+b^2-c^2)<%eps le programme rpond faux


ans = car la prcision demande
F est absolue

-->abs(a^2+b^2-c^2)/c^2<%eps le programme rpond vrai


ans = car la prcision demande
T est relative

| 37
PrOGrammer

Pour lachage
Par dfaut, les rsultats sont achs avec 16 caractres, comprenant le point dcimal et le signe. la fonction
format permet dacher plus de chires. Pour avoir 20 chires, vous taperez alors format(20).

reprenons a = 3 :

-->a^2
ici, il y a 13 dcimales,
ans =
on ne voit pas lerreur
3.

-->format(20)

ici, il y a 17 dcimales,
-->a^2
on voit lerreur
ans =
2.99999999999999956

rSolutIon dquatIonS dIFFrEntIEllES


nous montrerons ici comment on peut trouver les solutions dun systme explicite dquations
direntielles. le principe consiste se ramener des quations direntielles dordre 1 :

{ y'(t) = f (t, y(t))


y(t0) = y0
t [ R, y(t) [ Rn , t0[ R, y0 [ R n

puis, appliquer la fonction ode: y=ode(y0,t0,t,f), avec :


w y0 : condition initiale, vecteur de dimension n,
w t0 : instant initial,
w t : vecteur de dimension T des instants o lon veut avoir la solution. Ce vecteur doit commencer
par t0,
w f : fonction dnissant le systme sous la forme :
function yprim=f(t,y)
yprim(1)=...
yprim(2)=...
....
yprim(n)=...
endfunction

38 |
PrOGrammer

( (
la solution y est une matrice de dimension n x T : y1 (1) y1 (2) ... y1 (T )
y2 (1) y2 (2) ... y2 (T )

...

...
...
yn (1) yn (2) ... yn (T )

Exemple : rsoudre lquation direntielle


{ y"y(0)= =-4y3, y'(0) = 0
On ramne cette quation dordre 2 un systme de deux quations dordre 1 en posant :

Y= ( (( (
Y (1)
Y (2)
=
y
y'
, Yprim =
(
Yprim(1)
Yprim(2)
=
y'
y" ((( { et
Yprim(1) = Y (2)
Yprim(2) = -4 X Y (1)

commentaire diteur Scilab

On dnit la fonction qui aux deux variables t et y function yprim=f(t,y)


(qui est un vecteur) fait correspondre le vecteur Y yprim(1)=y(2);
yprim(2)=-4*y(1) ;
On prcise les valeurs de t pour le graphique endfunction
(le logiciel choisit lui-mme les valeurs de t pour son t0=0; tmax=5;
calcul interne de solution). t=t0:0.05:tmax;
On prcise les conditions initiales y0=3; yprim0=0;
On applique ode y=ode([y0;yprim0],t0,t,f);
On trace la courbe intgrale de y en fonction de t clf; plot(t,y(1,:))

| 39
PrOGrammer

codaGE Et dcodaGE
Pour coder ou dcoder un texte, il faut dabord transformer les lettres en nombres. Pour cela, on utilise le
code asCii avec la commande scilab ascii :
w les lettres minuscules a z sont codes de 97 122,
w les lettres majuscules a Z sont codes de 65 90.

-->ascii("c")
ans =
99.

-->ascii("G")
ans =
71.

la commande ascii opre aussi en sens inverse :

-->ascii(100)
ans =
d

-->ascii(81)
ans =
Q

Pour rcuprer le texte coder ou dcoder, on peut soit lcrire entre guillemets, soit aller chercher le chier
.txt avec le chemin qui le dnit. Pour cela, on utilise la commande :
mgetl("Cheminmenantaufichier.txt")

nous nutiliserons ici que des textes sans accent, sans ponctuation, sans retour la ligne, crits entirement
soit en minuscules, soit en majuscules. Par exemple, si m est le message coder :

m="QUELLE BELLE JOURNEE";

ou bien :

m=mgetl("D:\Documents\Cryptographie\texte1.txt");

40 |
PrOGrammer

Exemple de codage avec le code de csar de cl 15, le texte est crit en majuscules

algorithme diteur Scilab


la cl k prend la valeur 15 k=15;
mettre le chier texte dans m m="QUELLE BELLE JOURNEE";
acher le titre afficher("Message coder")
acher le message coder afficher(m)

enlever les blancs dans m m=strsubst(m," ","")


remplacer chaque lettre par son code asCii m=ascii(m)
n=taille(m)
mettre dans n le nombre de lettres du message
M=m+k
mettre dans m le message chir auquel on a rajout for i=1: n
la cl chaque nombre if M(i)>90 then
boucle pour chaque lettre : si le rsultat dpasse 90, on M(i)=M(i)-26;
enlve 26 pour retrouver un code asCii entre 65 et 90 end
end
revenir au message texte M=ascii(M);
acher le titre afficher("Message cod")
acher le message cod afficher(M)

| 41
Dcouvrez
Inria
ujourdhui, les technologies numriques rendent les transports plus autonomes et plus srs, les
A maisons plus intelligentes, lagriculture plus respectueuse de lenvironnement... Elles sont lorigine
de nouveaux services, transforment en profondeur nos modes de vie et enrichissent notre quotidien.

Pour se dvelopper, notre Ces chercheurs inventent les


socit compte toujours technologies numriques de
plus sur ces technologies demain.
numriques qui restent
Issus des plus grandes
souvent invisibles. Elles sont Inria accueille universits internationales,
issues de travaux de recherche
longs et complexes associant
chaque anne : ils croisent avec crativit
600 stagiaires recherche fondamentale et
sciences informatiques et
recherche applique. Ils se
mathmatiques. de fin dtude, consacrent des problmes
Cr en 1967, Inria est le seul plus de 1200 concrets, collaborent avec
institut public de recherche doctorants dans les acteurs de la recherche
entirement ddi aux publique et prive en
sciences du numrique.
ses quipes de
France et ltranger, et
Linstitut runit aujourdhui recherche transfrent le fruit de leurs
3500 chercheurs, inventeurs du travaux vers les entreprises
monde numrique. innovantes.

Et plus dinformations sur :


www.inria.fr
Twitter twitter.com/inria
YouTube youtube.com/inriachannel
Quelques illustrations
de nos recherches

Clusters de calcul pour lexprimentation Chercheuse (quipe Flowers)


et Tlescope (quipes Cartes, Madynes)

Manipulation molculaire via cran


multi-touch (quipe Mint)

Extraction des donnes cryptographiques


dune carte bancaire
eXemPles dUTilisaTiOn

chapitre 3 - Exemples dutilisation

varIablES, aFFEctatIon, aFFIchaGE


Exemple 1
Calculez le prix TTC dun article partir de son prix HT, avec un taux de TVa 19,6 %.

algorithme
lire le prix hors taxes et le mettre dans HT
Calculer le prix avec taxes et le mettre dans TTC
acher TTC

console Scilab
w Calcul et achage simple :
-->HT=540;
-->TTC=HT*1.196
TTC =
645.84

w demande de valeur et achage mis en forme :


-->HT=input("Prix hors taxe : ");
Prix hors taxe : 3789
-->TTC=HT*1.196;
-->afficher("Le prix avec taxes .. noter
les exemples sont illustrs
est "+string(TTC)) soit par un achage dans
Le prix avec taxes est 4531.644 la console avec les
commandes (prcdes
w Fonction : de -->) et les retours,
-->function TTC=f(HT); soit par un achage dans
-->TTC=HT*1.196; lditeur (sans --> et
sans retours) et/ou par un
-->endfunction graphique.
-->f(540) dans tous les cas, pour
ans = reproduire les exemples,
645.84 ne tapez pas -->
-->f(3789) (celui-ci est ach par
ans = dfaut devant les lignes
de commande dans la
4531.644 console et ne doit pas
gurer dans lditeur).

| 45
eXemPles dUTilisaTiOn

Exemple 2
Convertissez un temps donn en secondes, en heures, minutes et secondes.

algorithme
lire le temps en secondes, le mettre dans t
mettre dans q le quotient de t par 60 (nombre de minutes)
mettre dans s le reste (nombre de secondes)
mettre dans h le quotient de q par 60 (nombre dheures)
mettre dans m le reste (minutes restantes)
acher heures, minutes, secondes

console Scilab
w Calcul et achages simple :
-->t=12680;
-->q=quotient(t,60); s=reste(t,60);
-->h=quotient(q,60); m=reste(q,60);
-->[h,m,s]
ans =
3. 31. 20.

w demande de valeur et achage mis en forme :


-->t=input("Heure en secondes : ");
Heure en secondes : 4586
-->q=quotient(t,60);s=reste(t,60);
-->h=quotient(q,60);m=reste(q,60);
-->afficher(string(h)+" heures "+string(m)+" minutes "+..
string(s)+" secondes ")
1 heures 16 minutes 26 secondes

w Fonction :
-->function y=f(t)
-->q=quotient(t,60);s=reste(t,60);
-->h=quotient(q,60);m=reste(q,60);
-->y=[h,m,s]
-->endfunction
-->f(12680)
ans =
3. 31. 20.

46 |
eXemPles dUTilisaTiOn

-->f(4586)
ans =
1. 16. 26.

Exemple 3
Calculez lhypotnuse dun triangle connaissant les deux cts de langle droit.

algorithme
mettre le premier ct dans a
mettre le deuxime ct dans b
Calculer a 2+ b 2 , le mettre dans c
acher c

console Scilab
w Calcul et achage simple :
-->a=3; b=4;
-->c=sqrt(a^2+b^2)
c =
5.

w demande de valeur et achage mis en forme :


-->a = input("Premier ct : ");
Premier ct : 1
-->b = input("Deuxime ct : ");
Deuxime ct : sqrt(3)
-->c = sqrt(a^2+b^2);
-->afficher("Hypotnuse : "+string(c))
Hypotnuse : 2

w Fonction :
-->function c=Hypotenuse(a,b)
-->c=sqrt(a^2+b^2)
-->endfunction noter
le nom dune
-->Hypotenuse(4,5)
fonction ne doit pas
ans = contenir daccent.
6.4031242374328

| 47
eXemPles dUTilisaTiOn

bouclES
Exemple 4
Calculez les carrs des entiers naturels de 1 100.
les 100 carrs constituent alors les coordonnes du vecteur c.
algorithme diteur Scilab

Pour n allant de 1 100 for n=1:100


c(n) prend la valeur n^2 c(n)= n^2;
Fin de pour end

-->c(74)
ans =
5476.

{
Exemple 5 u0 = 1
Calculez 30 termes de la suite dnie par :
un+1 = un + 2n + 3
achez les indices et les termes de la suite calculs, puis tracez le nuage de points.
algorithme diteur Scilab

mettre 4 dans u(1) u(1)=4;


(on doit commencer 1, pas 0) for n=1:30
Pour n allant de 1 30
u(n+1)=u(n)+2*n+3;
Calculer u(n+1) en fonction de n et u(n)
afficher([n,u(n)])
acher n en premire colonne, u(n) en deuxime
end
Fin de pour
eacer la gure, tracer le nuage avec des ronds rouges clf; plot(u,"or")

noter
la commande "or"
spcie que le trac sera
constitu de ronds ("o"),
de couleur rouge ("r").

48 |
eXemPles dUTilisaTiOn

Exemple6
Calculez le quotient q dun nombre positif n par 11, par la mthode des soustractions successives (voir
laectation dune valeur, page 15).
algorithme diteur Scilab

lire n N=input("N = ");


mettre 0 dans q q=0;
Tant que n suprieur ou gal 11 while N>=11
mettre n-11 dans n N=N-11;
mettre q+1 dans q q=q+1;
Fin de tant que end
acher q afficher("quotient = "+string(q))

Exemple 7
bob place 5 000 intrts composs un taux de 2,7 % par an en 2009.

w Calculez les sommes obtenues pendant les 20 prochaines annes,


w Tracez le nuage des sommes.

algorithme
mettre 5 000 dans s(1)qui sera la somme de lanne 2008 + 1
(Par la suite S(n) sera la somme de lanne 2008 + n)
Pour n allant de 1 20
mettre s(n) multiplie par 1,027 dans s(n+1)
acher lanne et la somme
Fin de pour

trac du nuage
w eacez lcran graphique,
w Tracez le nuage des points (n; s(n)) avec des croix rouges.

| 49
eXemPles dUTilisaTiOn

console Scilab Fentre graphique

-->S(1)=5000;
-->for n=1:20
-->S(n+1)=S(n)*1.027;
-->afficher([2008+n,S(n)]) ++
++
-->end + ++
+
++
++
+ ++
+
2009. 5000. ++
++

2010. 5135.

2011. 5273.645
etc...
-->clf
-->plot(S,"+r")

crivez un programme lui permettant de savoir en quelle anne il aura 7 000 .

algorithme console Scilab


mettre la somme 5 000 dans s -->S=5000;
mettre lanne 2009 dans n -->N=2009;
-->while S<7000
Tant que la somme reste infrieure 7 000, -->S=S*1.027;
-->N=N+1;
la somme est multiplie par 1,027 (elle remplace la
-->end
prcdente)
lanne augmente de 1 (elle remplace la prcdente) -->afficher("S dpasse 7000 ..
Fin de tant que en : "+string(N))

acher lanne S dpasse 7000 en : 2022

50 |
eXemPles dUTilisaTiOn

{
Exemple 8 a1 = 20

{
Calculez 40 termes des suites an et bn dnies par :
b1 = 60
2an + bn
an+1 =
et pour tout entier naturel n,
4
an + 2bn
bn+1 =
4
puis calculez les termes des suites (un) et (vn) dnies par : un = an + bn et vn = bn - an
algorithme diteur Scilab
initialiser a(1) et b(1) a(1)=20 ; b(1)=60;
Pour n allant de 1 40 for n=1:40
Calculer a(n+1) en fonction de a(n) et b(n) a(n+1)=(2*a(n)+b(n))/4;
Calculer b(n+1) en fonction de a(n) et b(n) b(n+1)=(a(n)+2*b(n))/4;
acher n en premire colonne, a(n) en afficher([n,a(n),b(n)])
deuxime, b(n) en troisime end
Fin de pour
Calculer les vecteurs u et v u=a+b; v=b-a;
acher u en premire colonne, v en deuxime afficher([u,v])

On pressent que u et v sont gomtriques, vriez alors que le quotient de deux termes conscutifs est
constant :

for n=1:40
U(n)=u(n+1)/u(n);V(n)=v(n+1)/v(n)
end
afficher([U,V])

On remarque, partir dun certain rang, que les valeurs de v, au lieu dtre constantes, varient, puis achent
Nan ( not a number en anglais). Cela est d au fait que v tend vers 0 et devient trop petit pour la division :
0.75 0.25
0.75 0.3
0.75 0.1666666666667
0.75 1.
0.75 0.
0.75 Nan
0.75 Nan

| 51
eXemPles dUTilisaTiOn

Exemple 9
en lan 2000, le lyce a compte 2 000 lves et le lyce b compte 8 000 lves. Une tude montre que,
chaque anne :
w 10 % des lves du lyce a quittent leur lyce pour aller au lyce b,
w 15 % des lves du lyce b quittent leur lyce pour aller au lyce a.
au bout de combien de temps le lyce a comptera-t-il plus dlves que le lyce b ?
algorithme diteur Scilab
mettre 2 000 dans a a=2000;
mettre 8 000 dans b b=8000;
mettre 2000 dans n n=2000;
Tant que a<b while a<b
c prend la valeur 0,9* a+ 0,15*b c=0.9*a+0.15*b;
b prend la valeur 0,1*a + 0,85*b b=0.1*a+0.85*b;
a prend la valeur c a=c;
n prend la valeur n+1 n=n+1;
Fin de Tant que end
acher (a dpasse b en n) afficher("A dpasse B en "+string(n))

Exemple 10
les suites (un) et (vn) sont dnies par :
1 1 1 1 1 1
un = 1+ + + ... + - ln n et vn = 1+ + + ... + - ln(n +1)
2 3 n 2 3 n
Calculez 200 termes de chaque suite et trouvez partir de quel rang leur dirence est infrieure 0,01 puis
calculez une valeur approche de la limite commune aux deux suites 0,01 prs.
algorithme diteur Scilab

Pour n allant de 1 200 for n=1:200


Calculer u(n) u(n)=sum([1:n]^(-1))-ln(n);
Calculer v(n) v(n)=sum([1:n]^(-1))-ln(n+1);
Fin de pour end
Trouver n tel que u(n)-v(n) < 0,01 F=find(u-v < 0.01);
afficher("Le rang est : "+string (F(1)))
acher le rang trouv et la limite commune afficher("Limite : "+string (u(F(1))))

52 |
eXemPles dUTilisaTiOn

noter
w [1:n] dnit le vecteur des entiers de 1 n.
w [1:n]^(-1) dnit le vecteur des inverses des entiers de 1 n.
w sum([1:n]^(-1)) donne alors la somme des inverses.

Cet exemple peut tre trait plus simplement en achant uniquement le rang partir duquel la dirence
est infrieure 0,01 et non pas les valeurs des termes des suites.
algorithme diteur Scilab

initialiser n 1 et d u(1)-v(1) n=1; d=ln(2);


Tant que d > 0,01 while d > 0.01
n augmente de 1 n=n+1;
d est la dirence au rang suivant d=ln((n+1)/n);
Fin de tant que end
acher la rponse afficher("Le rang est : "+string(n))

tEStS
Exemple11
Calculez la distance entre deux nombres.
algorithme diteur Scilab
soit y limage du couple (a , b) par la fonction d qui function y=d(a,b)
calcule la distance. if a>=b then
si a suprieur ou gal b, alors
y=a-b;
mettre a-b dans y
else
sinon
y=b-a;
mettre b-a dans y
end
Fin de si
Fin de fonction endfunction

distance entre 3 et -5 :
-->d(3,-5)
ans =
8.

| 53
eXemPles dUTilisaTiOn

Exemple 12
Virginie lance trois ds numrots de 1 6. si elle obtient une somme de 18, elle gagne 50 euros, entre 10 et
17, elle gagne 5 euros, sinon elle ne gagne rien.
algorithme diteur Scilab

mettre dans T trois nombres entiers tirs au hasard T=tirage_entier(3,1,6);


entre 1 et 6 S=sum(T)
mettre dans s la somme de ces trois entiers if S<10 then
si s<10 alors acher :
afficher("Virginie ne gagne rien")
Virginie ne gagne rien
elseif S<18 then
sinon, si s<18 alors acher :
afficher("Virginie gagne 5 euros")
Virginie gagne 5 euros
else
sinon (forcment s=18) acher :
Virginie gagne 50 euros afficher("Virginie gagne 50 euros")
Fin de si end

Exemple 13
tant donn les trois cts dun triangle, laborer un programme qui permet de dterminer si ce triangle est
isocle, quilatral ou quelconque (voir laectation dune valeur, page 15).
algorithme diteur Scilab

lire le premier ct, le mettre dans a a=input("Premier ct = ");


lire le deuxime ct, le mettre dans b b=input("Deuxime ct = ");
lire le troisime ct, le mettre dans c c=input("Troisime ct = ");
si a=b et b=c alors if a==b & b==c then
acher Triangle quilatral afficher("Triangle quilatral")
sinon si a=b ou a=c ou b=c alors elseif a==b|a==c|b==c then
acher Triangle isocle afficher ("Triangle isocle")
sinon else
acher Triangle quelconque afficher("Triangle quelconque")
Fin de si end

54 |
eXemPles dUTilisaTiOn

Exemple 14
dichotomie.
rechercher une valeur approche du nombre dor, solution positive de lquation x2 = x + 1
w dnissez la fonction f : f (x) = x2 - x - 1
w Tracez la courbe sur lintervalle [-5 ; 5]
On remarque que la solution recherche est entre 1 et 2.
w crivez un programme permettant par dichotomie dencadrer la solution recherche dans un
intervalle damplitude 10 - 4, en partant des valeurs 1 et 2.
algorithme diteur Scilab
function y=f(x);
dnition de la fonction f
y=x^2-x-1
intervalle des valeurs de x
endfunction
Trac de la courbe
x=linspace(-5,5,100);
mettre 1 dans a, mettre 2 dans b clf; plot(x,f)
Tant que b-a > 10- 4 a=1; b=2;
c prend la valeur (a+b)/2 while b-a>10^(-4)
si f(a) et f(c) sont de mme signe alors c=(a+b)/2;
a prend la valeur c if f(a)*f(c)>0 then
sinon a=c;
b prend la valeur c else
Fin de si b=c;
end
Fin de tant que
end
acher lencadrement trouv entre les dernires
afficher("La solution est entre ..
valeurs de a et b "+string(a)+" et "+string(b))

{
Exemple 15 un
si un est pair
la suite de syracuse est dnie par : u1 est donn, et pour n 1, un+1 = 2
3un + 1 sinon

Calculez les termes et vriez que, quel que soit u1, on nit toujours par arriver 4, 2, 1. Pour cela, on dnit
la fonction syracuse qui donnera, en fonction du premier terme, le rang auquel on arrive 1 et les termes
de la suite.

| 55
eXemPles dUTilisaTiOn

algorithme diteur Scilab


Fonction syracuse function [u,n]=syracuse(u1)
initialiser n et u(1) u(1)=u1; n=1;
Tant que u(n) 1 while u(n)<>1
si u(n) est pair, alors if pair(u(n))==%T then
u(n+1)=u(n)/2 u(n+1)=u(n)/2;
sinon else
u(n+1) = 3u(n) +1 u(n+1)=3*u(n)+1;
Fin de si end
n augmente de 1 n=n+1;
Fin de tant que end
acher n afficher("Nombre de termes = "+string(n))
acher u afficher(u)
Fin de fonction endfunction
exemple pour u(1)=10 000 syracuse(10000)

tracS dE courbES
Exemple 16
Tracez la courbe de la fonction cube entre - 2 et +2.

commentaires diteur Scilab

attention ne pas confondre f qui est la fonction et y function y=f(x)


qui est limage de x.
y=x^3
On remarque que y est une variable muette.
endfunction
On dnit les valeurs de x.
x=linspace(-2,2,100);
clf( clear gure ) eace la gure prcdente.
clf; plot(x,f)
Par dfaut, le trac se fait en bleu.

( (
Tracez en rouge la fonction f dnie par f (x) = x + ln x - 1 pour x entre 1 et 5.
Calculez les images de 2 et de 3. 2x + 3

56 |
eXemPles dUTilisaTiOn

console Scilab
-->function y=f(x); y=x+ln((x-1)/(2*x+3)); endfunction
-->x=linspace(1,5,100);
-->clf
-->plot(x,f,"r")
-->f(2)
ans =
0.0540898509447
-->f(sqrt(3))
ans =
- 0.4461185918724

Exemple 17
2
Tracez les courbes des fonctions fp dnies sur [0 ; 4] par : fp (x) = p x + 9 + 4 - x
pour p = 2, puis pour p variant de 1 2 par pas de 0,1 et reprez un minimum ventuel.

diteur Scilab
function y=f(x); y=p*sqrt(x^2+9)+4-x; endfunction
x=linspace(0,4,100);
p=2;
clf; plot(x,f)
for p=1:0.1:2
plot(x,f);
end
cliquer

noter
w si on tape cliquer dans la console, on clique alors avec la souris sur un point dans la fentre graphique et les coordonnes
du point sachent dans la console.
w si on tape quadrillage dans la console, on fait apparatre un quadrillage dans la fentre graphique.

| 57
eXemPles dUTilisaTiOn

{
Exemple 18 f (x) = 0 si x[[0 ; 2[
Tracez la reprsentation graphique de la fonction f dnie par : f (x) = x - 2 si x[[2 ; 4[
f (x) = 2x - 6 si x[[4 ; 7[
diteur Scilab
function y=f(x); y=0; endfunction
function y=g(x); y=x-2; endfunction
function y=h(x); y=2*x-6; endfunction
clf
x=linspace(0,2,100); plot(x,f,"r")
x=linspace(2,4,100); plot(x,g)
x=linspace(4,7,100); plot(x,h,"k")

le trac nest pas trs lisible, en particulier celui du segment sur laxe des abscisses. Cliquez sur dition >
Proprits des axes, une nouvelle fentre souvre (cette option nest pas encore disponible sous mac Os X).
Cliquez sur compound (3) > Polyline (3) et choisissez daugmenter lpaisseur 3 (line). Vous remarquerez
que les courbes sont numrotes dans lordre inverse de celui o elles ont t dnies.

avant

aprs
58 |
eXemPles dUTilisaTiOn

Exemple 19
Tracez la surface dnie par : z = 4 xy2 + x + 3y, pour x entre -10 et 10 et y entre -5 et 5.

diteur Scilab Fentre graphique

function Z=g(x,y)
Z=4*x*y^2+x+3*y
endfunction
x=linspace(-10,10,100);
y=linspace(-5,5,100);
z=feval(x,y,g)';
clf; surf(x,y,z)

noter
On peut faire tourner la gure en cliquant sur l'icne , ou dans la barre de menus sur outils > rotation 2d / 3d.

SIMulatIonS, StatIStIquES Et ProbabIlItS


Exemple 20
Calculez la frquence dapparition du 6 lors de la simulation de 10 000 lancers dun d 6 faces numrotes
de 1 6.

algorithme diteur Scilab

simuler 10 000 lancers de ds


S=tirage_entier(10000,1,6);
mettre les rsultats dans s
f=frequence(6,S)
mettre la frquence du 6 dans f

| 59
eXemPles dUTilisaTiOn

Exemple 21
simulez le lancer dune pice de monnaie sur 100 chantillons de taille 1 000. Tracez en bleu le nuage des
100 frquences dapparition du ct pile. simulez avec des chantillons de taille 10 000. Tracez en rouge le
nuage pour comparer les uctuations.

diteur Scilab Fentre graphique

for n=1:100
T=tirage_entier(1000,0,1);
p(n)=frequence(0,T)
end
clf; plot(p,"*")
for n=1:100
T=tirage_entier(10000,0,1);
p(n)=frequence(0,T)
end
plot(p,"r*")

Exemple 22
Une puce se dplace sur un axe gradu. chaque saut, elle se dplace dune unit, de manire alatoire et
quiprobable vers la droite ou vers la gauche. elle part de lorigine et eectue une marche de 30 sauts.

Proposez un algorithme donnant la position darrive de la puce. enrichissez lalgorithme prcdent pour
donner la liste des positions darrive de n marches alatoires. Tracez les frquences des direntes
positions.
algorithme diteur Scilab
mettre 0 dans x (qui sera labscisse de la puce) x=0;
Pour i allant de 1 30 for i=1:30
On choisit alatoirement le nombre -1 ou le
x=x+2*tirage_entier(1,0,1)-1;
nombre 1
end
x est augment du nombre prcdent
afficher("Position de la puce : "..
Fin de pour
acher x +string(x))

60 |
eXemPles dUTilisaTiOn

w algorithme
la fonction f associe n marches alatoires les n positions de la puce,
mises dans la liste P
Pour n allant de 1 n
mettre 0 dans P(n) : au dpart la puce est 0
Pour i allant de 1 30
On choisit alatoirement le nombre -1 ou le nombre 1
P(n) est augment du nombre prcdent
Fin de pour
Fin de pour
Fin de fonction

Calcul et trac des frquences pour N = 200


Pour i allant de -30 30
mettre la frquence de la position i dans fr(i+31) car on doit commencer 1
Fin de pour
eacer lcran
Tracer le diagramme en btons de fr

w diteur Scilab
function P=f(N)
for n=1:N
P(n)=0;
for i=1:30
P(n)=P(n)+2*tirage_entier(1,0,1)-1;
end
end
endfunction

| 61
eXemPles dUTilisaTiOn

Calcul et trac des frquences pour N = 200


diteur Scilab Fentre graphique

a=f(200);
for i=-30:30
fr(i+31)=frequence(i,a);
end
clf
bar([-30:30],fr)

Exemple 23
laborez un programme pour approcher la probabilit que dans une mme classe de 30 lves, 2 lves au
moins soient ns le mme jour, en faisant 10 000 fois la simulation.

dnissez une fonction associant au nombre dlves de la classe la frquence de cet vnement, pour 1 000
simulations. partir de combien dlves cette frquence est-elle suprieure 0,5 ?

algorithme 1 diteur Scilab


mettre 0 dans y (qui donnera la frquence de lvnement y=0;
2 lves au moins ont la mme date de naissance ) for n=1:10000
Pour n allant de 1 10 000
mettre dans dates 30 dates tires alatoirement dates=tirage_entier(30,1,365);
parmi les 365 jours de lanne if taille(unique(dates))<>30 then
si au moins 2 dates sont semblables, alors y=y+1/10000;
ajouter 1/10000 y
Fin de si end
Fin de pour end

noter
la fonction date existant dj dans scilab, nous choisissons de nommer ici la variable dates.

62 |
eXemPles dUTilisaTiOn

algorithme 2 diteur Scilab


appelons fr la fonction qui calcule la frquence de function y=fr(e)
lvnement 2 lves au moins ont la mme date de
naissance , en fonction du nombre e dlves. limage de y=0;
e par fr sappelle y. for n=1:1000
mettre 0 dans y
dates=tirage_entier(e,1,365);
Pour n allant de 1 1 000
mettre dans dates e dates tires alatoirement if taille(unique(dates))<>e then
parmi les 365 jours de lanne y=y+1/1000;
si au moins 2 dates sont semblables, alors
ajouter 1/1000 y end
Fin de si end
Fin de pour
endfunction
Fin de fonction
Tracer le nuage des points pour e entre 20 et 28, en e=linspace(20,28,9);
choisissant 9 points pour avoir les valeurs entires de e. clf; plot(e,fr,"m<")
Couleur magenta, style de point triangle.
Faire apparatre un quadrillage. quadrillage

Exemple 24
Jai dans ma poche deux pices de 10 centimes, une pice de 20 centimes, trois pices de 50 centimes, une
pice de 1 euro et deux pices de 2 euros. Quelle est la probabilit pour quen sortant deux pices au hasard
de ma poche, je puisse payer une baguette 1 euro ?

algorithme diteur Scilab


dnir lensemble P des pices de la poche P=ensemble("a(0.1)","b(0.1)",..
mettre 0 dans f "c(0.2)","d(0.5)","e(0.5)",..
Pour k allant de 1 1 000 "f(0.5)","g(1)","h(2)","i(2)");
Tirer deux pices au hasard, mettre dans t le couple f=0;
for k=1:1000
obtenu
t= tirage_ensemble(2,P);
mettre dans s la somme des valeurs des deux pices
s=sum(valeur(t));
si la somme est >= 1 alors if s >=1 then
f prend la valeur f+1/1000 f=f+1/1000;
Fin de si end
Fin de pour end
acher f afficher(f)
| 63
eXemPles dUTilisaTiOn

Exemple 25
en 2000, dans le village de Xicun, en Chine, 20 enfants sont ns, parmi lesquels 16 garons.
dans la rserve daamjiwnag, au Canada, entre 1999 et 2003, 132 enfants sont ns dont 46 garons.
On supposera que la proportion habituelle de garons la naissance est de 50 % (elle est en ralit denviron
51,2 %).

w Faire 100 simulations de chaque situation. Que peut-on en dduire ?

//Xicun

for k=1:100
T=tirage_entier(20,0,1);
GX(k)=taille(find(T==1)); ou bien GX(k)=frequence(1,T)*20;
end
clf; quadrillage; plot(GX,".")

//AAmjiwnaag

for k=1:100
T=tirage_entier(132,0,1);
GA(k)=taille(find(T==1)); ou bien GA(k)=frequence(1,T)*132;
end
clf; quadrillage; plot(GA,".")

les rsultats prouvent que moins de 5 % des rponses concordent avec la ralit. il y a donc autre chose que
le hasard dans les deux cas.

Exemple 26
deux points a et b sont pris au hasard sur un segment de longueur 1. Quelle est la probabilit de
lvnement : la longueur ab est suprieure 0,5 ?

w simuler une exprience alatoire.


w Faire ensuite une boucle pour simuler 1000 fois lexprience et construire le nuage des frquences
successives.

// On prend alatoirement 2 nombres entre 0 et 1. On cherche la


// frquence avec laquelle la distance entre eux est suprieure 0,5.

64 |
eXemPles dUTilisaTiOn

On nomme f (k) la frquence avec laquelle la distance est suprieure 1,5 lors de la kime simulation.
On initialise arbitrairement cette frquence 1.

N=1000; f(1)=1;
for k=1:N
T=tirage_reel(2,0,1);
d=abs(T(1)-T(2));
D=floor(d+0.5);
f(k+1)=(k*f(k)+D)/(k+1);
end
clf;quadrillage;plot(f,".")

d donne la distance entre les deux nombres. si 0 d < 0,5, alors d=0 et si 0,5 d 1, alors d=1.

Pour calculer f (k+1), on calcule de deux faons direntes le nombre de fois o la distance est suprieure
0,5 lors de la (k+1) ime simulation : (k+1) f (k+1) = k f (k) + d.

On trouve que la frquence se stabilise vers 0,25. On peut le prouver en admettant que la probabilit est
gale laire du domaine des points m (x,y) avec x et y dans [0 ; 1] et |x-y| > 0.5.

Exemple 27
Jean-Claude dusse sinscrit pour 6 jours de cours de ski. On lui annonce quil ne peut pas choisir son
moniteur, mais que celui-ci sera tir au hasard chaque matin parmi lquipe, qui comprend autant dhommes
que de femmes. inquiet, Jean-Claude se demande quelles sont ses chances davoir une femme comme
monitrice. il simule 100 000 semaines de cours de ski.

for k=1:100000
t=tirage_entier(6,0,1);
N(k)=taille(find(t==1));
end
for k=0:6
fr(k+1)=frequence(k,N);
afficher([k,fr(k+1)])
end
clf; bar(fr)

| 65
eXemPles dUTilisaTiOn

aprs rexion, Jean-Claude cherche seulement approcher la probabilit davoir une monitrice au moins
trois jours dans la semaine.

N=10000;
f=0;
for k=1:N
t=tirage_entier(6,0,1);
if taille(find(t==1))>=3 then
f=f+1/N;
end
end
afficher(f)

Exemple 28
Un groupe de citoyens demande la municipalit dune ville la modication dun carrefour en armant que
40 % des automobilistes tournent en utilisant une mauvaise le. Un ocier de police constate que sur 500
voitures prises au hasard, 190 prennent une mauvaise le.

w dterminer, en utilisant la loi binomiale sous lhypothse p = 0,4, lintervalle de uctuation au seuil de
95 %.

N=500;p=0.4;
RB=rep_binomiale(N,p);

m=find(RB>0.025); M=find(RB>=0.975);
afficher([(m(1)-1)/N,(M(1)-1)/N])

w daprs lchantillon, peut-on considrer, au seuil de 95 %, comme exacte larmation du groupe de


citoyens ?

On trouve [0,358 ; 0,444].


Comme f = 0,38. larmation est considre comme exacte.

66 |
eXemPles dUTilisaTiOn

Exemple 29
Programmer le calcul des coecients du binme de newton sous forme de tableaux (triangle de Pascal).

On va utiliser une matrice. notons la P (comme Pascal). llment P(i,j) est la valeur gurant la ligne i et la

( (
colonne j. la numrotation des lignes et des colonnes commence obligatoirement 1, on aura donc un
dcalage :

( 00 ( 0 0
( P(1,1) P(1,2) P(1,3)

(
P(2,1) P(2,2) P(2,3) =
P(3,1) P(3,2) P(3,3)
( 10 ( (11( 0
( 20 ( ( 21 ( ( 22 (
On utilise le fait que pour tout entier naturel n, on a
((((
n
0
=
n
n
=1

et que pour tous entiers naturels n et k tels que k n ,


(( ( ( ( (
n
k
+
n
k +1
=
n +1
k +1

Une matrice tant toujours rectangulaire (ici carre) les lments qui nauront pas t calculs seront
automatiquement remplacs par des zros. Faisons le calcul pour n lignes, ici par exemple n=10.

N=10;
P(1,1)=1;
for i=2:N
P(i,1)=1;
for j=2:i-1
P(i,j)=P(i-1,j-1)+P(i-1,j);
end
P(i,i)=1;
end
afficher(P)

| 67
eXemPles dUTilisaTiOn

Exemple 30
des ufs en chocolat sont vendus par botes de 3. Certains ufs contiennent une gurine. Une collection
est compose de 9 gurines. le problme rsoudre est de savoir combien il faudra acheter de botes
dufs en moyenne pour avoir la collection complte, et combien cela va coter.
dans chaque bote de 3 ufs, un seul contient une gurine. On suppose que les gurines sont
uniformment rparties dans les botes, et on achte les botes une par une.

w simuler avec scilab en tirant au hasard parmi les entiers de 1 9. On crera une liste T qui au dpart
contient 9 zros, et on remplacera le 0 par un 1 lorsque le numro correspondant est tir. On sarrte
lorsque tous les zros sont remplacs par des 1, ce qui se teste facilement en calculant la somme des
lments de la liste T.
w acher le nombre n de botes quil a fallu acheter pour obtenir tous les entiers.
w refaire 1000 fois cette simulation.

Simulation pour une collection


T=zeros(1,9);
n=0;
while sum(T)<>9
n=n+1;
A=tirage_entier(1,1,9);
T(A)=1;
end
afficher(n)

1000 simulations
for k=1:1000
T=zeros(1,9);
n(k)=0;
while sum(T)<>9
n(k)=n(k)+1;
A=tirage_entier(1,1,9);
T(A)=1;
end
end

w Faire une tude plus prcise de la srie statistique des valeurs de n obtenues : mdiane et quartiles,
moyenne et cart-type.
w Quel est le pourcentage de cas o il aura su dacheter 25 botes ?

68 |
eXemPles dUTilisaTiOn

w Une bote de 3 ufs en chocolat dont un seul contient une gurine vaut 2 euros. Combien doit-on
dpenser en moyenne pour avoir la collection ?
//Calcul des indicateurs
me=mediane(n); afficher("Mdiane : "+string(me))
Q=quartiles(n); afficher("Quartiles : "+string(Q(1))+" et "+string(Q(2)))
m=moyenne(n); afficher("Moyenne : "+string(m))
e=ecart_type(n); afficher("Ecart-type : "+string(e))

//Pourcentage de cas o 25 achats suffisent


t=taille(find(n<=25));
afficher("Dans "+string(t/1000)+" % des cas, 25 achats suffisent.")

//Moyenne des dpenses


afficher("On doit dpenser en moyenne "+string(2*m)+" euros pour..
avoir la collection entire.")

Exemple 31
crire un programme qui permet de trouver la valeurs de u pour que P (-u<Z<u)= p avec Z variable alatoire
suivant une loi normale centre rduite et p prenant direntes valeurs entre 0 et 1, dont les valeurs
classiques 0,95 et 0,99.

p=0.95;
u=1;
while 2*loi_normale(u,0,1)-1<p
u=u+0.01;
end
afficher("Pour p = "+string(p)+" on a u = "+string(u))

X est une variable alatoire suivant la loi normale de paramtres m et s.


crire un programme qui calcule les probabilits que X appartienne un intervalle de la forme [m-ks ; m+ks]
pour k = 1, 2 et 3 (voir laectation dune valeur, page 15).

m=input("Moyenne de X : ");
s=input("Ecart-type de X : ");
for k=1:3
p=1-2*loi_normale(m-k*s,m,s);
afficher([k,p])
end

| 69
eXemPles dUTilisaTiOn

Exemple 32
Comment dterminer les dirents intervalles de uctuation ?
dterminer les intervalles de uctuation avec la loi binomiale au seuil de 0.95 :
w si lon veut symtriser les probabilits que X soit lextrieur de lintervalle,
w si lon veut le plus petit intervalle centr autour de lesprance,
w si lon veut lintervalle damplitude minimale.

nous choisissons dtablir les intervalles de uctuation autour de la frquence. dans ce corrig, n=100 et
p=0,3, ces valeurs peuvent tre changes. On rajoute les intervalles de uctuation calculs avec les formules
du cours de seconde et de terminale.

n=100; p=0.3;

// Symtrisation des probabilits que X soit l'extrieur de l'intervalle


RB=rep_binomiale(n,p);
m=find(RB>0.025); M=find(RB>=0.975);
afficher("Intervalle symtrique")
afficher([(m(1)-1)/n,(M(1)-1)/n])

//Intervalle centr sur l'esprance


e=n*p;
k=0;
while rep_binomiale(n,p,e+k)-rep_binomiale(n,p,e-k)<0.95
k=k+1;
end
afficher("Intervalle centr sur l''esprance")
afficher([(e-k)/n,(e+k)/n])
// Le plus petit intervalle
for j=1:n
for i=1:j
d(i,j)=rep_binomiale(n,p,j)-rep_binomiale(n,p,i-1);
end
end
[i,j]=find(d>=0.95);
[diff,k]=min(j-i)
afficher("Plus petit intervalle")
afficher([i(42)/n,j(42)/n])

70 |
eXemPles dUTilisaTiOn

//L'intervalle vu en seconde
afficher("Intervalle vu en seconde")
afficher([p-1/sqrt(n),p+1/sqrt(n)])

//L'intervalle de fluctuation asymptotique au seuil de 0.95


u=1.96;
afficher("Intervalle de fluctuation asymptotique")
afficher([p-u*sqrt(p*(1-p)/n),p+u*sqrt(p*(1-p)/n)])

arIthMtIquE
Exemple 33
dterminez le quotient et le reste dans la division de a par b, a et b positifs.
algorithme diteur Scilab

entrer a et b function d=diveucl(a,b)


mettre 0 dans q q=0;
Tant que a >= b alors while a>=b
a=a-b;
a prend la valeur a b
q=q+1;
q prend la valeur q+1
end
Fin de tant que d=[q a]
acher q, a endfunction
exemple pour a=1224 et b=15 diveucl(1224,15)

On dnit la fonction diveucl qui, aux deux variables a et b (a>b>0), associe deux valeurs : le quotient et le
reste.

| 71
eXemPles dUTilisaTiOn

Exemple 34
dterminez si un nombre entier a est premier, avec a > 2.

On dnit la fonction prem qui, au nombre entier a, associe la phrase a est premier si a est premier et a
est compos sinon. On regarde part la divisibilit par 2 qui permet ensuite de ne tester que les diviseurs
impairs.
algorithme diteur Scilab
entrer a function prem(a)
si 2 divise a alors if reste(a,2) == 0 then
acher a est compos afficher("a est compos")
arrter le programme return
Fin de si end
mettre la partie entire de racine de a dans n n=floor(sqrt(a));
for d=3:2:n
Pour d allant de 3 n de 2 en 2
if reste(a,d)==0 then
si d divise a alors
afficher ("a est compos")
acher a est compos return
arrter le programme end
Fin de si end
Fin de pour afficher("a est premier")
sinon acher a est premier endfunction
exemple pour a=2^32+1 prem(2^32+1)

noter
w il existe dans scilab la fonction premier. premier(a) retourne %T si a est premier et %F sinon.
w la fonction return permet darrter le programme et de sortir de la fonction. On nexcute donc pas les instructions
suivantes, qui sont inutiles.

72 |
eXemPles dUTilisaTiOn

Exemple 35
dcomposez un entier positif a en facteurs premiers.
On dnit la fonction decomp qui, au nombre entier positif a, associe la liste de ses diviseurs premiers.
algorithme diteur Scilab
function y=decomp(a)
entrer a
y=[]
Commencer une liste vide
while reste(a,2)==0
Tant que 2 divise a
y=[y,2]
rajouter 2 la liste
a=a/2;
a prend la valeur a/2
end
Fin de tant que
n=floor(sqrt(a))
mettre la partie entire de racine de a dans n
for d=3:2:n
Pour d allant de 3 n de 2 en 2
while reste(a,d)==0
Tant que d divise a
y=[y,d];
rajouter d la liste
a=a/d;
a prend la valeur a/d
end
Fin de tant que
end noter
Fin de pour
if a<>1 then il existe dans scilab la
si a1 alors
y=[y,a] fonction factorise.
rajouter a la liste factorise(a)
end
Fin de si donne la liste des
endfunction
exemple pour a=4560 diviseurs premiers de a.
decomp(4560)

Exemple 36
dterminez le plus grand commun diviseur de deux entiers strictement positifs a et b. On dnit la fonction
PGCD qui, au couple (a,b), associe son plus grand commun diviseur.

algorithme diteur Scilab

entrer a et b function d=PGCD(a,b)


Tant que b non nul alors while b<>0
r prend la valeur du reste de la division de a r=reste(a,b);
par b a=b;
a prend la valeur b b=r;
noter
b prend la valeur r end la fonction pgcd existant
Fin de tant que d=a dj dans scilab, nous
acher a (dernier reste non nul) endfunction choisissons de nommer ici
exemple pour a=595 et b =10200 PGCD(595,10200) la fonction PGCD.

| 73
eXemPles dUTilisaTiOn

Exemple 37
dterminez les coecients de bzout.
On dnit la fonction BEZOUT qui, au couple (a,b) avec a et b strictement positifs, associe le couple (u,v) des
entiers vriant au + bv = pgcd (a,b) obtenus avec lalgorithme deuclide.

algorithme diteur Scilab


noter
function [u,v]=BEZOUT(a,b) l aussi la
u=1; v=0; U=0; V=1; fonction bezout
while b<>0; existant dj dans
q=floor(a/b); scilab, nous
Nous ne le dtaillerons pas. Il est complexe et choisissons de
ncessite lintroduction de variables intermdiaires.
z=u; u=U; U=z-q*U;
nommer ici la
z=v; v=V; V=z-q*V;
fonction BEZOUT.
z=a; a=b; b=z-q*b;
exemple pour a=595 et b =10200 end
afficher([u,v])
afficher("Le pgcd vaut "+string(a))
endfunction
BEZOUT(595,10200)

Exemple 38
nombres de mersenne.
ils sont de la forme n = 2p - 1. sachant que p est premier, dterminez les nombres de mersenne qui sont
premiers et ceux qui ne le sont pas, pour p < 50.

algorithme diteur Scilab


Pour p allant de 2 40 for p=2:40
si p est premier alors if premier(p)==%T then
n prend la valeur correspondante n=2^p-1 ;
acher (p, n, les facteurs de n) afficher([p,n,factorise(n)])
Fin de si end
Fin de pour end

74 |
eXemPles dUTilisaTiOn

Exemple 39
recherchez les nombres parfaits et les nombres amicaux.
Un nombre parfait est un entier naturel gal la somme de tous ses diviseurs entiers positifs sauf lui-mme.
deux nombres amicaux sont chacun gal la somme des diviseurs entiers positifs de lautre (sauf lui-mme).

algorithme diteur Scilab


Nombres parfaits //Nombres parfaits
Pour n allant de 1 10 000 for n=1:10000
si la somme des diviseurs de n vaut 2n alors if sum(diviseurs(n))==2*n then
acher (n) afficher(n)
Fin de si end
Fin de pour end

algorithme diteur Scilab


Nombres amicaux //Nombres amicaux
Pour n allant de 2 10 000 for n=2:10000
s prend la valeur (somme des diviseurs de n)-n s=sum(diviseurs(n))-n;
t prend la valeur (somme des diviseurs de s)-s t=sum(diviseurs(s))-s;
si t = n alors if t==n then
acher ([n s]) afficher([n,s])
Fin de si end
Fin de pour end

Exemple 40
Pour tout entier naturel non nul n, on considre les deux nombres entiers N = 3n2 - n + 1 et D = 2n - 1.
le but de lexercice consiste dterminer, suivant les valeurs de n, le reste de la division de N par D.
dterminez les valeurs de ce reste en fonction de n, pour n entre 1 et 50. reprsentez graphiquement ce
reste en fonction de n.
algorithme diteur Scilab
Pour n allant de 1 50 for n=1:50
Calculer n(n) N(n)=3*n^2-n+1;
Calculer d(n) D(n)=2*n-1;
Calculer le reste r(n) de la division de n par d r(n)=reste(N(n),D(n));
acher n et r(n) en colonnes afficher([n,r(n)])
Fin de pour end
eacer la gure clf
Tracer le nuage des points (n ; r(n)) avec des croix plot(r,"+")
| 75
eXemPles dUTilisaTiOn

codaGE Et dcodaGE
Exemple 41
Coder le message j aime les mathematiques en utilisant le codage progressif : la premire lettre est
dcale de 1, la deuxime de 2, ... la kime de k.

algorithme diteur Scilab


mettre le chier texte dans m m="j aime les mathematiques"
acher le titre afficher("Message coder")
acher le message coder afficher(m)
m=strsubst(m," ","");
enlever les blancs dans m
m=ascii(m);
remplacer chaque lettre par son code asCii n=taille(m);
mettre dans n le nombre de lettres du message for k=1:n
boucle pour chaque lettre : M(k)=m(k)+k
On ajoute k la kime lettre. if M(k)>122 then
si le rsultat dpasse 122, on enlve 26. M(k)=M(k)-26;
pour retrouver un code asCii entre 97 et 122 end
end

revenir au message texte M=ascii(M);


acher le titre afficher("Message cod")
acher le message cod afficher(M)

76 |
eXemPles dUTilisaTiOn

Exemple 42
le texte suivant : CGQXXQnQXXQVaGdZQQ a t cod avec la mthode de Csar. en testant
successivement toutes les cls possibles, dcodez-le.

algorithme diteur Scilab


mettre le chier texte dans m m="CGQXXQNQXXQVAGDZQQ"

remplacer chaque lettre par son code asCii m=ascii(m);


mettre dans n le nombre de lettres du message n=taille(m);

boucle 1 pour des cls k allant de 1 25 : for k=1:25


On enlve k toutes les lettres Mk=m-k;
for i=1:n
boucle 2 sur toutes les lettres :
if Mk(i)<65 then
si le rsultat est infrieur 65, on rajoute 26.
Mk(i)=Mk(i)+26;
pour retrouver un code asCii entre 65 et 90 end
Fin de test end
Fin de boucle 2 Mk=ascii(Mk);
revenir au message texte afficher("Message dcod avec..
acher le titre la cl "+string(k))
acher le message cod afficher(Mk)
Fin de boucle 1 end

| 77
eXemPles dUTilisaTiOn

Exemple 43
Pour dcoder un message secret, il peut tre utile de compter la frquence dapparition des lettres dans un
texte. Pour cela, on a mis le texte crit en majuscules, sans accent, dans un chier texte enregistr sous le
nom de Texte.txt . le programme va compter et acher la frquence de chaque lettre prsente dans le
texte.

algorithme diteur Scilab


mettre le chier texte dans m
m=mgetl("chemin menant au fichier\Texte.txt ")
enlever les blancs
m=strsubst(m," ","");
remplacer chaque lettre par son
m=ascii(m);
code asCii format(5)
imposer 5 caractres achs for i=1:26
boucle sur toutes les lettres pour f(i)=frequence(i+64,m);
compter et acher leur frquence if f(i)<>0 then
dapparition. afficher("La frquence de ..
si cette frquence nest pas nulle, "+string(ascii(i+64))+" est "+string(f(i)))
alors on lache. end
Fin de test end
clf; quadrillage; bar(f)
Fin de boucle
axes=gca( );
Tracer le diagramme en barre
axes.x_ticks.labels=strsplit(ascii(65:90))
acher les lettres en abscisses

noter
w gca() signie get current axes en anglais et permet daccder aux proprits des axes de la gure.
w strsplit signie string split en anglais (diviser la chane de caractres) et transforme la suite abC en caractres
spars a , b , C ,qui constitueront les tiquettes de laxe des abscisses.

78 |
eXemPles dUTilisaTiOn

dIvErS
Exemple 44
simulez le jeu du livre et de la tortue.
On lance un d quilibr. si on obtient le 6, le livre a gagn, et une nouvelle partie commence. sinon, la
tortue avance et on relance le d. la tortue doit avancer 5 fois pour gagner (5 tirages conscutifs sans le 6).
On cherche simuler un grand nombre de parties pour approcher la probabilit de gagner de chacun.

algorithme diteur Scilab


l reprsentera le nombre de parties gagnes par le livre. L=0
initialiser l 0. T=0
T reprsentera le nombre de parties gagnes par la for P=1:5000
tortue. initialiser T 0. n=0;
Pour P allant de 1 5 000 while %T
n compte le nombre de lancers de ds, initialiser n 0. d=tirage_entier(1,1,6);
dbut de boucle sans n if d==6 then
On lance le d, la valeur est mise dans d L=L+1;
si d=6 alors
break;
le livre a gagn, on rajoute 1 l, on sort de la
else
boucle
n=n+1;
sinon on rajoute 1 n
end
Fin de si
si n atteint 5 alors if n==5 then
la tortue a gagn, on rajoute 1 T, on sort de la T=T+1;
boucle break;
Fin de si end
Fin de la boucle, on recommence une partie end
Fin de pour end
acher les frquences de parties gagnes par chacun afficher([L/(L+T),T/(L+T)])

noter
w while%T ralise une boucle sans n.
w la commande break permet de sortir de la boucle while. On la met ici ds que la partie est nie.

| 79
eXemPles dUTilisaTiOn

{
Exemple 45 y'(x) = y(x)
rsolvez lquation direntielle par la mthode deuler et
y(0) = 1
comparez le rsultat obtenu la solution exacte y (x) = ex. la suite obtenue par la

mthode deuler est donne par :


{ y1 = 1
yi = yi-1+ dx yi-1
o dx est le pas en x.

algorithme diteur Scilab


On dnit la fonction f : fonction exponentielle function y=f(x)
la fonction euler donnera lapproximation de la fonction y=exp(x)
exponentielle par la mthode deuler sur lintervalle [0 ; b], endfunction
avec un pas appel dx. function y=euler(b,dx)
mettre la partie entire de b/dx dans n n=floor(b/dx);
x prend les valeurs 0, dx, 2dx,, (n-1)dx x=0:dx:(n-1)*dx;
mettre 1 dans y(1)
y(1)=1;
Pour i allant de 2 n
for i=2:n
Calculer y(i) en fonction de y(i-1)
Fin de pour y(i)=y(i-1)+dx*y(i-1);
eacer lcran, tracer le nuage des y (en bleu reli par dfaut) end
et la courbe de f (en rouge) clf; plot(x,y,x,f,"r")
Fin de fonction endfunction
application entre 0 et 5 pour un pas de 0,1 euler(5,0.1)

Exemple 46
approximation dune aire.
tant donn une fonction f positive et monotone sur [a; b], on veut encadrer lintgrale de f entre a et b par

{
les sommes des aires des rectangles.
b - a n-1 b-a
sn =
n k =0
f (a + k
n
)
application la fonction racine carre entre 0 et 10 :
b-a n b-a
Sn =
n k =1
f (a + k
n
)

80 |
eXemPles dUTilisaTiOn

algorithme diteur Scilab


la fonction sommes retournera les deux sommes. function [s,S]=sommes(a,b,n)
initialiser s et s 0 S=0; s=0;
Pour k allant de 0 n-1 for k=0:n-1
s augmente de limage de la borne de gauche s=s+f(a+k*(b-a)/n);
S=S+f(a+(k+1)*(b-a)/n);
s augmente de limage de la borne de droite
end
Fin de pour
s=s*(b-a)/n; S=S*(b-a)/n;
s et s sont multiplis par (b-a)/n endfunction
Fin de fonction function y=f(x)
dnition de la fonction racine y=sqrt(x)
achage des deux sommes sur lintervalle endfunction
[0 ; 10] avec 10 rectangles [s,S]=sommes(0,1,10)

Exemple 47
dans une ville, des trains roulant dans les deux sens relient la gare (G), la plage (P), le muse (m) et le
belvdre (b) selon le graphe suivant :

B P

w donnez la matrice a associe au graphe GPmb.


w Calculez a6 et dduisez combien de chanes de longueur 6 commencent et se terminent la gare.

-->A=[0 1 0 1;1 0 1 0;0 1 0 1;1 0 1 0]


A =
0. 1. 0. 1.
1. 0. 1. 0.
0. 1. 0. 1.
1. 0. 1. 0.

| 81
eXemPles dUTilisaTiOn

-->B=A^6
B =
32. 0. 32. 0.
0. 32. 0. 32.
32. 0. 32. 0.
0. 32. 0. 32.
-->afficher ("Il y a "+string(B(1,1))+" chanes de ..
longueur 6 commenant et se terminant la gare.")
Il y a 32 chanes de longueur 6 commenant et se terminant la gare.

Exemple 48
n personnes numrotes de 1 n jouent.
le meneur de jeu donne un ticket la premire, puis saute 1, donne un ticket la troisime, puis saute 2,
donne un ticket la sixime, etc, et recommence en tournant et en sautant une personne de plus chaque
fois. si la personne a dj un ticket, on ne lui en redonne pas.

w Pour quelles valeurs de n tous les joueurs auront-ils un ticket ?


w si le meneur de jeu fait payer chacun 1 euro et donne 2 euros toutes les personnes ayant un ticket,
pour quelles valeurs de n est-il gagnant ?
les rponses ces questions ne sont pas videntes du tout. On peut prouver quau bout de 2n distributions
de tickets, on boucle sur les mmes personnes. On dnira une fonction qui au nombre n de joueurs fait
correspondre le vecteur u n coordonnes gales 1 si le joueur correspondant a un ticket, 0 sinon.

w diteur Scilab
function u=f(n)
i=1;
k=1;
u=zeros(1,n);
u(1)=1;
for k=1:2*n
j=reste(i+k,n)+1;
u(j)=1;
if sum(u)==n then
break
end
i=j;
end
endfunction

82 |
eXemPles dUTilisaTiOn

w cherchons dans quel cas tous les joueurs auront un ticket :


for a=1:500
if sum(f(a))==a then
afficher(a)
end
end

w le meneur de jeu prend 1 euro par personne et donne 2 euros ceux qui ont un ticket.
dnissions la fonction gain de ce quil gagne :
function y=gain(x);
y=x-2*sum(f(x));
endfunction
x=linspace(1,50,50);
clf
quadrillage
plot(x,gain,"*")

| 83
FOnCTiOns sCilab UTiles

chapitre 4 - Fonctions Scilab utiles


les fonctions en noir sont spciques au module lyce. noter
il ny a jamais daccent
dans le nom dune
Pour lanalySE fonction scilab.
w sqrt(x) retourne la racine carre de x pour x rel positif ou nul, et la racine
complexe de partie relle positive sinon.
w ln(x) retourne le logarithme nprien de x avec x nombre rel ou complexe.
w exp(x) retourne lexponentielle de x avec x nombre rel ou complexe.
w abs(x) retourne la valeur absolue du rel x (ou le module si x est complexe).
w int(x) retourne la troncature du rel x (entier avant la virgule).
w floor(x) retourne la partie entire du rel x (entier n tel que n x < n + 1).
w ceil(x) pour x rel retourne lentier n tel que n - 1 < x n.

Pour larIthMtIquE
w pair(n) retourne %T si n est pair et %F sinon avec n entier positif ou nul (%T signie True cest--dire
vrai et %F signie False cest--dire faux).
w impair(n) retourne %T si n est impair et %F sinon avec n entier positif ou nul.
w quotient(m,n) retourne le quotient de m par n avec m entier et n entier non nul.
w reste(m,n) retourne le reste de la division de m par n avec m entier et n entier non nul.
w pgcd(m,n) retourne le plus grand commun diviseur de m et n avec m et n entiers.
w ppcm(m,n) retourne le plus petit commun multiple de m et n avec m et n entiers.
w premier(n) retourne %T si n est premier et %F sinon avec n entier positif ou nul.
w liste_premiers(n) retourne la suite des nombres premiers infrieurs n avec n entier positif ou nul.
w diviseurs(n) retourne la suite des diviseurs du nombre n avec n entier positif.
w factorise(n) retourne la suite des facteurs premiers de n avec n entier positif ou nul.
w change_base(m,b1,b2) transforme le nombre m crit en base b1 sous forme de chane de caractres
en un nombre crit en base b2 lui aussi sous forme de chane de caractres.

Pour lES ProbabIlItS Et StatIStIquES


w sum(n) retourne la somme des valeurs du vecteur n (sert calculer un eectif total).
w cumsum(n) retourne le vecteur des valeurs cumules croissantes du vecteur n (sert calculer les eectifs
cumuls croissants).
w taille(v) retourne le nombre de coordonnes du vecteur v.
w trier(v) ou trier(v,">") retourne tri le vecteur de nombres ou de chanes de caractres v dans
lordre croissant.

| 85
FOnCTiOns sCilab UTiles

w trier(v,"<") retourne tri le vecteur de nombres ou de chanes de caractres v dans lordre


dcroissant.
w moyenne(v) retourne la moyenne du vecteur de nombres v.
w moyenne_ponderee(v,n) retourne la moyenne du vecteur de nombres v pondre par le vecteur de
nombres n avec v et n de mme dimension et n un vecteur de nombres positifs ou nuls mais non tous nuls.
w ecart_type(v) retourne lcart type du vecteur de nombres v.
w ecart_type_pondere(v,n) retourne lcart type du vecteur de nombres v pondr par le vecteur de
nombres n avec v et n de mme dimension et n un vecteur de nombres positifs ou nuls mais non tous nuls.
w variance(v) retourne la variance du vecteur de nombres v.
w variance_ponderee(v,n) retourne la variance du vecteur de nombres v pondre par le vecteur de
nombres n avec v et n de mme dimension et n un vecteur de nombres positifs ou nuls mais non tous nuls.
w mediane(v) retourne la mdiane du vecteur de nombres v.
w mediane_ponderee(v,n) retourne la mdiane du vecteur de nombres v pondre par le vecteur de
nombres n avec v et n de mme dimension et n un vecteur de nombres positifs ou nuls mais non tous nuls.
w quartiles(v) retourne les deux quartiles du vecteur de nombres v.
w quartiles_ponderes(v,n) retourne les deux quartiles du vecteur de nombres v pondrs par le
vecteur de nombres n avec v et n de mme dimension et n un vecteur de nombres positifs ou nuls mais non
tous nuls.
w deciles(v) retourne les dciles d1 et d9 du vecteur de nombres v.
w deciles_ponderes(v,n) retourne les dciles d1 et d9 du vecteur de nombres v pondrs par le
vecteur de nombres n avec v et n de mme dimension et n un vecteur de nombres positifs ou nuls mais non
tous nuls.
w bar(v,n,couleur) trace le diagramme en barre avec v en abscisse, n en ordonne, v et n tant des
vecteurs lignes de mme dimension. Par dfaut, bar(n) trace le diagramme en barres de n en bleu avec
1,2,3 en abscisses.
w bar(v,[n1,n2]) trace un diagramme en barre double avec v en abscisse, n1 en ordonne en bleu et
n2 en ordonne en vert, avec v, n1 et n2 vecteurs lignes de mme dimension.
w regression_y_en_x(x,y) retourneles coecients a et b de la droite de rgression de y en x par la
mthode des moindres carrs, dquation y = ax + b, avec x et y des vecteurs de nombres de mme
dimension et x un vecteur de nombres non tous gaux.
w histogramme(a,n,couleur) permet de tracer lhistogramme dune srie statistique o les valeurs de
la variable sont regroupes dans des intervalles. a est le vecteur donnant les bornes des intervalles dans
lordre croissant. n est le vecteur des eectifs ou des frquences correspondants. couleur (argument
optionnel) dnit la couleur comme dans la fonction plot.

86 |
FOnCTiOns sCilab UTiles

Pour SIMulEr
w tirage_entier(p,m,n) retourne un vecteur de p tirages entiers pris entre m et n avec p entier positif, m
et n entiers et mn.
w tirage_reel(p,a,b) retourne un vecteur de p tirages rels pris entre a et b avec p entier positif, a et b
rels et ab.
w rand(n,p) avec n avec p entiers positifs, retourne une matrice np de nombres pris alatoirement entre
0 et 1.
w rand() retourne un nombre rel pris alatoirement entre 0 et 1.
w floor(x) retourne la partie entire du nombre rel x. en particulier, si p est un rel compris entre 0 et 1,
floor(rand()+p) vaudra 1 avec une probabilit p et 0 avec une probabilit 1-p.
w frequence(n,s) retourne la frquence de n dans la suite de nombres s avec n entier.
w frequence_tirage_entier(p,m,n) retourne la suite des frquences de p tirages entiers pris entre m
et n avec p entiers positif, m et n entiers et mn.
w ensemble("r(1)","r(2)","r(3)","v(1)","v(2)") dnit un ensemble, ici lensemble de trois
boules rouges numrotes 1, 2, 3 (leurs valeurs) et deux vertes numrotes 1, 2 (leurs valeurs).
w tirage_ensemble(n,ens) retourne un ensemble de n lments pris parmi ceux de lensemble ens.
w valeur(ens) retourne le vecteur des valeurs des lments de lensemble ens.
w ajouter("a",ens) ajoute un lment a lensemble ens.
w appartient("a",ens) dtermine lappartenance dun lment a lensemble ens.
w complementaire(A,B) retourne le complmentaire de lensemble A dans lensemble B.
w enlever("a",ens) enlve llment a de lensemble ens.
w inclus(A,B) dtermine si un ensemble A est inclus dans un ensemble B.
w intersection(A,B) retourne lintersection de deux ensembles A et B.
w jeu_32,jeu_52,jeu_54,jeu_tarot retournent les ensembles des cartes respectivement de jeux
de 32, 52, 54 cartes ou dun jeu de tarot.
w union(A,B) retourne lunion des deux ensembles A et B.

Pour dFInIr dES loIS


w factorielle(n) retourne la factorielle de n avec n entier positif ou nul.
w arrangement(n,p) retourne le nombre darrangements de p lments pris parmi n avec n et p entiers
positifs ou nuls et pn.
w combinaison(n,p) retourne le nombre de combinaisons de p lments pris parmi n avec n et p entiers
positifs ou nuls et pn.
w loi_binomiale(n,p) o n est un entier positif et p un rel entre 0 et 1 retourne le vecteur ligne des
probabilits p(X=k), pour k allant de 0 n, lorsque X suit la loi binomiale de paramtres n et p. On peut
aussi utiliser binomial(p,n).

| 87
FOnCTiOns sCilab UTiles

w loi_binomiale(n,p,k) avec k entier entre 0 et n retourne la probabilit p(X=k) lorsque X suit la loi
binomiale de paramtres n et p.
w rep_binomiale(n,p)retourne le vecteur ligne des probabilits cumules p(Xk) pour k allant de 0
n, lorsque X suit la loi binomiale de paramtres n et p.
w rep_binomiale(n,p,t) retourne la probabilit p(Xt) lorsque X suit la loi binomiale de paramtres n
et p.
w loi_geometrique(n,p) o n est un entier positif et p un rel entre 0 et 1 retourne le vecteur ligne des
probabilits p(X=k), pour k allant de 0 n, lorsque X suit la loi gomtrique tronque de paramtres n et p.
w loi_geometrique(n,p,k) avec k entier entre 0 et n retourne la probabilit p(X=k) lorsque X suit la loi
gomtriquex tronque de paramtres n et p.
w loi_exp(lambda,t) retourne la probabilit p(Xt) lorsque X suit la loi exponentielle de paramtre
avec positif.
w loi_normale(t,xbar,sigma) retourne la probabilit p(Xt) lorsque X suit la loi normale de
paramtres et avec positif.

Pour aFFIchEr Et tracEr


w clf signie clear gure et eace la gure prsente sur la fentre graphique.
w plot permet de tracer des courbes ou des nuages de points en dimension 2.
w linspace(a,b,n), avec a et b rels et n entier, dnit un vecteur de n valeurs rgulirement espaces
entre a et b.
w scf permet douvrir ou de slectionner dautres fentres graphiques.
w surf permet de tracer des surfaces en dimension 3.
w bar(X,Y) o X et Y sont des vecteurs, dessine le diagramme en btons de la srie des valeurs de X ayant
pour eectifs les valeurs de Y.
w quadrillage fait apparatre un quadrillage dans la fentre graphique.
w plot(X,Y,"*") trace le nuage des points de coordonnes (X(i),Y(i)) sous forme dtoiles. On peut
prciser la couleur.
w plot(Y,"+") trace le nuage des points de coordonnes (i,Y(i)) sous forme de croix.
w afficher("Phrase") ache ce qui est crit entre les guillemets.
w afficher(A) o a est une matrice de nombres ache le tableau des valeurs de a.
w afficher("Phrase"+string(x)) ache la phrase et la valeur du nombre x.
w orthonorme bascule en une reprsentation orthonorme ou non orthonorme du trac de la fentre
graphique.
w cliquer retourne les coordonnes du point cliqu sur la fentre graphique.
w cercle permet de tracer des cercles.

88 |
FOnCTiOns sCilab UTiles

utIlItaIrES
w unique(v) retourne le vecteur v avec une seule occurrence de ses lments dupliqus.
w sum(v) retourne la somme de tous les lments du vecteur ou de la matrice v.
w prod(v) retourne le produit de tous les lments du vecteur ou de la matrice v.
w find(testsurv) retourne les indices des lments du vecteur v vriant le test.
w afficher(x,y,) ache les valeurs de ses arguments dans la console.
w string(x) transforme le nombre x en chane de caractres.
w format(n) o n est un entier suprieur ou gal 2 xe lachage n caractres, y compris le signe et la
virgule.
w zeros(n,p) dnit une matrice n p ne contenant que des 0.
w feval(x,y,f) o x et y sont des vecteurs de tailles respectives m et n, dnit la matrice m n dont
llment (i , j) est f (x(i) , y(j)).
w helpfonction ouvre le navigateur daide la page de la fonction.
w tic dclenche un chronomtre.
w toc arrte le chronomtre.

| 89
www.scilab.org

Vous aimerez peut-être aussi