Vous êtes sur la page 1sur 47

Introduction à Scilab

Préparé et présenté par

Dr. M. DIOP

1
Table des matières

1 Calcul Matriciel 8

1.1 Vecteurs et matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.1.1 Extraction des éléments d’un vecteur ou d’une matrice . . . . . . . 9

1.1.2 Matrices particulières . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.1.3 Opérations sur les matrices . . . . . . . . . . . . . . . . . . . . . . . 12

1.1.4 Systèmes linéaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2 La programmation sous Scilab 20

2.1 Fonctions mathématiques élémentaires . . . . . . . . . . . . . . . . . . . . 20

2.2 Script et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.3 Les instructions de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.3.1 La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.3.2 La boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.3.3 La commande if . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3 Les graphiques et la visualisation des données en Scilab 31

3.1 Graphes 2D et 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.1.1 Modification de l’apparence d’une courbe . . . . . . . . . . . . . . 33

3.1.2 Annotation de figure . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2 Autres types de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2
4 APPLICATION DES METHODES NUMERIQUES AVEC SCILAB 40

4.1 Problèmes aux limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.1.1 Exemples et motivation . . . . . . . . . . . . . . . . . . . . . . . . 41

4.1.2 Discrétisation ou maillage du domaine . . . . . . . . . . . . . . . . 44

4.1.3 Application de la méthode sur le modèle (M1 ) . . . . . . . . . . . . 44

4.2 Équation non linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.3 Interpolation polynomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.4 Intégration numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.5 Équation différentielle et système d’équation différentiel . . . . . . . . . . 46

4.6 Calculs symboliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

3
INTRODUCTION

Ce cours intermédiaire entre l’Analyse Numérique et l’Informatique propose une in-

troduction à Scilab et développe un ensemble de fonctionnalités spécifiques à certains

domaines des sciences.

Scilab est un logiciel, un outil et en même temps un langage. C’est un logiciel interactif

permettant d’effectuer des calculs numériques complexes particulièrement utiles dans le

domaine de l’ingénierie. Scilab contient plusieurs fonctions, de calcul ou de traitements

de données, d’affichage, de tracés de courbes, de résolution de systèmes et d’algorithmes

de calculs numériques. Les domaines d’application sont très variés comme le traitement

du signal ; l’optimisation ; le traitement d’image ; l’automatisme. . . . Scilab permet de tra-

vailler soit interactivement en passant des commandes directement au clavier (comme une

calculatrice) ; soit de réaliser des programmes (appelés scripts) ou de définir des fonctions.

Ce support ne constitue en aucun cas une documentation exhaustive du logiciel Scilab.

Toutefois, les principales notions sont présentées et invitent l’étudiant à chercher par lui-

même les informations complémentaires pour mener à bien ses projets.

Le logiciel est libre. On le télécharge à adresse suivante : http ://www.scilab.org/ pour

remplacer le logiciel payant MATLAB.

ENVIRONNEMENT DE SCILAB

• Pour lancer Scilab dans les environnements Windows ou MacOs, il suffit de cliquer sur

l’icône de l’application. La fenêtre de commande s’ouvre comme suit

4
où on distingue 4 fenêtres :

1 : C’est la zone du chargement du répertoire de travail et des fichiers.

2 : C’est la zone de commande (aussi appelé le terminal). Cette zone permet de taper les

commandes ou les expressions à évaluer à droite du prompt −− > puis taper < enter >

pour déclencher le processus d’évaluation.

3 : C’est la zone des variables, des tableaux. Cette zone permet de visualiser les variables

définies, leur type et la taille.

4 : C’est la zone de l’historique des commandes. Il est possible de faire glisser ces com-

mandes vers la fenêtre de commande.

• Scilab est un langage interprété, c’est à dire qu’il exécute directement (sans compilation)

les commandes qu’on entre dans la fenêtre de commandes.

Exemple

−− > 2+5

ans =

Le résultat est mis automatiquement dans une variable appelée ans (answer). Celle-ci peut

5
être utilisée pour le calcul suivant.

Il peut être utile d’enregistrer le résultat d’un calcul dans une variable autre que ans. On

le fait en mettant le nom de la variable à gauche d’un signe égal qui à droite a le résultat

du calcul :

Exemple

−− > a=2+5

a=

• Scilab gère les nombres entiers, réels, complexes, les chaı̂nes de caractères ainsi que les

tableaux de nombres de façon transparente.

• Taper directement dans la console a deux inconvénients : l’enregistrement n’est pas

possible, et si plusieurs lignes d’instructions ont été tapées, les modifications ne sont pas

aisées.

• Pour ouvrir l’éditeur à partir de la console, cliquez sur la première icone dans la barre

d’outils ou sur Applications>SciNotes dans la barre de menus. (ou dans la console edit).

L’éditeur s’ouvre avec un fichier par défaut qui s’intitule « sans titre 1 »

6
• Pour compiler le fichier on clique sur Exécuter dans la barre de menus, trois options

sont proposées :

a) fichier sans écho : le fichier est exécuté sans que le programme ne s’écrive dans la

console (en ayant enregistré le fichier au préalable).

b) fichier avec écho : réécrit le fichier dans la console et l’exécute.

c) jusqu’au curseur, avec écho : réécrit la sélection choisie avec la souris dans la console

et l’exécute.

• L’aide sur SciLab est caractérisé par la fonction ”help” qui va afficher l’aide général.

Pour avoir une aide spécifique, il faut renseigner à la fonction ”help” ce que nous voulons

chercher réellement.

Par exemple help (suivi d’un nom de fonction ) : se passe d’explication !

