Vous êtes sur la page 1sur 40

Introduction S CILAB

S. M OTTELET
QUIPE DE M ATHMATIQUES A PPLIQUES
D PARTEMENT DE G NIE I NFORMATIQUE
U NIVERSIT DE T ECHNOLOGIE DE C OMPIGNE

Contents
1

.
.
.
.
.
.

5
6
7
7
8
9
9

.
.
.
.
.
.
.
.

14
14
15
15
16
18
19
20
20

Manipulations des matrices et des vecteurs


3.1 Comment gnrer des matrices et des vecteurs . . . . . . . . . . . . . . .
3.2 Comment manipuler les lments dune matrice . . . . . . . . . . . . . .

21
21
24

Scripts et fonctions
4.1 Les scripts . . . . . . . . . .
4.2 Les fonctions . . . . . . . .
4.3 Contrle dexcution . . . .
4.4 Interaction avec lutilisateur

Pour bien dmarrer


1.1 Entrer une matrice . . . . . . . . . . . . . . . . . . . . .
1.2 Les lments dune matrice . . . . . . . . . . . . . . . .
1.3 Les commandes S CILAB et les variables . . . . . . . . .
1.4 Obtenir des informations sur lespace de travail . . . . .
1.5 Quitter et sauver lespace de travail . . . . . . . . . . . .
1.6 Nombres, expressions arithmtiques et fonctions usuelles
Les oprations sur les matrices
2.1 La transposition . . . . . . . . . . . . . . .
2.2 Addition et soustraction . . . . . . . . . . .
2.3 Multiplication . . . . . . . . . . . . . . . .
2.4 Inversion dune matrice et division . . . . .
2.5 Oprations lment par lment . . . . . .
2.6 Oprateurs relationnels . . . . . . . . . . .
2.7 Oprateurs logiques . . . . . . . . . . . . .
2.8 Fonctions usuelles appliques une matrice

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

27
27
29
31
32

Les graphiques
5.1 Les graphiques deux dimensions
5.1.1 La commande plot . . .
5.1.2 Titres et lgendes . . . . .
5.2 Les graphiques trois dimensions

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

34
34
34
36
36

.
.
.
.

.
.
.
.

Contents

5.3

5.2.1 Les courbes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


5.2.2 Les surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Manipuler plusieurs graphiques . . . . . . . . . . . . . . . . . . . . . . .

36
37
38

Chapter 1
Pour bien dmarrer
Ce premier chapitre explique les quelques rudiments connatre pour commencer utiliser
S CILAB. Il explique
Comment entrer une matrice, la syntaxe des commandes S CILAB et les variables
Comment avoir des informations sur lespace de travail, comment sauver tout ou
partie de lespace de travail et comment quitter S CILAB.
Les nombres, les expressions arithmtiques et les fonctions usuelles
La faon dont S CILAB affiche les rsultats
Vous pouvez ds maintenant lancer une session S CILAB sur votre machine pour traiter les
exemples qui vous seront proposs. Vous devriez avoir lcran quelque-chose comme
a :
===========
S c i l a b
===========

scilab-2.5.1
Copyright (C) 1989-2000 INRIA

Startup execution:
loading initial environment
loading plotlib v0.15
-->
Le signe --> signifie que S CILAB est en attente dune commande. Dans le texte, chaque
exemple est reprable facilement par les caractres utiliss (caractres de machine
crire), et chaque commande entrer au clavier sera toujours prcde du signe -->.

Chapter 1. Pour bien dmarrer

1.1

Entrer une matrice

S CILAB travaille essentiellement avec un seul type dobjet, les matrices rectangulaires
contenant des nombres rels ou complexes et eventuellement des caractres. Dans certaines situations, une signification particulire est donne aux matrices 1 1, qui sont des
scalaires, et aux matrices avec une seule ligne ou une seule colonne, qui sont des vecteurs.
Les oprations et commandes de S CILAB agissent donc sur ce type dobjet.
Il y a plusieurs faons dentrer une matrice dans lespace de travail de S CILAB :
Entrer au clavier une liste explicite dlments.
Gnrer cette matrice par une suite de commandes S CILAB.
Charger cette matrice partir dun fichier de donnes externe.
Le langage S CILAB ne contient pas de dclaration de dimension ou de type ( loppos
de langages comme le Pascal). La place mmoire ncessaire une matrice est automatiquement alloue au moment de sa cration.
La faon la plus simple dentrer une petite matrice est dentrer au clavier la liste de ses
lments, en adoptant les conventions suivantes :
Les lments dune mme ligne sont spars par des espaces ou des virgules
La liste des lments doit tre entoure de crochets, [ ]
Chaque ligne (sauf la dernire) se termine par un ; (point-virgule)
Par exemple, la commande suivante
--> A = [1

3;

6;

9]

produit la sortie suivante


A
!
!
!

=
1.
4.
7.

2.
5.
8.

3. !
6. !
9. !

La matrice A est garde en mmoire pour un usage ultrieur.


Une grande matrice peut tre entre en sparant chaque ligne par un retour-chariot pour
remplacer le point-virgule. Par exemple la matrice prcdente peut tre entre comme
ceci :
--> A = [1 2
4 5 6
7 8 9]

