Académique Documents
Professionnel Documents
Culture Documents
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
21
21
24
Scripts et fonctions
4.1 Les scripts . . . . . . . . . .
4.2 Les fonctions . . . . . . . .
4.3 Contrle dexcution . . . .
4.4 Interaction avec lutilisateur
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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 -->.
1.1
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]
=
1.
4.
7.
2.
5.
8.
3. !
6. !
9. !
1.2
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 !
1.3
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
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;
1.4
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
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
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
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
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
^
/
\
*
+
-
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
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
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
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
3;
6;
0]
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.
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
--> 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. !
! - 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
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.
2.5
18
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. !
0.25
0.4
0.5 !
1.
32.
729. !
--> x .^ 2
ans =
!
1.
4.
9. !
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]
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
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
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
22
x =
!
1.
2.
3.
4.
5. !
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
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
2.4
2.6
2.8
3.
0.0612766
0.0382881
0.0203707
0.0070260
!
!
!
!
23
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 !
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]
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. !
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.
!
!
!
!
1.
0.
7.
10.
0.
1.
8.
11.
3.
6.
10.
12.
!
!
!
!
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
28
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
30
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 =
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
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 :
33
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
5.1.1
La commande plot
Une partie des possibilits graphiques prsentes font appel la librairie dveloppe
par Stphane Mottelet, disponible lURL http://www.dma.utc.fr/
mottelet/myplot.html
35
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
1.0
0.6
36
cos(t)
sin(t)
0.2
-0.2
-0.6
-1.0
0
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
Il est par exemple possible de tracer des courbes dans lespace avec la commande plot3,
par exemple une hlice :
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
f (x, y) = cos
x2
y2
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
1
0.5
0
0.5
1
4
1
0.5
0
0.5
1
4
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.