• Le logiciel Scilab est essentiellement basé sur le calcul matriciel numérique. Tous les

objets utilisés dans Scilab sont donc définis au travers de matrices ou vecteurs.

7
Chapitre 1

Calcul Matriciel

1.1 Vecteurs et matrices

Les composantes d’une même ligne sont séparées par un espace ou une virgule. Les

lignes sont séparées par un point virgule. La matrice est déterminée par des crochets,

c’est-à-dire []. Par exemple,

-->A = [1 2;3 4]

A =

1. 2.

3. 4.

Les composantes d’une matrice peuvent être des nombres réels, complexes ou d’un

autre type Scilab. Par exemple,

-->v=[0.7 sqrt(2) %pi %i]

v =

0.7 1.4142136 3.1415927 i

8
Afin d’alléger l’affichage, un point-virgule « ; » en fin de commande empêche le renvoie

du résultat dans la fenêtre (évidemment l’instruction est toujours exécutée).

En l’absence de point-virgule ( ;), il s’affichera à l’écran.

1.1.1 Extraction des éléments d’un vecteur ou d’une matrice

On accède à la composante i (élément i) d’un vecteur v en tapant :

−− > v(i)

Soit A une matrice, l’élément en troisième ligne et quatrième colonne s’obtient par :

» A(3,4)

Pour extraire la ligne i de A, on écrit :

−− > A(i, :)

et la colonne j de A est donnée par :

−− > A( :,j)

On peut aussi facilement extraire des sous matrices d’une matrice à l’aide de cette syntaxe

» B=A([1 3],[1 2])

Ici B sera la matrice formées des lignes 1 et 3 et des colonnes 1 et 2 de la matrice A.

Pour mettre sous forme d’un vecteur colonne les colonnes de A les unes après les autres,

on écrit :

−− > A( :)

Enfin, pour supprimer des lignes ou des colonnes d’une matrice, on les remplace par une

matrice vide. Par exemple, la commande suivante supprime la première ligne de A :

−− > A(1, :)=[]

On peut également obtenir un bloc d’éléments d’une matrice. Par exemple,

A([1 2], :) ou A(1 :2, :) fournit la matrice composée des 2 premières lignes de A

A( :, [2 3]) ou A( :, 2 :3) fournit la matrice composée des colonnes 2 et 3 de A

9
TP Soit  
 0 −8 6 6
 
 
A=  ∈ M4 (R)
−1 −8 7 −8

 
 
1 −14 11 1

1. créer la matrice A.

2. Tester les commandes suivantes, et les commenter.

A(2,3), A(2, :), A( :,3), A(2 :3, :),A(1 :2,3 :4), A([1,3],[2,4]),A( :,1)=[], A(2, :)=[], A=[A,[0 ;0]],A( :,4)=

[0 ;0], A=[A,[1 1 1 1]],A(3, :)= [1 1 1 1].

NB : Plusieurs commandes peuvent être écrites sur une ligne. Elles seront alors séparées

par ’ ;’ou par ’,’

Le symbole % dans une ligne a pour effet que le reste de la ligne ne sera pas exécuté (ceci

permet des commentaires dans un fichier d’exécution)

TP : Observez l’effet de : sur les exemples suivants :

−− > y=[1 :10]

−− > z=[1 :2 :7]

Remarque

C’est l’opérateur d’incrémentation sous Scilab. Par défaut l’incrément est de 1. :

1.1.2 Matrices particulières

Dans Scilab, il existe des fonctions qui permettent de générer automatiquement des

matrices particulières.

La fonction ones(m,n) construit une matrice de taille m × n dont toutes les composantes

sont égales à 1. Par exemple,

-->A=ones(3,5)

A =

1. 1. 1. 1. 1.

10
1. 1. 1. 1. 1.

1. 1. 1. 1. 1.

De façon similaire, on peut définir une matrice de composantes nulles avec zeros(m,n).

-->A=zeros(5,3)

A =

0. 0. 0.

0. 0. 0.

0. 0. 0.

0. 0. 0.

0. 0. 0.

La fonction eye(m,n) construit une matrice dont les éléments diagonaux sont égaux à

1, et le reste des composantes est nul.

-->A=eye(3,4)

A =

1. 0. 0. 0.

0. 1. 0. 0.

0. 0. 1. 0.

La commande linspace(a,b,n) permet de créer un vecteur avec de n éléments uni-

formément espacés, allant de a à b.

v=linspace(1,5,3)

v =

1. 3. 5.

11
Nous présentons dans la suite (TP) un ensemble de fonctions usuelles liées à l’utilisation

des matrices.

TP Soit la matrice A= [1 2 3 ;2 5 4 ;1 0 -1]

Tester les commandes suivantes, et en déduire le sens de chacune

max(A) , min(A) , rank(A) , det(A) , diag(A) , triu(A) tril (A), inv(A) et spec(A)

1.1.3 Opérations sur les matrices

Pour obtenir les dimensions d’un vecteur, on peut utiliser les fonctions size ou length.

Considérons les séquences suivantes :

-->p=[1 2 3 4]

p =

1. 2. 3. 4.

-->q=p’

q =

1.

2.

3.

4.

Maintenant pour

-->length(p)

ans =

12
4.

Scilab renvoie 4 et il renvoie aussi la même valeur que

-->length(q)

ans =

4.

De même,

-->size(p)

ans =

1. 4.

-->size(q)

ans =

4. 1.

0
p est la transposée de p. La fonction length peut aussi être utilisée pour les matrices.

Elle retourne le nombre d’éléments d’une matrice.

Les opérations usuelles entre matrices et entre matrices et vecteurs sont aussi possibles.