Chapter 1. Pour bien dmarrer

1.2

Les lments dune matrice

Les lment dune matrice peuvent tre nimporte quelle expression S CILAB; par exemple
--> x = [-1.3

sqrt(3)

(1+2+3)*4/5]

produit la sortie
x

! - 1.3

1.7320508

4.8 !

Les lments individuels dune matrice peuvent tre rfrencs avec leur indice, prcis
entre deux parenthses, (). Si nous continuons notre exemple
--> x(5) = abs(x(1))
donne la sortie
x

! - 1.3

1.7320508

4.8

0.

1.3 !

On notera que la taille de x a t augmente automatiquement pour pouvoir ajouter le


nouvel lment, et que les lments indfinis ont par dfaut t initialiss zro.

1.3

Les commandes S CILAB et les variables

S CILAB est un langage qui possde une syntaxe simple mais bien dfinie. Une commande
sera toujours de la forme
variable = expression
ou plus simplement
expression
Une expression peut tre compose de matrices spares par des oprateurs, de fonctions
et de noms de variables. Lvaluation de lexpression produit une matrice qui est affiche
lcran et qui est affecte variable. Si le nom de la variable ainsi que le signe =
sont omis, S CILAB cre automatiquement une variable portant le nom ans (pour answer).
Par exemple, lexpression suivante
--> 1900/81
produit laffichage suivant

Chapter 1. Pour bien dmarrer

ans =
23.4568
Une commande se termine par lappui sur la touche Return (ou Enter). Cependant, si
le dernier caractre dune ligne de commande est ; (un point-virgule), cela supprime
laffichage du rsultat, sans toutefois affecter lexcution de la commande. On utilisera cette option par exemple lors de calculs intermdiaires dont le rsultat na pas besoin
dtre affich. Par exemple
--> y = sqrt(3)/2;

affecte y la valeur de 3/2 mais naffiche pas le rsultat.


Un nom de variable doit obligatoirement commencer par une lettre, suivie par un nombre
quelconque de chiffres et de lettres. Attention : S CILAB ne prend en compte que les
19 premiers caractres1 du nom dune variable. S CILAB fait aussi la diffrence entre les
majuscules et les minuscules. Par exemple les deux commandes suivantes
--> z = log(2);
--> Z
produisent laffichage suivant
!--error
4
undefined variable : Z

1.4

Obtenir des informations sur lespace de travail

Les exemples proposs prcdemment ont cr des variables qui sont stockes dans lespace
de travail de S CILAB. Pour obtenir la liste de ces variables, il suffit dentrer la commande
--> who
your variables are...
y
x
z
A
MSDOS
home
PWD
percentlib fraclablib soundlib xdesslib utillib
tdcslib
siglib
s2flib
roblib
optlib
metalib
elemlib
commlib
polylib
autolib
armalib
alglib
mtlblib
SCI
%F
%T
%z
%s
%nan
%inf
old
newstacksize
%t
%f
%eps
%io
%i
%e
%pi
using
3979 elements out of
1000000.
and
43 variables out of
1023
1

Cela est en gnral suffisant !

Chapter 1. Pour bien dmarrer

On retrouve au dbut de cette liste les 4 variables qui ont t cres dans les exemples
prcdents. Pour connatre la taille de ces variables, il suffit dutiliser la commande
--> whos()
Name
whos
y
x
z
A
.
.
.

Type

Size

compiled function
constant matrix
constant matrix
constant matrix
constant matrix

1
1
1
3

Bytes

by
by
by
by

1
5
1
3

4984
24
56
24
88

(on ne reproduit ici que le dbut de la liste qui apparat lcran). Chaque lment dune
matrice relle occupe 8 octets (bytes) de la mmoire, et pour chaque matrice 16 octets
supplmentaires sont utiliss pour stocker diverses informations (taille, etc.). Ceci explique par exemple que la matrice A, qui est de taille 3 3, occupe 9 8 + 16 = 88
octets.

1.5

Quitter et sauver lespace de travail

Pour quitter S CILAB il suffit de taper quit ou exit. Lorsquune session S CILAB est termine, toutes les variables prsentes dans lespace de travail sont perdues. Il est possible
de sauvegarder lespace de travail avant de quitter en tapant
--> save work.dat
Cette commande sauve toutes les variables dans votre rpertoire dans un fichier appel
work.dat. Il est possible lors dune session ultrieure de rcuprer le contenu de ce
fichier en tapant la commande load work.dat.
Il est possible dutiliser les commandes save et load avec dautres noms de fichier, ou
bien de sauvegarder uniquement certaines variables. La commande
--> save(work.dat,A,x)
ne sauve dans ce mme fichier que les variables A et x. La commande load work.dat
permettra de rcuprer toutes les variables sauvegardes dans ce fichier (ici A et x).

1.6

Nombres, expressions arithmtiques et fonctions usuelles

S CILAB utilise la notation dcimale classique, avec un point dcimal optionnel (si le
nombre est entier), prcde du signe moins pour les nombres ngatifs. Il est possible
dinclure une puissance de dix en facteur. Des exemples de nombres lgaux sont

Chapter 1. Pour bien dmarrer

