Você está na página 1de 15

Notes de cours

Initiation ` a Scilab
El Miloud ZAOUI
c

Ecole Nationale de lIndustrie Min

erale - 2013
Table des mati`eres
0.1 Scilab dans lenvironnement WINDOWS . . . . . . . . . . . . . . . . . . . . . . 3
0.2 Denition et manipulation des objets Scilab . . . . . . . . . . . . . . . . . . . . 3
0.2.1 Nombres reels et complexes . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.2.2 Chanes de caract`eres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.2.3 Booleens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
0.3 Objets vectoriels et matriciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
0.3.1 Construction de vecteurs et de matrices . . . . . . . . . . . . . . . . . . 6
0.3.2 Extraction et insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
0.3.3 Operations vectorielles et matricielles . . . . . . . . . . . . . . . . . . . 10
0.4 Programmation de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
0.4.1 Script Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
0.5 Boucles et instructions de controle . . . . . . . . . . . . . . . . . . . . . . . . . 12
0.5.1 Instruction for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
0.5.2 Boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
0.5.3 Instruction de controle if . . . . . . . . . . . . . . . . . . . . . . . . . . 13
0.5.4 Instruction de controle select-case . . . . . . . . . . . . . . . . . . . . . 14
0.6 Fonctions Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
0.6.1 Fonction en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
0.6.2 Fonction dans un chier . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2
Initiation `a Scilab
0.1 Scilab dans lenvironnement WINDOWS
En cliquant sur licone Scilab, une fenetre XScilab va apparatre.
`
A linterieur de cette fenetre, on peut rentrer une suite dinstructions apr`es linvite > qui
attend vos commandes.
En passant une commande, Scilab linterpr`ete, levalue, donne le resultat puis redonne linvite
( >).
Pour explorer Scilab, on peut commencer par examiner les exemples, ce qui se fait, sousWin-
dows, en cliquant sur le bouton ? puis Demonstrations Scilab.
Pour la documentation en ligne on utilise les commandes help o` u apropos :
* On utilise la commande help quand on connait le nom exact de la fonction :
> help det
* On utilise apropos dans le cas o` u on ne dispose que dun mot cle :
> apropos(min).
0.2 Denition et manipulation des objets Scilab
0.2.1 Nombres reels et complexes
Les variables Scilab nont pas besoin de declaration de type ni dallocation de memoire
avant leur utilisation ; Les variables sont cree au vol par aectation, par exemple, si on veut
declarer la variable x et lui aecter la valeur 100 on tape :
> x = 100.
puis on tape entrer pour avoir :
x =
100.
On peut faire de meme pour la variable a
> a = 10. ;
Pour verier si une variable est dej`a declaree, on utilise la commande exists. Si la variable
concernee existe, exists renvoie 1 sinon elle renvoie 0.
> exists(x)
ans =
1.
3
Pour verier le type dune variable, on utilise type. Cette fonction retourne le type de la va-
riable :
> type(x)
La commande clear supprime de lenvironnement les variables dont les noms sont species :
>clear x ;
supprime la variable x de lespace de travail.
Sans argument clear supprime toutes les variables sauf celles qui ont ete protegees par pre-
def :
>clear ;
Pour declarer un nombre complexe, on utilise la variable reservee %i :
> z=1+5*%i
ans =
z =
1. + 5.i
real et imag renvoient respectivement les parties reelle et imaginaire :
>real(z)
>imag(z)
Scilab fournit les operations mathematiques habituelles : addition, soustraction, multipli-
cation, division, . . . et les fonctions elementaires comme sinus, cosinus, exponentielle, ....
Remarque 1 *) Scilab dispose des variables reservees, taper who pour plus de details.
*)
`
A defaut dune assignation `a gauche, le resultat est stocke dans la variable temporaire
de nom ans qui est conservee tant quelle nest pas redenie.
> 2012 ;
> ans
ans =
2012.
*) Dans Scilab, les valeurs numeriques sont codees en double precision (64 bits). Par
consequent, les nombres sont representes avec une precision relative de lordre de 10
16
:
>%eps %eps =
2.220D-16
>1 + %eps
ans = 1.
*) Pour eviter lachage `a lecran, on utilise le ( ;) `a la n de linstruction.
0.2.2 Chanes de caract`eres
On utilise des apostrophes ( )ou des guillemets ( )pour denir une chane de caract`eres :
> je suis une chaine de caracteres
ans =
4
je suis une chaine de caracteres
Doubler les apostrophes ou les guillemets, si la chane les contient dej`a :
> Je m appelle Scilab
ans =
Je mappelle Scilab
Les operations de base sur les chanes de caract`eres sont :
la concatenation + :
> chaine = Scilab est + bon logiciel
chaine =
Scilab est bon logiciel
La soustraction
> part(str, 14 :20)
ans =
Scilab
La fonction part permet dextraire dune chane chaine une souschane :
>chaine =123456789
chaine =
123456789
Pour extraire la sous-chane chaine se trouvant entre les positions 5 et 7 :
> chaine1 = part(chaine, 5 :7)
chaine1 =
567
>expression = sin(3)+1
expression =
sin(3)+1