Par exemple, si A et B sont des matrices, on peut écrire

-->A=[1 2;3 4]

A =

1. 2.

3. 4.

13
-->B=[4 3;2 1]

B =

4. 3.

2. 1.

-->A+B

ans =

5. 5.

5. 5.

-->A-B

ans =

- 3. - 1.

1. 3.

-->A*B

ans =

8. 5.

20. 13.

0
La transposée d’une matrice est obtenue avec . Par exemple, C = AT s’obtient avec

-->C=A’

C =

14
1. 3.

2. 4.

Les produits terme à terme sont aussi définis. Soient A = (aij ) et

B = (bij ), deux matrices de même dimensions. Ainsi,

-->P=A.*B

P =

4. 6.

6. 4.

construit une matrice P = (pij ) ayant les mêmes dimensions et définie par

pij = aij bij .

De même

-->Q=A./B

Q =

0.25 0.6666667

1.5 4.

fournit la matrice Q = (qij ) définie par

qij = aij /bij .

TP Soit la matrice A= [1 2 3 ;2 5 4 ;1 0 -1]

Tester les commandes suivantes, et en déduire le sens de chacune

15
max(A) , min(A) , rank(A) , det(A) , diag(A) , triu(A) tril (A) et inv(A)

Description

- max(A) : renvoie un vecteur-ligne contenant les valeurs maximales associées à chaque

colonne.

- min(A) : renvoie un vecteur-ligne contenant les valeurs minimales associées à chaque

colonne.

- rank(A) : renvoie le rang de la matrice.

- det(A) : renvoie le déterminant de la matrice.

- diag(A) : extrait la diagonale de la matrice.

- triu(A) : extrait la matrice-triangle supérieure de M.

- tril : donne la matrice-triangle inférieure.

- inv(A) : renvoie l’inverse de la matrice.

TP Soient les matrice suivantes


     
 1 0 1   1 1 1   1 0 0 
     
     
A= 
 1 0 1 ,B
 = 
 0 0 0 ,C
 = 
 1 0 0 

     
     
1 0 1 0 0 0 1 1 1

1. Entrer ces données sous Scilab.

2. En utilisant uniquement les commandes ones et zeros donner les instructions qui per-

mettent de construire les matrices A, B et C.



5
4. Calculer A + B, A × B, A2 + 2
B.

5. déterminer les dimensions de la matrice A, en extraire la deuxième colonne de A et

l’élément a1,3 .

6. Calculer les déterminants et inverses de chacune des matrices.

NB Les dimensions des matrices intervenant dans les opérations doivent évidemment être

compatibles pour l’opération envisagée. Si tel n’est pas le cas, un message d’erreur sera

affiché par SCILAB.

16
1.1.4 Systèmes linéaires

L’algorithme d’élimination de Gauss est implémenté pour résoudre les systèmes linéaires.

Si la matrice A et le second membre du système Ax = b sont construits, on obtient la

solution en utilisant l’opérateur \, c’est-à-dire

-->A=[1 -1 2;7 -3 2;1 8 5]

A =

1. - 1. 2.

7. - 3. 2.

1. 8. 5.

-->b=[0; 2; -5]

b =

0.

2.

- 5.

-->x=A\b

x =

0.1833333

- 0.45

- 0.3166667

17
Il existe d’autres fonctions fonctions numériques pour résoudre les systèmes linéaires

algébriques. Par exemple, on peut remplacer dans le programme précédent l’instruction

x = A\b par

-->A1=inv(A)

A1 =

- 0.2583333 0.175 0.0333333

- 0.275 0.025 0.1

0.4916667 - 0.075 0.0333333

-->x=A1*b

x =

0.1833333

- 0.45

- 0.3166667

TP Résoudre le système suivant


x + 2y − z = 1







 −x + 3y − z = 0



−x + 2y − 5z = 0


TP Soit  
 0 1 1 
 
 
A= 
 1 0 1 

 
 
1 1 0

1. Calculer A2 et vérifier que A2 = A + 2I3 où I3 est la matrice identité d’ordre 3.

2. La matrice A est-elle inversible.

18
3. Si oui, Calculer son inverse A−1 .

TP On considère la matrice carrée d’ordre 3

 
 0 2 −1 
 
 
A= 
 −1 3 −1 

 
 
−1 2 0

1. Déterminer le spectre de A.

2. La matrice A est-elle inversible ? Si oui, Calculer A−1 .

3. a) En déduire la solutions du système linéaire suivant :


2y − z = 1







 −x + 3y − z = 0



−x + 2y = 0


Remarque

Les commandes effectuées jusqu’à maintenant ont créé des variables qui sont stockées

dans l’espace de travail de SCILAB. La commande

cd : indique le répertoire de travail courant

dir : indique ce que contient le répertoire de travail courant

who : indique la liste des variables dans le workspace

Pour en savoir plus, il faut exécuter la commande whos

La commande clear détruit toutes les variables de l’espace de travail.

clc : efface la console.

19
Chapitre 2

La programmation sous Scilab

2.1 Fonctions mathématiques élémentaires

Un certain nombre de fonctions mathématiques de base sont implémentées dans Sci-

lab. Parmi les fonctions fréquemment utilisées, on peut noter les suivantes :

−− > sin(x) : le sinus de x,

−− > cos(x) : le cosinus de x,

−− > tan(x) : le tangent de x,

−− > sinh : le sinus hyperbolique,

−− > cosh : le cosinus hyperbolique,

−− > tanh : le tangent hyperbolique,

−− > asin : l’arc sinus x,

−− > acos : l’arc cosinus,

−− > atan : l’arc tangent ,

−− > exp : exponentielle