10

3
-99
0.0001
9.37821312
1.6023E-20
6.02252e23
La prcision relative des nombres est donne par la variable permanente eps (permanente
veut dire que vous ne pouvez pas la faire disparatre de lespace de travail)
--> %eps
eps =
2.220e-16
Cette valeur signifie que la prcision est peu de choses prs de 16 chiffres significatifs.
On peut illustrer ceci par lexemple suivant
--> (1 + 1e-16) - 1
ans =
0.
Il faut donc toujours avoir lesprit que larithmtique sur ordinateur nest jamais exacte.
Ltendue des nombres reprsentables va de 10308 10308 .
On peut construire des expressions avec les oprateurs usuels, qui respectent lordre de
priorit classique
^
/
\
*
+
-

lvation une puissance


division droite
division gauche
multiplication
addition
soustraction

Nous verrons dans un prochain paragraphe comment ces oprations sont utilisables sur
les matrices. S CILAB dispose en standard des fonctions mathmatiques usuelles que lon
trouve sur toute calculatrice moderne, nous ne citons ici que les plus classiques

Chapter 1. Pour bien dmarrer

sqrt
log
log10
sin
cos
tan
atan
exp
cosh
floor
round
abs
real
imag
modulo

racine carre
logarithme
logarithme dcimal
sinus
cosinus
tangente
arc tangente
exponentielle
cosinus hyperbolique
partie entire
arrondi lentier le plus proche
valeur absolue ou module pour les complexes
partie relle dun complexe
partie imaginaire dun complexe
reste dune division euclidienne

Ces fonctions agissent bien sr sur les nombres complexes. Par exemple
--> sqrt(-1)
ans =
i
--> exp(%i*%pi/3)
ans

0.5 + 0.8660254i

11

Chapter 1. Pour bien dmarrer

12

Certaines fonctions renvoient simplement des valeurs spciales. Par exemple la variable
permanente %pi
--> %pi
ans =
3.1416
renvoie la valeur de , pr-calcule comme tant la valeur de 4*atan(1). La fonction Inf, pour dsigner +, est disponible dans un petit nombre de calculateurs ou
de systmes de calcul. La valeur renvoye par cette fonction peut gnre par certaines
oprations, par exemple une division par zro, ou un dplacement de capacit (overflow)
--> 1/0
Warning :division by zero...
ans

=
Inf

On notera au passage quune division par zro ne plante pas le programme mais donne
juste un warning. On peut utiliser %inf dans les calculs :
--> 1/%inf
ans =
0
Une variable permanente similaire Inf est la variable %nan. Il sagit de la valeur
renvoye lors dune opration illicite, par exemple
--> 0/0
Warning :division by zero...
ans

=
Nan

--> %inf/%inf
ans

=
Nan

Chapter 1. Pour bien dmarrer

13

En gnral, lorsque ces valeurs sont gnres par un programme, ce nest pas bon signe
et cela doit attirer lattention sur un ventuel bug (erreur de programmation).

Chapter 2
Les oprations sur les matrices
2.1

La transposition

Le caractre spcial (prime ou apostrophe) dsigne lopration de transposition. Les


commandes suivantes
--> A = [1
--> B = A

3;

6;

0]

donnent les rsultats


A =
1
4
7

2
5
8

3
6
0

1
2
3

4
5
6

7
8
0

B =

et la commande
--> x = [-1

2]

x =
!
!
!

-1. !
0. !
2. !

Lopration de transposition transpose les matrices au sens classique. Si Z est une matrice
complexe, alors Z dsigne la transpose conjugue de Z.

Chapter 2. Les oprations sur les matrices

2.2

15

Addition et soustraction

Les oprateurs + et - agissent sur les matrices. Ces oprations sont valides ds que les
dimensions des matrices sont les mmes. Par exemple avec les matrices de lexemple
prcdent laddition
--> A + x
!--error
8
inconsistent addition
nest pas valide car A est 3 3 et x est 3 1. Par contre lopration suivante est valide :
--> C = A + B
C =
!
!
!

2.
6.
10.

6.
10.
14.

10. !
14. !
0. !

Laddition et la soustraction sont aussi dfinies si lun des oprandes est un scalaire, cest
dire une matrice 1 1. Dans ce cas le scalaire est additionn ou soustrait de tous les
lments de lautre oprande, par exemple :
--> z = x - 1
z =
! -2. !
! -1. !
! 1. !

2.3

Multiplication

Le symbole * dsigne loprateur de multiplication des matrices. Cette opration est


valide ds que les dimensions des oprandes sont compatibles, savoir, le nombre de
colonnes de loprande de gauche doit tre gal au nombre de lignes de loprande de
droite. Par exemple lopration suivante nest pas valide
--> x*z
!--error
10
inconsistent multiplication
Par contre la commande suivante

Chapter 2. Les oprations sur les matrices

--> x * z
ans =
4.
donne le produit scalaire de x et z. Une autre commande valide est la suivante :
--> b = A*x
b =
! 5. !
! 8. !
! -7. !
La multiplication dune matrice par un scalaire est bien sr toujours valide :
--> A*2
ans =
!
!
!

2.4

2.
8.
14.

4.
10.
16.