Evaluation dune expression


La fonction evstr evalue lexpression denie par la chane de caract`eres qui lui est passee comme
argument :
>evstr(expression)
ans =
1.14112
> instruction = z = sin(3)+1 ;
Execute dune instruction
La fonction execstr execute une instruction donnee par une chane caract`eres :
>execstr(instruction) ; z
z =
1.14112
5
0.2.3 Booleens
Lobjet booleen peut prendre deux valeurs : vrai T pour true et faux F pour false :
> i = 5 ;
> i < 2
ans =
F
> i==5
ans =
T
> i =5
ans =
F
> vrai = %t;
> if vrai then disp(Hello),end
Hello
La negation se note par un place avant la variable booleenne.
0.3 Objets vectoriels et matriciels
0.3.1 Construction de vecteurs et de matrices
Une matrice est un tableau contenant certains objets de base comme les nombres entiers,
reels ou complexes, les chanes de caract`eres, ....
Elle peuvent etre denis `a laide des operateurs elementaires : [ ] , , et ; .
>M=[Mohammed,32 ;Ismail,31 ;Ali,76]
M =
Mohammed 32
Ismail 31
Ali 76
1) On utilise la virgule pour separer les colonnes ;
2) On utilise le point-virgule pour separer les lignes ;
3) On utilise les crochets pour delimiter le contenu de la matrice.
> A = [1, 3 ; 4, 5]
A =
1 3
4 5
6
*) On peut utiliser des matrices dans la construction dautres matrices :
>B = [A, A; [0, 1, 0, 1]]
B =
1. 3. 1. 3.
4. 5. 4. 5.
0. 1. 0. 1.
*) Scilab dispose de fonctions permettant la construction des vecteurs et des matrices par-
ticuli`eres :
ones(m1,m2) renvoie une matrice de taille (m1,m2) remplie de 1 :
> ones(2,3)
ans =
1. 1. 1.
1. 1. 1.
zeros(m1,m2) renvoie une matrice nulle de taille (m1,m2) :
>zeros(2,3)
ans =
0. 0. 0.
0. 0. 0.
rand(m1,m2) renvoie une matrice aleatoire de dimensions m1 x m2 dont les elements sont dans
lintervalle [0, 1] :
>rand(1,3)
ans =
0.2113249 0.7560439 0.0002211
*) La syntaxe a :h :b donne un vecteur ligne contenant des valeurs allant de a `a b par
pas de h :
> 3 :2 :7
ans =
3 5 7
> 9 :-2 :-1
ans =
9. 7. 5. 3. 1. 1.
7
*) On utilise size pour avoir la taille dune matrice :
> a = rand(2, 4)
a =
0.3303271 0.6283918 0.6857310 0.0683740
0.6653811 0.8497452 0.8782165 0.5608486
>size(a)
ans =
2. 4.
*) Sil sagit dun vecteur ligne, length donne la longueur dun vecteur :
> b = linspace(2,8,4)
b =
2. 4. 6. 8.
>length(b)
ans =
4.
0.3.2 Extraction et insertion
*) A(i,j) designe lelement (i,j) de la matrice A.
> A=rand(3,3)
A =
0.2113249 0.3303271 0.8497452
0.7560439 0.6653811 0.6857310
0.0002211 0.6283918 0.8782165
*) on peut remplacer lelement A(2,3) par 0 :
> A(2,3)=0
A =
0.2113249 0.3303271 0.8497452
0.7560439 0.6653811 0.
0.0002211 0.6283918 0.8782165
> A([1,2],[1,3])
ans =
0.2113249 0.8497452
0.7560439 0.
8
> A([2,1],[1,1])
ans =
0.7560439 0.7560439
0.2113249 0.2113249
> A(1, :)
ans =
0.2113249 0.3303271 0.8497452
>A( :,2)
ans =
0.3303271
0.6653811
0.6283918
> A([1,2],[1,3])=ones(2,2)
A =
1. 0.3303271 1.
1. 0.6653811 1.
0.0002211 0.6283918 0.8782165
*)Addition, soustraction et comparaison dune matrice avec un objet scalaire :
> B=A+2
B =
3. 2.3303271 3.
3. 2.6653811 3.
2.0002211 2.6283918 2.8782165
> A==1
ans =
T F T
T F T
F F F
*)Pour supprimer une ou plusieurs lignes (ou colonnes) dune matrice ([]) :
> B([1,2], :)=[]
B =
9
2.0002211 2.6283918 2.8782165
*)Le symbole $ permet de denir des operations sur des matrices sans avoir `a calculer
leur taille
Pour echanger la premi`ere et la derni`ere ligne de la matrice A :
> A([1,$], :)=A([$,1], :)
A =
0.0002211 0.6283918 0.8782165
1. 0.6653811 1.
1. 0.3303271 1.
0.3.3 Operations vectorielles et matricielles
> M=[%pi/2 %pi ; 2*%pi 3*%pi]
M =
1.5707963 3.1415927
6.2831853 9.424778
> M2 = M+M
M2 =
3.1415927 6.2831853
12.566371 18.849556
> M2 = 2*M
M2 =
3.1415927 6.2831853
12.566371 18.849556
> sin(M)
ans =
1. 1.225D 16
2.449D 16 3.674D 16
> cos(M)
ans =
6.123D 17 1.
1. 1.
10
Multiplication dune matrice et un vecteur :
>D = [1 2 ; 0 3]
D =
1. 2.
0. 3.
>b = [1 1]
b =
1.
1.
>c = D b
c =
0.3333333
0.3333333
>D*D;
ans =
1. 8.
0. 9.
Multiplication element par element :
>D.*D
ans =
1. 4.
0. 9.
>D./(1+D)
ans =
0.5 0.6666667
0. 0.75
>D.

(0.5)
ans =
1. 1.4142136
0. 1.7320508
> 2 .

(0 :8)
ans =
1. 2. 4. 8. 16. 32. 64. 128. 256.
11
0.4 Programmation de base
0.4.1 Script Scilab
*) Un programme Scilab est une suite dinstructions. Ces instructions peuvent etre placees
dans un chier (que lon appelle un script) `a laide dun editeur de texte tel que Scipad
(son propre editeur).
*) Lexecution se fait `a laide de linstruction : exec(nom-chier.sce).
*) Exemple, si le chier sappelle test.sce et contient :
a = [1, 2, 3;
4 5 6;
7 8 9];
b=2 ;
*) On peut executer le script par : exec(test.sce)
0.5 Boucles et instructions de contr ole
0.5.1 Instruction for
Pour un nombre determine de fois inconditionnellement.
Syntaxe :
*) for variable=expression ,instruction, ,instruction,end
*) for variable=expression do instruction, ,instruction,end
> Nligne = 3 ;
> Ncologne = 4 ;
> for i=1 : Nligne
> for j=1 :Ncologne
> A(i,j) = i+j ;
> end
> end
>A
A =
2. 3. 4. 5.
3. 4. 5. 6.
4. 5. 6. 7.
Remarque 2 Si expression est une matrice ou un vecteur ligne, variable prend successivement
les valeurs de chaque colonne de la matrice.
> Tab = [1 3 5 7] ;
>for i=Tab
12
>somme = somme +i ;
>end
>somme
somme =
16.
0.5.2 Boucle while
Tant que son argument est un booleen vrai, la boucle while execute son contenu. Syntaxe :
*) while expr ,instructions,...[,else instructions], end
*) while expr do instructions,...[,else instructions], end
*) while expr then instructions,...[,else instructions], end
> x=1 ; while(1+x>1) do x=x/2 ; end
Remarque 3 *) Chaque mot-cle then ou do soit sur la meme ligne que le while corres-
pondant.
*) La construction, else instructions permet de specier des instructions `a executer si
lexpression expr est fausse.
0.5.3 Instruction de contr ole if
Linstruction de controle if permet dexecuter conditionnellement des instructions.
i=2 ;
for j = 1 :3
if i == j then a(i,j) = 2 ;
elseif abs(i-j) == 1 then a(i,j) = -1 ;
else a(i,j) = 0 ;
end ;
end
Syntaxe :
if expr-1 then instructions 1
elseif expr-i then instructions-i
....
else instructions
end
*) Si lexpression expr-1 est vraie, les instructions-1 sexecutent. Sinon, si expr-i est vraie
, les instructions-i sexecutent.
Sinon, les textitinstructions sexecutent.
13
0.5.4 Instruction de contr ole select-case
while %t do
n=round(10*rand(1,1))
select n
case 0 then
disp(0)
case 1 then
disp(1)
else
break
end
end
Syntaxe :
select expr,
case expr-1 then instructions-1,
case expr-2 then instructions-2,
.
.
.
case expr-n then instructions-n,
[ else instructions ] ,
end
Remarque 4 *) Les instructions-i sont executees si expr-i=expr.
*) Contrainte : chaque mot-cle then soit sur la meme ligne que le case correspondant.
0.6 Fonctions Scilab
0.6.1 Fonction en ligne
Exemple 1
> function y= RacineCarreeEx1(x)
> y = sqrt(x) ;
> endfunction
Pour tester la fonction de lexemple 1, on tape par exemple :
> RacineCarreeEx1(400)
Exemple 2
> de(y=RacineCarreeEx2(x),y=sqrt(x))
De meme, pour tester la fonction de lexemple 2, on tape par exemple :
> RacineCarreeEx2(100)
14
0.6.2 Fonction dans un chier
Syntaxe :
function [arguments-de-sortie] = nom-de-la-fonction(arguments-d-entree)
Denir la fonction.
endfunction
Exemple
*)

Ecrire une fonction Scilab dans le chier racines.sci avec trois arguments en entree
(les coecients a, b et c) et un argument en sortie, le vecteur R contenant les deux racines
du polynome. Dans le cas de racines doubles, mettre 2 fois la meme valeur dans R. Sil
ny a pas de racines reelles, mettre des %nan dans R.
*) Tester votre fonction avec les valeurs suivantes :
a = 1, b = 2, c = 1;
a = 1, b = 3, c = 2;
a = 1, b = 0, c = 1.
Programme test
function R = racines(a,b,c)
Delta = b*b - 4*a*c ;
if(Delta > 0.) then R(1)= (-b-sqrt(Delta))/(2*a) ;
R(2)= (-b+sqrt(Delta))/(2*a) ;
elseif (Delta < 0.) disp(Pas de solutions pour cette equation)
R=[%nan, %nan] ;
else then R(1)= -b/(2*a) ;
R(2)= -b/(2*a) ;
end ;
endfunction
15