−− > log : logarithme naturel,

−− > log10 : logarithme à base 10,

−− > sqrt : racine carrée

−− > abs : valeur absolue ou module complexe,

20
−− > conj : complexe conjugué,

−− > imag : partie imaginaire,

−− > real : partie réelle,

−− > norm : norme, vectorielle ou matricielle (diverses options...),

−− > sum : somme de tous les éléments d’un argument vectoriel,

2.2 Script et fonctions

Un script est un ensemble d’instruction rassemblées dans un fichier : c’est la routine

principale d’un programme. Scilab a son propre éditeur, mais n’importe quel éditeur de

text suffit.

Comme nous l’avons vu précédemment Scilab contient un grand nombre de fonction

prédéfinie, mais à coté de ses fonctions prédéfinies, Scilab offre à l’utilisateur la possibi-

lité de définir ses propres fonctions : La première méthode permet de définir des fonctions

simples sur une ligne de commande. La seconde, beaucoup plus générale permet de définir

des fonctions très évoluées en la définissant dans un fichier.

♠ Commande deff()

Lorsque le corps de la fonction se résume à une expression relativement simple, on peut

créer la fonction directement dans l’espace de travail courant, sans utiliser un m-file .

La syntaxe est simple :

deff(’y=f(x)’,’y=expression’)

Exemple définir f (x) = x2 + x + 1

−− > def f (0 y = f (x)0 ,0 y = x2 + x + 10 )

−− > f(2), f(-1), f(0),f(10)

Remarque

L’expression mathématique qui constitue le corps de la fonction ainsi que les variables

21
sont considérées par Scilab comme des chaines de caractères et doivent donc être tapées

entre apostrophes.

♠ Les fonctions

Pour définir une fonction en Scilab, la méthode la plus courante est de l’écrire dans un

fichier dont le nom comporte l’extension .sci, dans lequel on pourra d’ailleurs mettre plu-

sieurs fonctions. Chaque fonction doit commencer par l’instruction :

function[y1 , y2 , ...yn ] = nomfonction(arg1, arg2, · · · argn)

y1 =

y2 =

..
.

yn =

endfunction

où les variables arg1 , arg2 , · · · argn sont les variables d’entrées et ils ne doivent pas être

modifiées à l’intérieur de la fonction.

Les variables y1 , y2 , ...yn sont les arguments de sortie, la fonction doit affecter une valeur

pour y1 , y2 , ...yn .

Le rôle d’une fonction est d’effectuer des opération sur une ou plusieurs entrée pour ob-

tenir un résultat (appelé sortie).

Une fonction est appelé depuis un script (un programme principal) ou dans une fenêtre

commande en utilisant le nom du script comme commande :

» nom fonction( )

TP : définir une fonction avec function où f (x) = x2 +x+1 et calculer f(2), f(-1), f(0),f(10)

function[y] = lmi(x)

22
y = x.∧ 2 + x + 1

end

Pour exécuter le programme il suffit de taper dans la fenêtre de commande lmi(valeur).

TP Définir la fonction g avec function où g(x) = x3 + 6x2 + x + 1

2.3 Les instructions de contrôle

Les instructions de contrôle sont à la base de tout calcul numérique. En Scilab, les

boucles for et while sont très utilisées pour les processus itératifs. Leur utilisations est le

premier pas dans la programmation. Il est donc indispensable de les bien comprendre.

2.3.1 La boucle for

La boucle for / end répète une instruction un certain nombre de fois. Sa forme

générique est :

for i = 1 : n

instruction 1

instruction 2

instruction k

end

On suppose bien sûr que n ≥ 1. Une autre utilisation est la syntaxe

for i = 1 : 2 : n

instruction 1

23
instruction 2

instruction k

end

Ici 2 est la valeur du pas. Ainsi les valeurs correspondantes de i sont 1, 3, 5, 7 et 9. Par

exemple, on veut construire une matrice 5 × 5 contenant 1 sur la diagonale et 2 sur la

diagonale supérieure, tandis que les autres valeurs sont nulles.

-->A=zeros(5,5);

-->for i=1:5

-->A(i,i)=1;

-->end

-->for i=1:4

-->A(i,i+1)=2;

-->end

-->disp(A)

1. 2. 0. 0. 0.

0. 1. 2. 0. 0.

0. 0. 1. 2. 0.

0. 0. 0. 1. 2.

0. 0. 0. 0. 1.

24
for est associée à une variable, et exécute un processus plusieurs fois en prenant à chaque

fois une nouvelle valeur pour cette variable.

Exemple Soit A=[1 1 2 3] utilise la boucle for pour soustraire à tous les éléments (sauf

le premier) de ce vecteur A la première valeur (i.e. A(1))

on écrit

−− > for i = 2 : 4

A(i)=A(i)-A(1)

end

TP Calculer
100
i2
X
S=
i=1

−− > S=0

−− > for i=1 :100

−− > S = S + i2

−− > end

2.3.2 La boucle while

La boucle while / end répète une instruction jusqu’à ce qu’une condition, ou un groupe

de conditions soit vérifié. Elle se met sous la forme

while condition

instruction

end

Par exemple, on va générer la matrice A précédente avec la boucle while

-->A=eye(5,5);

25
-->i=1;

-->while i<5

--> A(i,i+1) = 2;

--> i = i + 1;

-->end

-->disp(A)

1. 2. 0. 0. 0.

0. 1. 2. 0. 0.

0. 0. 1. 2. 0.

0. 0. 0. 1. 2.

0. 0. 0. 0. 1.

TP Calculer
100
i2
X
S=
i=1

en utilisant la boucle while.

» S=0

» i=1

» while i <=100