6. !
12. !
0. !

Inversion dune matrice et division

On obtient facilement linverse dune matrice carre avec la commande inv :


--> B = inv(A)
B

! - 1.7777778
!
1.5555556
! - 0.1111111

0.8888889 - 0.1111111 !
- 0.7777778
0.2222222 !
0.2222222 - 0.1111111 !

--> C=B*A
C
!
!

=
1.
0.

0.
1.

0. !
0. !

16

Chapter 2. Les oprations sur les matrices

0.

0.

17

1. !

--> C(2,1)
ans

- 1.110E-16
On notera au passage les erreurs dues la prcision finie des calculs.
La division de matrice est implante dans S CILAB, et porte la signification suivante :
lexpression A/B donne le rsultat de lopration AB 1 . Elle est donc quivalente la
commande A*inv(B). Pour la division gauche, lexpression A\B donne le rsultat
de lopration A1 B. Il faut donc respecter la compatibilit des dimensions des deux
matrices pour que cette division ait un sens.
La division gauche est utilise classiquement lorsque lon a besoin de rsoudre un systme linaire. Par exemple si lon dsire rsoudre le systme linaire Ay = x, on crira
--> y = A\x
y

!
1.5555556 !
! - 1.1111111 !
! - 0.1111111 !
Lorsque S CILAB interprte cette expression, il ninverse pas la matrice A avant de la
multiplier droite par x; il rsout effectivement le systme. On peut vrifier lexactitude
des rsultats de la faon suivante :
--> A*y - x
ans =
1.0E-15 *
!
!
!

0.2220446 !
0.2775558 !
0.
!

On notera comme pour lexemple prcdent la prsence derreurs de lordre de la prcision machine.

Chapter 2. Les oprations sur les matrices

2.5

18

Oprations lment par lment

Les oprations usuelles sur les matrices peuvent tre effectues lment par lment; cela
revient considrer les matrices comme des tableaux de chiffres et non plus comme des
objets mathmatiques de lalgbre linaire. Pour laddition et la soustraction les deux
points de vues sont les mmes puisque ces deux oprations agissent dj lment par
lment pour les matrices.
Le symbole .* dsigne la multiplication lment par lment. Si A et B ont les mmes
dimensions, alors A.*B dsigne le tableau dont les lments sont simplement les produits
des lments individuels de A et B. Par exemple si on dfinit x et y de la faon suivante :
--> x = [1

3];

y = [4

6];

alors la commande
--> z = x .* y
produit le rsultat
z =
!

4.

10.

18. !

La division fonctionne de la mme manire :


--> z = x ./ y
z =
!

0.25

0.4

0.5 !

Le symbole .^ dsigne llvation la puissance lment par lment :


--> x .^ y
ans =
!

1.

32.

729. !

--> x .^ 2
ans =
!

1.

4.

9. !

Chapter 2. Les oprations sur les matrices

19

--> 2 .^ x
ans =
!

2.

4.

8. !

On notera que pour .^ lun des deux oprandes peut tre un scalaire.

2.6

Oprateurs relationnels

Six oprateurs relationnels sont disponibles pour comparer deux matrices de dimensions
gales :
plus petit que
plus petit ou gal
plus grand
plus grand ou gal
gal
diffrent

<
<=
>
>=
==
~=

S CILAB compare les paires dlments correspondants; le rsultat est une matrice de constantes boolennes, le F (false) reprsentant la valeur faux et le T (true) la valeur vrai.
Par exemple
--> 2 + 2 ~= 4
ans =
F
Les oprateurs logiques permettent de voir dans une matrice la disposition des lments
vrifiant certaines conditions. Par exemple prenons la matrice
--> A = [1

-1

2; -2

A =

-4

!
!
!

1.
-2.
8.

-1.
-4.
1.

La commande
--> P = (A < 0)

2. !
1. !
-1. !

1; 8

-1]

Chapter 2. Les oprations sur les matrices

20

! F T F !
! T T F !
! F F T !
renvoie une matrice P indiquant par des T les lments ngatifs de A.

2.7

Oprateurs logiques

Les oprateurs &, | et ~ dsignent les oprateurs logiques et, ou et non. Il sont
utiliss pour laborer des expressions logiques. Par exemple si lon prend la matrice de
lexemple prcdent, la commande
--> P = (A < 0) & (modulo(A,2) == 0)
P =
! F F F !
! T T F !
! F F F !
permet de reprer dans A les lments ngatifs et multiples de 2.

2.8

Fonctions usuelles appliques une matrice

Les fonctions usuelles sappliquant sur rels et complexes sappliquent aussi lment par
lment sur les matrices. Par exemple :
--> A = [0

1/4;

1/2

A =
!
!

0.
0.5

0.25 !
0.75 !

--> cos(%pi*A)
ans =
!
!

1.
0.

0.7071068 !
- 0.7071068 !

3/4]

Chapter 3
Manipulations des matrices et des
vecteurs
3.1

Comment gnrer des matrices et des vecteurs

On peut facilement gnrer une matrice nulle de taille quelconque avec la commande
zeros qui sutilise comme ceci :
--> A = zeros(3,2)
A =
!
!
!

0.
0.
0.