» S = S + i2 ;

»i=i+1

» end

26
TP Soient la matrice et les vecteurs colonnes suivants
     
 1 2 2   1   5 
     
     
A= 
 1 −1 ,b =
1  
  , u0 =
0  
 2 

     
     
5 1 −2 5 −4

et on définit, pour n ≥ 1 la suite de vecteurs un+1 = Aun + b

1. Construire une fonction suite.sci calculant les premiers termes de la suite un . Cette

fonction aura comme arguments d’entrée les données suivantes : la matrice A, le second

membre b, le terme initial u0 , et le nombre de termes nbt voulus (prenez nbt=100).

2. Représenter graphiquement l’évolution de chacune des composantes.

2.3.3 La commande if

Les instructions conditionnés, enfin, permettent d’ effectuer une action si une certaine

condition est satisfaite. La plus simple est if, qui exécute des commandes seulement si

une condition est remplie (par exemple un test préalable renvoie la valeur VRAI). Dans

sa version la plus complète la structure if permet aussi de prévoir ce que l’on fait si la

condition n’est pas remplie (par exemple le test renvoie la valeur FAUX).

La forme générale de la commande if est

if condition 1

expression 1

else if condition 2

expression 2

else

expression 3

end

La forme la plus simple est la structure if / end. Par exemple,

27
-->A=zeros(5,5);

-->for i=1:5

-->for j=1:5

-->if j==i+1 then

--> A(i,j) = 2;

-->elseif j==i

--> A(i,j) = 1;

-->end

-->end

-->end

-->disp(A)

1. 2. 0. 0. 0.

0. 1. 2. 0. 0.

0. 0. 1. 2. 0.

0. 0. 0. 1. 2.

0. 0. 0. 0. 1.

D’autres instructions de contrôle telles que switch, break, continue, et error sont dispo-

nibles. Vous pourrez consulter la documentation avec la commande help suivi du nom de

la commande.

Opérateurs de comparaison Opérateurs logiques

== égal

< inférieur à

>supérieur à

<= inférieur ou égal à

28
>= supérieur ou égal à

∼= différent de (non égal)

| ou

∼ non

TP

Faire un programme sous Scilab qui trouve les racines d’une équation de second degré

ax2 + bx + c=0

Tester le code en prenant a=1 , b=-3 et c=2

TP

Faire un programme sous Scilab qui résout le système suivant :


x six < 0







1. y =  x2 six > 0




 10 six = 0


x six < 0



2. y=
x2 six ≥ 0


TP

Construction d’une fonction de demande de la forme :



0 si p ≤ 2







D(p). y= 1 − 0.5p si 2 < p ≤ 3




2p−2


 sinon

TP Soit 
Xn+1 = AXn + b





 X0 donné

29
   
 1 2 −1   1 
   
   
Avec A = 
 −1 3 −1 
 et b= 
 1 

   
   
−1 2 0 1
 
 1 
 
 
Calculer X1 , X2 , X3 , X4 , X5 , X6 , X7 . Prenez X0 = 
 0 

 
 
1
• Nous pouvons calculer le temps CPU d’exécution d’un programme. Il suffit de faire

l’instruction tic au début du script et ensuite de faire toc en fin du script pour avoir le

temps d’ exécution du programme.

30
Chapitre 3

Les graphiques et la visualisation des

données en Scilab

Dans cette partie, nous allons présenter les principes de base indispensable pour des-

siner des courbes sous Scilab. Les graphiques, crées peuvent être visualiser en TP.

3.1 Graphes 2D et 3D

La commande de base utilisée est la commande plot. Dans sa syntaxe la plus simple,

elle prend deux vecteurs x et y de même dimension en entrée et retourne un graphique

où sont reliés continûment les points (xi ; yi ).

• plot(x, y) trace le graphe de y en fonction x.

Exemple : Pour obtenir le graphe de la fonction sin(x) sur l’intervalle [0, 2π], nous com-

mençons par définir deux vecteurs :

−− > x = [0 : .5 : 2π] ;

−− > y=sin(x) ;

ensuite nous construisons le graphe au moyen de la commande :

−− > plot(x,y)

Remarque

31
Si une figure existe déjà, elle trace le graphe sur cette figure sinon SCILAB crée automa-

tiquement une nouvelle fenêtre.

Pour créer une autre figure, utiliser la fonction Figure.

Exemple :

−− > figure(1) ;

−− > x=[0 : .1 : 2π] ;

−− > f=cos(x) ;

−− > plot(x,f)

−− > figure(2) ;

−− > g=sin(x) ;

−− > plot(x,g)

Ces deux séquences construisent deux fenêtres, la première contenant le graphe de cos(x),

la seconde le graphe de sin(x).

TP :

−− > x=[0 : .1 : 2 ∗ π] ;

−− > f=cos(x) ;

−− > g=sin(x) ;

−− > plot(x,f)

−− > plot(x,g)

Les deux graphes, celui de cos(x) et celui de sin(x), apparaissent dans la même fenêtre et

dans le même système d’axes.

Remarque : Scilab définit automatiquement un système d’axes.

On peut également utiliser plot avec plusieurs couple (x,y).

−− > x=[0 : .1 : 2 ∗ π]

−− > plot(x,f,x,g)

Le tracé d’une courbe paramétrique dans l’espace se base sur :

param3d

32
Exemple

−− > t=-3*pi :pi/10 :3*pi ;

−− > x = 4*sin(t) ;

−− > y =4*cos(t) ;

−− > z =2*t ;

−− > param3d3(x,y,z)

Exemple

−− > t = linspace(0,10*pi,500) ; −− > x = cos(t) ;

−− >y = sin(t) ;

−− > plot3(x,y,t)

−− > title(’Helice’)

On a différents plot :

plotframe rectangle de représentation

plot2d plusieurs courbes avec styles différents

plot2d1 idem, avec plus d’options

plot2d2 représentation en escalier

plot2d3 barres verticales

plot2d4 flèches

fplot2d représenter des fonctions

3.1.1 Modification de l’apparence d’une courbe

Lorsque plusieurs tracés ont lieu dans la même fenêtre, il peut être intéressant d’utiliser

un style différent pour distinguer les différents tracés. Pour cela on ajoute un troisième

argument à la définition de chaque tracé de type chaı̂ne de caractère à la fonction plot

comme suit :

P lot(x, y,0 marqueur0 )

Le marqueur est un caractères pris dans le tableau ci-dessous :

33
couleurs symboles Tracés continus

y jaune . point - trait continu

m magenta ◦ cercle : pointillés

c cyan × croix -. trait-point

r rouge + plus – trait-trait

g vert * étoiles

b bleu d diamants

Exemple

−− > x = [0 :0.1 :2*pi ] ;

−− > y = cos (x) ;

−− > plot (x,y,’*’)

Exemple

−− > x=[0 :0.1 :2*pi] ;

−− > f=cos(x) ;

−− > g=sin(x) ;

−− > plot(x,f,’o’,x,g,’*’)

Exemple

−− > x = [0 :0.1 :2*pi ] ;

−− > y1 = cos (x) ;

−− > y2 = cos (2* x) ;

−− > y3 = cos (4* x) ;

−− > y4 = cos (6* x) ;

−− > plot (x,y1,’y’ ) ;

−− > plot (x,y2 ,’r’) ;

−− > plot (x,y3 ,’k :’) ;

−− > plot (x,y4 ,’g–’) ;

34
3.1.2 Annotation de figure

Les différentes fonctions suivantes permettent de gérer les labels des axes et commen-

taires sur les figures, ainsi que diverses fonctions pour manipuler les graphiques.

Pour donner un titre à une figure, on utilise la fonction title comme suit :

−− > title(’titre de la figure’)



Pour donner un titre pour l’axe des ordonnées, on utilise la fonction ylabel comme

suit :

−− > ylabel(’axe des ordonnées’)



Pour donner un titre pour l’axe des ordonnées, on utilise la fonction xlabel comme

suit :

−− > xlabel(’axe des abscisses’)



Pour faire un quadrillage on utilise la fonction xgrid comme suit :

−− > xgrid

La légende (surtout en cas de plusieurs graphes) peut être affichée en utilisant la com-

mande legend(legend1, legend2, ... ).

Exemple de programmation

TP :

−− > x = -pi : 0.1 : pi ;

−− > y = sin(x) ;

−− > plot(X,Y)

−− > xgrid

−− > xlabel (’angle’)

−− > ylabel (’sin(x)’)

−− > title (’y = f(x)’)

−− > legend (’y1=sin (x)’) ;

Exercice

Soit un vecteur x contenant des valeurs comprises entre 0 et 10 avec un pas de 0.05. 1.

35
Ecrire le fichier (f.sci) qui crée la fonction f (x) = x exp(−x2 ) − 0.2/x3

2. Ecrire (prog.sci) qui trace le graphe de f (x), Ajouter le libellé des axes (titres) et don-

ner un titre à la figure avec des grilles.

3. Mettre la courbe de f (x) en ligne pointillée courte rouge

Exercice

Soit un vecteur x contenant des valeurs comprises entre −6π et 6π avec un pas de 0.001.

Soit deux fonctions f et g définie par : f (x) = sin( π4 x) et g(x) = cos( π4 x).

Écrire un script Scilab représentant f et g en fonction de x sur le même graphe.

(Veillez à ce que ce graphe ait un titre, des noms aux axes, une légende).

Il est possible de décomposer une fenêtre en sous-fenêtres et d’afficher une figure différente

sur chacune de ces sous-fenêtres grâce à la commande subplot comme suit :

−− > Subplot(m,n,p) : Découpe la fenêtre graphique en m lignes et n colonnes et trace

la courbe dans la case numéro p.

TP :

1. Soit un vecteur x contenant des valeurs comprises entre 0 et 2π avec un pas de 0.1.

Soit les fonctions

f1 (x) = cos(x), f2 (x) = cos(2x), f3 (x) = cos(4x) et f4 (x) = cos(6x).

Écrire un script Scilab représentant f1 , f2 , f3 et f4 ,en fonction de x sur le même graphe.

2. Utiliser la fonction subplot pour tracer ces courbes dans la même fenêtre (Veillez à ce

que chaque graphe ait un titre, des noms aux axes, une légende).

TP :

Les équations paramétriques d’une ellipse centrée à l’origine sont :


x(t) = A cos(t)



avec 0 ≤ t ≤ 2π


 y(t) = B sin(t)

1 Tracer ces équations dans le plan pour A = 2 et B = 1.

2 Ajouter un titre et des labels.

36
TP :

Soit un signal créneau f(t) d’amplitude A, de période T et de valeur moyenne nulle. Sa

décomposition en série de Fourier est donnée par :

+∞
X
f (t) = an cos(nwt)
n=1

Avec an = 2A

sin(n π2 ) et w = 2π
T

Représenter le signal f(t) à partir de sa décomposition en série de Fourier pour différentes

valeurs de n.

A.N : On prendra A = 2 et T = 0.5. Échelle temporelle : 0 ≤ t ≤ 2 avec un pas de 0.001.

•Surfaces : le tracé d’une surface dans l’espace se base sur : la fonction mesh(X,Y,Z) ou