0. !
0. !
0. !

Cette commande peut par exemple servir pour crer et initialiser une matrice.
On peut gnrer la matrice identit avec la commande eye de la faon suivante :
--> I = eye(3,3)
I =
!
!
!

1.
0.
0.

0.
1.
0.

0. !
0. !
1. !

On peut aussi gnrer des vecteurs particuliers laide du caractre : (deux points),
comme le montre lexemple suivant :
--> x = 1:5

Chapter 3. Manipulations des matrices et des vecteurs

22

x =
!

1.

2.

3.

4.

5. !

Cette commande a permis daffecter au vecteur x les entiers de 1 5. On peut aussi


spcifier un incrment particulier autre que 1 de la faon suivante :
--> y = 0 : %pi/4 : %pi
y =
!

0.

0.7853982

1.5707963

2.3561945

3.1415927 !

On notera que cette commande produit toujours un vecteur ligne. Il est bien sr possible
dutiliser un incrment ngatif :
--> y = 6:-1:1
y =
!

6.

5.

4.

3.

2.

1. !

On peut aisment crer des tables en utilisant cette commande (on verra au chapitre suivant que cela permet de crer rapidement des reprsentations graphiques). Par exemple :
--> x = (0:0.2:3);
--> y=exp(-x).*sin(x);
--> [x y]
ans =
!
!
!
!
!
!
!
!
!
!
!
!

0.
0.2
0.4
0.6
0.8
1.
1.2
1.4
1.6
1.8
2.
2.2

0.
!
0.1626567
0.2610349
0.3098824
0.3223289
0.3095599
0.2807248
0.2430089
0.2018104
0.1609759
0.1230600
0.0895840

!
!
!
!
!
!
!
!
!
!
!

Chapter 3. Manipulations des matrices et des vecteurs

!
!
!
!

2.4
2.6
2.8
3.

0.0612766
0.0382881
0.0203707
0.0070260

!
!
!
!

23

Chapter 3. Manipulations des matrices et des vecteurs

24

Il existe une commande permettant de spcifier uniquement les valeurs minimum et maximum et le nombre de valeurs dsirs :
--> k = linspace(-%pi,%pi,5)
k =
! - 3.1415927

3.2

- 1.5707963

0.

1.5707963

3.1415927 !

Comment manipuler les lments dune matrice

On peut faire rfrence aux lments individuels dune matrice en prcisant leurs numros
de ligne et de colonne dans des parenthses suivant le nom de la matrice. Prenons la
matrice
--> A = [1

3;

6;

9]

La commande suivante permet de remplacer a33 par a13 + a31 :


--> A(3,3) = A(1,3) + A(3,1)
A =
!
!
!

1.
4.
7.

2.
5.
8.

3. !
6. !
10. !

On peut aussi facilement extraire une ligne ou une colonne dune matrice; par exemple,
la commande
--> v = A(:,1)
v =
!
!
!

1. !
4. !
7. !

permet de mettre dans le vecteur v la premire colonne de la matrice A. De la mme


manire, la commande
--> v = A(1,:)
permettra dextraire la premire ligne de A.
Un indice de ligne ou de colonne peut tre un vecteur. Par exemple si nous prenons le
vecteur

Chapter 3. Manipulations des matrices et des vecteurs

25

--> x = 0:2:8;
la commande suivante permet deffectuer une permutation des lments de x :
--> v = [3 5 1 2 4];
--> x(v)
ans =
! 4.

8.

0.

2.

6. !

Il est possible de construire une matrice partir de matrices plus petites. Par exemple,
pour ajouter une nouvelle ligne la matrice A :
--> l = [10
--> A = [A;

11
l]

12];

Cela donne
A =
!
!
!
!

1.
4.
7.
10.

2.
5.
8.
11.

3.
6.
10.
12.

!
!
!
!

On peut aussi facilement manipuler les sous-matrices dune matrice, on la dj vu plus


haut pour le cas dune ligne ou dune colonne :
--> A(1:2,1:2) = eye(2,2)
A =
!
!
!
!

1.
0.
7.
10.

0.
1.
8.
11.

3.
6.
10.
12.

!
!
!
!

Ici on a remplac la sous-matrice principale dordre 2 de A par la matrice identit.


On peut extraire une sous-matrice dune matrice plus grande. Par exemple
--> B = A( 1:2, : );
slectionne les deux premires lignes et toutes les colonnes de A et les stocke dans une
matrice B.
Pour en finir avec les matrices, on peut obtenir automatiquement leur taille (nombre de
lignes et de colonnes) avec la fonction size :

Chapter 3. Manipulations des matrices et des vecteurs

26

--> size(A)
ans =
!

4.

3. !

--> [n,m]=size(v)
m =
5.
n =
1.
La premire de ces deux commandes renvoie un vecteur deux composantes : la premire
est le nombre de lignes et la deuxime est le nombre de colonnes. La deuxime commande
permet dassigner ces deux valeurs deux variables diffrentes, n pour les lignes et m pour
les colonnes.