surf(X,Y,Z)

Exemple : Représentation de la surface d’une parabole de type : z = x2 + y 2 .

−− > x = -10 :0.8 :10 ;

−− > y = x ;

−− > [X, Y ]=meshgrid(x,y) ( Création de deux matrices X et Y qui définissent le

domaine de calcul de Z).

−− > Z = X.2 + Y.2 ; ( Calcul de Z).

−− > mesh(X,Y,Z) (Représentation en  fil de fer  de la surface d’équation Z).

−− > surf(X,Y,Z) ( donne une représentation où les mailles sont colorées).

Exemple :

−− > x = [- pi :0.2 : pi ] ;

−− > y = [- pi :0.2 : pi ] ;

−− > [X,Y] = meshgrid (x,y) ;

−− > Z = cos (X ).* sin(Y) ;

−− > surf (X,Y,Z).

37
3.2 Autres types de graphes

Scilab ne permet pas uniquement l’affichage des point pour tracer des courbes, mais

il offre aussi la possibilité de tracer des diagrammes en bâton et des histogrammes.

Les calculs statistiques de base peuvent être effectués avec Scilab. Pour des calculs plus

complexes, il existe une librairie spécialisée : la Statistics Toolbox.

Exemple Traitement statistique

Application

Pour des véhicules légers on a relevé les consommations moyenne de carburant en fonction

des vitesses présentée dans le tableau ci-après.

Vitesse (km/h) 10 20 30 40 50 60 70 80 90

Consommation (l/100 km) 16.5 11.5 9 7.5 6.8 6.6 7 7.5 9

1. Représenter graphiquement le nuage de points.

2. Calculer les moyennes arithmétiques, les variances, les écart type, la covariance de x y

et le coefficient de corrélation de cette série.

3. Faites une représentation par un diagramme à bâton.



Pour représenter graphiquement le nuage de points on utilise la fonction plot comme

suit :

−− > plot(X,Y)

Pour la moyenne on utilise la fonction mean comme suit :

−− > mean (X)



Pour la variance on utilise la fonction var comme suit :

−− > var(X,1) ; var(Y,1)



Le calcul de l’écart type peut se faire la variance comme suit :

−− > Ecart type=sqrt(variance de X)



Pour tracer un graphe à bâton nous utilisons la fonction bar qui a le même principe

de fonctionnement que plot

Il est possible de modifier l’apparence des bâtons

38
• La fonction barh dessine les bâtons horizontalement et Parmi les fonction de dessin, on

peut trouver : histplot, hist3d pie, polarplot, stem... etc.

TP Tester ces commande sur l’application.

39
Chapitre 4

APPLICATION DES METHODES

NUMERIQUES AVEC SCILAB

Quand un problème physique, mathématique, chimique, économique . . . etc, devient

complexe, on a recours à la notion de modèle mathématiques (ou Algorithmes). Nous

allons voir dans ce qui suit, comment utiliser Scilab comme un véritable langage de pro-

grammation.

Avant de programmer il faut :

1) analyser le problème : analyser et établir le contexte.

2) définir le problème : développement mathématique.

3) établir le système de traitement : qu’a-t-on entré et que veut-on en sortie.

4) créer l’algorithme de calcul : que va-t-on vouloir faire étape par étape

5) coder l’algorithme en langage Scilab ou Matlab

6) évaluer chaque étape : lancer le programme à chaque étape et voir la cohérence des

résultats.

40
4.1 Problèmes aux limites

4.1.1 Exemples et motivation

Nous citons quelques modèles mathématiques traduisant des phénomènes physiques

et mécaniques.

Déformation d’un fil élastique