Chapter 4
Scripts et fonctions
La faon dont S CILAB a t utilis dans les chapitres prcdents peut donner limpression
quil sagit simplement dune calculatrice amliore uniquement capable dexcuter
des commandes rentres au clavier et de donner le rsultat. En fait, S CILAB est capable
dexcuter une suite de commandes stockes dans un fichier, et on prfrera ce mode de
fonctionnement ds que le nombre de lignes de commande est suffisamment grand (par
exemple suprieur 5 lignes). Cela permet aussi de ne pas avoir retaper toute la suite
de commandes si lon a envie de changer la valeur de tel ou tel paramtre.
Les scripts et les fonctions sont des fichiers texte ordinaires cres laide de lditeur de
texte :
Un script permet dexcuter automatiquement une longue suite de commandes
amene tre rpte.
Une fonction permet dtendre la bibliothque de fonctions standard de S CILAB.
La puissance de S CILAB tient surtout ce dernier aspect.

4.1

Les scripts

Lorsquun script est excut (nous verrons plus bas comment dclencher cette excution),
S CILAB interprte tout simplement les commandes les unes aprs les autres comme si
elles avaient t tapes au clavier. Cela veut donc dire que les variables cres et utilises
dans le script sont des variables de lespace de travail de S CILAB.
Voici un premier exemple : nous allons crer un script qui calcule quelques termes de la
suite de Fibonacci dont la dfinition est la suivante :

u0 = 1,
u1 = 1,

uk+2 = uk+1 + uk , k 0
Dans un premier temps, il faut crer le fichier qui va contenir le script. Pour cela, il faut
selectionner la commande Create File (voir figure 4.1) dans le menu File du File

Chapter 4. Scripts et fonctions

28

Figure 4.1: Cration dun fichier


Manager. Le fichier cr a par dfaut le nom NewDocument. Pour le changer il suffit de
taper le nouveau nom et dappuyer sur Return. Ici nous choisirons le nom fibo.sce.
Aprs avoir saisi le nom, il suffit de double-cliquer sur licne du fichier pour invoquer
lditeur de texte; la fentre cre doit ressembler celle qui se trouve sur la figure 4.2.
Vous pouvez maintenant saisir les lignes suivantes dans la fentre de lditeur :

Figure 4.2: Fentre de lditeur de texte


// Un script pour calculer les termes de la suite de Fibonacci
n = 10;
u = zeros(n,1);
u(1:2) = [1;1];
for i = 1:n-2
u(i+2) = u(i+1) + u(i);

Chapter 4. Scripts et fonctions

29

end
u
Les caractres // permet de spcifier que ce qui le suit ne doit pas tre interprt par
S CILAB. Cela permet dinsrer des commentaires.
Nous verrons en dtail comment utiliser linstruction for un peu plus tard. Une fois que
le texte est tap dans la fentre, sauvez le fichier (utilisez le menu File de lditeur).
Pour excuter le script fibo.sce, il suffit de taper :
--> exec fibo.sce
u =
1
1
2
3
5
8
13
21
34
55

4.2

Les fonctions

Un fichier contenant le mot function au dbut de la premire ligne est une fonction.
Une fonction diffre dun script dans le sens o lon peut lui transmettre des paramtres
en entre, et o les variables manipules lintrieur sont locales la fonction : cela
veut dire que le seul lien avec des variables de lespace de travail ne peut se faire quen
passant des paramtres ou arguments. Les fonctions sont utiles pour tendre facilement
les possibilits de S CILAB.
A titre dexemple, nous allons crer une fonction qui nexiste pas dans S CILAB qui est une
fonction calculant la factorielle. Vous pouvez donc crer un fichier nomm fact.sci
et double-cliquer sur son icone pour invoquer lditeur de texte. Tapez dans la fentre le
texte suivant
function [f] = fact(n)
// Cette fonction calcule la factorielle dun nombre entier

Chapter 4. Scripts et fonctions

30

// syntaxe : variable = fact(n)