Soit le modèle M1 suivant trouver u : Ω =]a, b[→ R :

− u00 (x) + c(x)u(x) = f (x), ∀x ∈]a, b[ (4.1)

u(a) = ga , (4.2)

u(b) = gb (4.3)

(4.4)

Où c(x) ∈ L∞ (]a, b[) un coefficient qui dépend des propriétés du matériau (module de

Young, de l’inertie et du poids) et f ∈ L2 (]a, b[) représente la charge extérieure. Ce

problème modélise la déformation u d’un fil élastique de longueur b − a avec (a < b) fixé

(ga = gb = 0) à ses extrémités x = a et x = b. 6.1 est l’équation de conservation et 6.2

représente les conditions aux limites.

Diffusion de la chaleur

Soit le modèle (M2 ) suivant trouver T :]a, b[×R∗+ → R tel que :

∂T (x, t) ∂ 2 T (x, t)
−α = f (x, t), ∀x ∈]a, b[ , ∀t > 0 (4.5)
∂t ∂x2
T (x, 0) = T0 (x), ∀x ∈]a, b[, (4.6)

T (a, t) = Ta (t), ∀t > 0, (4.7)

T (b, t) = Tb (t), ∀t > 0 (4.8)

41
Où T est la température de la barre métallique de longueur l([a, b]) = b − a, α > 0 le

coefficient de diffusion thermique de la barre. Ce problème modélise la diffusion de la

chaleur le long d’une barre métallique [a, b].

Déformation d’une poutre encastrée

Soit le modèle (M3 ) suivant trouver u :]a, b[→ R :

u(4) (x) + b(x)u(x) = f (x), ∀x ∈]0, l[ (4.9)

u(a) = u(b) = 0, (4.10)

u0 (a) = u0 (b) = 0 (4.11)

Es
Où b(x) = Ep Ip (x)
, Es module de réaction du sol, Ep le module d’élasticité du pieu, Ip (x)

l’inertie du pieu, f ∈ L2 (]a, b[) et 0 < b ∈ L∞ (]a, b[). Ce problème modélise la déformation

u d’une poutre encastrée de longueur b − a.

Tous ces problèmes sont des appelés ”problèmes aux limites” et leur résolution analytique

est très complexe et généralement impossible. Nous allons dans ce chapitre proposer une

méthode d’approximation à savoir la méthode des différences finies pour trouver la solution

approchée des ces types de problèmes.

La méthode est basée sur l’approximation des dérivées par leur quotient différentiel. En

effet soit u une fonction dérivable au point x on a alors

u(x + h) − u(x)
u0 (x) = lim
h→0 h

u(x+h)−u(x)
. Pour h ≪ 0 on pose u0 (x) approximativement égale à son quotient différentiel h

i.e
u(x + h) − u(x)
u0 (x) '
h

42
pour h ”très petit” (h ≪ 0). On utilise le développement limité de u autour de x à l’ordre

2. on a alors
h2 (2)
u(x + h) = u(x) + hu0 (x) + u (η)
2!

avec x < η < x + h, on obtient alors

u(x + h) − u(x) h
− u0 (x) = u(2) (η) → 0
h 2!

lorsque h → 0. Ce qui entraine l’approximation suivante

u(x + h) − u(x)
u0 (x) '
h

pour h ”très petit”.

•Approximation de la dérivée première Avec le même principe on obtient les ap-

proximations suivantes de la dérivée première :

le quotient différentiel progressif

u(x + h) − u(x)
u0 (x) '
h

, le quotient différentiel rétrograde

u(x) − u(x − h)
u0 (x) '
h

et le quotient différentiel centré

u(x + h) − u(x − h)
u0 (x) '
2h

pour h ”très petit” (h ≪ 0).

Approximation de la dérivée seconde

Avec la même idée développée précédemment on a l’approximation de la dérivée seconde

43
par :
u(x + h) − 2u(x) + u(x − h)
u00 (x) '
h2

pour h ”très petit” (h ≪ 0).

Approximation de la dérivée quatrième

Avec la même idée développée précédemment on a l’approximation de la dérivée quatrième

par :
u(x − 2h) − 4u(x − h) + 6u(x) − 4u(x + h) + u(x + 2h)
u(4) (x) '
h4

pour h ”très petit” (h ≪ 0).

4.1.2 Discrétisation ou maillage du domaine


b−a
On subdivise l’intervalle [a, b] en N + 1 intervalles de longueur h = N +1
, appelé pas

de la discrétisation où du maillage. On pose xi = a + ih pour tout i ∈ {0, 1, 2 . . . N + 1}

les points du maillage avec x0 = a et xN +1 = b.

4.1.3 Application de la méthode sur le modèle (M1 )

Pour chaque point intérieur xi avec i ∈ {1, 2, . . . N }. On applique l’approximation

suivante :
u(xi + h) − 2u(xi ) + u(xi − h)
u00 (xi ) ' ;
h2

On pose ui la valeur approchée de u au point xi . On a alors

ui+1 − 2ui + ui−1


u00 (xi ) ' .
h2

L’équation (6.1) devient


ui+1 − 2ui + ui−1
− + ci u i = f i
h2

avec fi la valeur approchée de f au point xi . Les conditions aux bords sont discrétisées

par : u(a) = u0 = ga et u(b) = uN +1 = gb . On a le schéma à trois points suivant :

44
ui+1 − 2ui + ui−1
− + ci ui = fi , ∀i ∈ {1, 2, . . . N } (4.12)
h2
u0 = ga (4.13)

uN +1 = gb , (4.14)

approchant le modèle (M1 ). On dit usuellement qu’on a discrétisé le problème par une

méthode de différences finies utilisant le ”schéma à trois points” de la dérivée seconde.

Matriciellement, Le schéma s’écrit : Ah Uh = Fh où les coefficients de Ah sont définis par :


2
aii = + ci , ∀i ∈ {1, 2, . . . N }


h2





−1
 aij = h2
, ∀(i, j) ∈ ({1, 2, . . . N })2 et |i − j| = 1 ,





 aij = 0, ailleurs

 
 u1 
 
 

 u2 

 
 

 . 

Uh = 




 . 

 
 

 . 

 
 
uN

et  
ga
 f1 + h2 
 
 

 f2 

 
 

 . 

Fh = 

.


 . 

 
 

 . 

 
 
gb
fN + h2

45
Pour déterminer la solution discrète Uh , il suffit donc de résoudre le système d’équation

linéaire Ah Uh = Fh .

Résolution numérique d’un problème pratique soit le problème (P ) suivant

1
− u00 (x) + u(x) = p, ∀x ∈]0, 1[ (4.15)
EI
u(a) = 0, (4.16)

u(b) = 0 (4.17)

(4.18)

qui traduit la déformation d’une poutre en flexion fixée à ses extrémités, où le module de

young E = 40 l’inertie I = 10 et le poids p = 20.

on va résoudre le système Ah Uh = Fh .

4.2 Équation non linéaire

4.3 Interpolation polynomiale

4.4 Intégration numérique

4.5 Équation différentielle et système d’équation différentiel

4.6 Calculs symboliques

Dans cette partie, nous allons réaliser sous Scilab, des calculs symboliques ( opération

sur les polynômes, recherche des racines, dérivation, intégration, résolution d’équations

non linéaire ou un système d’équations,... ) afin d’obtenir des expressions mathématiques

46
comme résultat. N’ayant pas été abordée au cours théorique, la collection de fonctions

Scilab permettant la réalisation de ces types de calcul se trouve dans la boite à outil

Symbolic Math Toolbox.

47

Vous aimerez peut-être aussi