if (n - floor(n) ~= 0) | n < 0
error(erreur dans fact : largument doit etre entier);
end
if n == 0
f = 1;
else
f = prod(1:n);
end
endfunction
Quelques explications sont ncessaires sur les lignes de cette fonction :
La ligne if (n - floor(n) ~= 0... permet de tester si le nombre pass en
argument est un entier naturel. La structure if ... end est assez classique et
fonctionne presque comme dans le langage Pascal.
La commande error permet de stopper lexcution de la fonction tout en renvoyant un message derreur lutilisateur.
Les lignes suivantes montrent un exemple dutilisation de la structure if ...
else ... end.
La fonction prod permet de calculer le produit des lments du vecteur pass en
argument.
Une fois que le texte est tap dans la fentre, sauvez le fichier. Pour que S CILAB puisse
utiliser cette nouvelle fonction, vous devez tout dabord taper :
--> getf fact.sci
Une remarque importante : il est possible de dfinir plus dune fonction dans un seul
fichier. Dans ce cas, linstruction getf charge toutes les fonctions dfinies dans le fichier.
Lutilisation de la fonction fact peut se faire ensuite des deux faon suivantes :
--> fact(5)
ans =
120.
--> p = fact(7);

Chapter 4. Scripts et fonctions

31

Il est aussi possible de dfinir une fonction en ligne, cest dire directement partir de
la ligne de commande de S CILAB. Cela est pratique quand la fonction est trs courte
crire. Par exemple :
--> deff(c=plus(a,b),c=a+b);
-->plus(1,2)
ans

=
3.

4.3

Contrle dexcution

La structure if ... else ... end est un exemple de structure de contrle dexcution
utilisable dans un M-file. Les exemples dutilisation sont suffisants pour comprendre le
fonctionnement de cette structure, qui est classique.
La structure de contrle for ... end permet de faire des boucles. L encore, son
utilisation est similaire celle qui en est faite dans le langage Pascal. Sa syntaxe gnrale
est la suivante :
for v = expression
instructions
end
ou bien de faon plus compacte (mais moins lisible)
for v = expression, instructions, end
En gnral lexpression sera quelque-chose du type m:n ou m:p:n, comme dans
lexemple de la fonction fibo trait plus haut, mais si lexpression est une matrice,
la variable v se verra assigner successivement les colonnes de cette matrice; lexemple
suivant illustre ce principe :
--> A = [1 2 3;4 5 6];
--> for v = A, x = v.^2, end
x =
1
16
x =

Chapter 4. Scripts et fonctions

32

4
25
x =
9
36
La structure de contrle while ... end permet de faire des boucles quand le nombre ditrations nest pas connu priori. Voici par exemple une fonction faisant la division
euclidienne de deux entiers :
function [quotient,reste] = divEucl(p,q)
reste = p;
quotient = 0;
while reste >= q
reste = reste - q;
quotient = quotient + 1;
end
endfunction

4.4

Interaction avec lutilisateur

Il est possible, dans un script ou une fonction, de faire entrer interactivement des donnes
par lutilisateur. Par exemple, dans la fonction calculant les premiers termes de la suite de
Fibonacci, il serait intressant de rentrer interactivement la valeur de n. Cela peut se faire
laide de la fonction input. Voici comment modifier le script fibo.sce : il suffit
juste de remplacer la ligne
n = 10;
par la ligne
n = input(Nombre de termes desire ? );
Vous pouvez exprimenter le fonctionnement de cette fonction en tapant nouveau :
--> exec fibo.sce
On peut facilement gnrer un menu lorsque lon a besoin que lutilsateur fasse un choix
parmi un certain nombre doptions, avec la commande x_choose, qui sutilise de la
faon suivante :

Chapter 4. Scripts et fonctions

33

--> choix = x_choose([Saucisse Frites;Boeuf Carottes;...


Couscous],Ce midi)
Le menu qui apparat doit avoir laspect suivant :

Figure 4.3: Menu obtenu avec la commande x_choose


Le premier argument de x_choose est une matrice de chaines de caractres contenant
les textes associs aux diverses options. Le deuxime argument est le titre du menu apparaissant au dessus des boutons. Aprs un clic de souris sur lune des options, la fonction
renvoie le numro de loption choisie.

Chapter 5
Les graphiques
Ce chapitre donne un bref appercu des possibilits graphiques1 de S CILAB, qui sont assez
tendues : S CILAB est capable de gnrer des graphiques deux et trois dimensions,
dagir facilement sur les couleurs et les types de lignes utiliss, etc.

5.1

Les graphiques deux dimensions

5.1.1

La commande plot

La commande utilise pour gnrer un graphe en deux dimensions est la commande


plot. Voici un premier exemple dutilisation :
--> t = 0:%pi/4:2*%pi;
--> plot(t,sin(t))
La syntaxe est claire : plot(x,y) permet de tracer une courbe reliant les points dont les
coordonnes sont donnes dans les vecteurs x pour les abscisses et y pour les ordonnes.
Une premire remarque simpose : les points sont relis par des segments de droite, et plus
on prendra de points intermdiaires, plus le trac sera fidle, comme le montre lexemple
suivant :
--> t = 0:%pi/16:2*%pi;
--> plot(t,sin(t))
Ici on a trac le graphe dune fonction, mais on peut aussi tracer une courbe paramtrique
du type
x = f (t),
y = g(t),
1

Une partie des possibilits graphiques prsentes font appel la librairie dveloppe
par Stphane Mottelet, disponible lURL http://www.dma.utc.fr/
mottelet/myplot.html

Chapter 5. Les graphiques

35

pour t [a, b].


Par exemple pour une courbe de Lissajous :
--> t = 0:%pi/32:2*%pi;
--> plot(cos(t),sin(2*t))
Il est possible de superposer deux courbes sur le mme graphique :
--> plot(t,cos(t),t,sin(t),axis,equal)
Au passage, la paire axis,equal permet davoir un graphique avec la mme
chelle pour les deux axes.
Il est possible de changer les couleurs et les type de lignes utiliss par S CILAB : par
exemple si lon veut que la courbe du sinus soit en rouge et que celle du cosinus soit en
vert, il suffit de modifier la commande prcdente de cette faon
--> plot(t,cos(t),g,t,sin(t),r)
On peut aussi ne faire apparatre que les points et ne pas les relier par des segments de
droite. Dans ce cas on peut reprer chaque point par un symbole (point, rond, toile,
croix). Par exemple
--> plot(t,cos(t),g^-,t,sin(t),ro-)
Donc on peut modifier couleur et types de trac (ligne ou symbole) en faisant suivre
chaque couple x,y dune chane de caractres entoure dapostrophes (le mme caractre
que pour la transposition des matrices) compose de deux symboles prcisant la couleur
et le symbole.
Le tableau ci-dessous donne les symboles et les couleurs possibles :
Symbole
y
m
c
r
g
b
w
k

Couleur
jaune
magenta
cyan
rouge
vert
bleu
blanc
noir

Symbole
.
o
x
+
*
d
^
v

Il suffit de taper
--> help plot
pour en savoir plus.

Type de ligne
point
rond
croix
plus
toile
trait plein
diamant
triangle
triangle

Chapter 5. Les graphiques

1.0

0.6

36

cos(t)

sin(t)

0.2

-0.2

-0.6

-1.0
0

Figure 5.1: Rsultat de la commande plot

5.1.2

Titres et lgendes

On peut facilement ajouter des lgendes sur les axes et un titre une figure :
--> xlabel(Abscisse)
--> ylabel(Ordonnee)
--> title(Essai du graphique)
On peut mme ajouter une lgende permettant de prciser quoi correspond chaque
courbe :
--> legend(Cosinus,Sinus)
Il suffit de prciser les chanes de caractres dans le mme ordre que les couples abscissesordones dans la commande plot.

5.2
5.2.1

Les graphiques trois dimensions


Les courbes

Il est par exemple possible de tracer des courbes dans lespace avec la commande plot3,
par exemple une hlice :

Chapter 5. Les graphiques

37

--> clf()
--> t = 0:%pi/32:8*%pi;
--> plot3(cos(t),sin(t),t)
Notez au passage la commande clf() permettant deffacer la fentre graphique.

5.2.2

Les surfaces

S CILAB permet de gnrer trs facilement des graphiques trois dimensions, par exemple,
des graphes de fonctions de deux variables
z = f (x, y),
reprsents dans lespace, ou bien des graphes paramtriques
x = f (t, s),
y = g(t, s),
z = h(t, s),
pour (t, s) [a, b] [c, d].

Z
1

-1
-2

-1

0
X
2

Figure 5.2: Rsultat de la commande mesh


Voici un premier exemple permettant de tracer le graphe de la fonction
 q

f (x, y) = cos

x2

y2

Chapter 5. Les graphiques

38

sur le domaine de variation (x, y) [1, 1] [2, 2]. Comme pour les courbes en 2D il
faut choisir un pas dchantillonnage, ici en fait deux puisque le domaine [1, 1][2, 2]
est bidimensionnel. On va par exemple prendre 20 points dans la direction x et 40 points
dans la direction y :
--> x = linspace(-1,1,20);
--> y = linspace(-2,2,40);
Ces deux commandes nous ont permis dobtenir deux vecteurs (xi )i=1..20 et (yj )j=1..40 .
Maintenant, dfinissons en ligne la fonction tracer :
--> deff(z=maSurface(x,y),z=cos(%pi*sqrt(x.^2+y.^2)));
On peut ensuite tracer la surface obtenue avec la commande mesh :
--> mesh(x,y,maSurface)
La commande mesh dessine une espce de grillage en reliant les points voisins.
Pour imprimer ce graphique, il suffit de selectionner loption print dans le menu file
de la fentre graphique.
Il est possible davoir un autre type de visualisation de la surface : ici, la commande surf
donne chaque polygone une couleur proportionnelle la valeur moyenne de z.
--> surf(x,y,maSurface)
Il est possible dobtenir un rendu plus agrable laide dela commande suivante :
--> surf(x,y,maSurface,shading,flat)
La paire shading,flat permet de suprimer le contour des polygones.

5.3

Manipuler plusieurs graphiques

On peut aisment disposer de plusieurs fentres graphiques. La fentre qui a t cre


lors du premier appel la fonction plot, et dans laquelle ont t effectues toutes les
sorties graphiques, est la fentre numro 0. Si lon dsire crer une nouvelle fentre, de
manire par exemple avoir deux graphiques a lcran, il suffit de taper
--> fig(1)
Cette commande cre une deuxime fentre dont le numro est 2. Il est possible de crer
ainsi autant de fentres que lon dsire. Quand il y a plusieurs fentres, il suffit dactiver la
fentre ou lon dsire faire une sortie graphique avant de taper la commande qui produira
cette sortie, par exemple :

1
0.5
0
0.5
1
4

1
0.5
0
0.5
1
4

Figure 5.3: Rsultat obtenu avec la commande subplot


--> t = linspace(-%pi,%pi,32);
--> fig(0); plot(t,sin(t))
--> fig(1); plot(t,cos(t))
Une fentre peut aussi intgrer plusieurs graphes non superposs grce la commande
subplot, qui sutilise de la faon suivante :
-->
-->
-->
-->

subplot(2,1,1)
plot(t,cos(t))
subplot(2,1,2)
plot(t,sin(t))

La commande subplot(n,m,k) permet de subdiviser la fentre en n*m zones, n portions verticalement et m portions horizontalement. Ces zones sont numrotes de gauche
droite et de haut en bas. La valeur de k permet de spcifier dans quelle zone on dsire
faire un graphique.