Vous êtes sur la page 1sur 28

1.

Prise en main de SCILAB

Scilab est un logiciel de calcul développé par INRIA. Il est entièrement libre et gratuit. Il
est téléchargeable à l’adresse suivante :
http://www.scilab.org/download/index_download.php?page=release.html

Le logiciel Scilab permet de faire des calculs simples, des calculs matriciels, résoudre des
systèmes linéaires, simuler des équations et systèmes d’équations différentielles, etc.
C’est un logiciel de calcul approché contrairement à Maple qui est un logiciel de calcul
formel.
1.1. La ligne de commande

La ligne de commande est l’interface de travail par défaut : on tape une commande et le
calcul est fait. Le résultat est affiché si la ligne ne finit pas par « ; » sinon il est effectué
sans affichage. On peut retrouver les commandes déjà tapées en utilisant les touches
« flèches » du clavier.

--> 2+5 // un exemple de calcul


ans =
7.
--> 2+5; // un exemple de calcul avec;

--> %pi/3 // constante pi sur 3


ans =
1.0471976
--> exp(0) // fonction exponentielle
ans =
1.

2
Initialisation au logiciel Scilab
Pour indiquer que les exécutions sont suspendues, les invites de commandes ––> sont
rapprochées. Lorsque le flux d’exécution est suspendu (i.e. lorsqu’on se trouve dans une
boucle « for » ou un « if »), alors rien ne se passe jusqu’à ce que l’on entre le mot clé end

--> somme =0;

--> for i=1:100

> somme =somme+i;

> end

Remarquez la manière dont les invites de commandes ––> sont rapprochées lorsque l’on
tape la touche entrée du clavier avant le « end ».

--> chdir % documents ou cd permet d’aller au dossier « documents »

--> ls % ou dir permet d’afficher le contenu du répertoire actif.

La commande ls peut être aussi utilisée avec des options. Par exemple ls *.txt

affiche tous les fichiers ayant l’extention txt.

-->mkdir Cours\TD créer en une seule fois un sous répertoire TD dans un répertoire

Cours.

--> rmdir Cours\TD supprimer le répertoire TD dans le répertoire Cours

-->pwd affiche le répertoire courant de Scilab.

--> who affiche la liste de toutes les variables utilisées dans la session Scilab.

-->gethistory() retourne l’historique des commandes utilisées dans les sessions

antérieures.

3
-->savehistory(‘E:\Cours\histScila’) sauve l’historique dans un fichier qu’on nomme

histScila dans le répertoire E:\Cours. Le fichier histScila est lisible par un simple éditeur

de texte.

-->resethistory() efface l’historique

-->clc effacer toutes les commandes dans la fenêtre Scilab

-->clear efface le contenu en mémoire de toutes les variables sauf celles protégées. Elle

peut être utilisée pour effacer une seule variable qu’on nomme A par exemple : clear A

-->exit quitter la session Scilab

1.2. L’éditeur

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 enchaîner plusieurs instructions, l’éditeur est l’outil approprié.

1. Ouvrir l’éditeur
Pour ouvrir l’éditeur à partir de la console, cliquez sur la première icône dans la
barre d’outils ou sur Applications > SciNotes dans la barre de menus. L’éditeur
s’ouvre avec un fichier par défaut qui s’intitule « Sans titre 1 ».

2. Ecrire son programme


On tape du texte dans l’éditeur comme dans n’importe quel traitement de texte.
Dans l’éditeur de texte, l’apparition des parenthèses, ouvrantes et fermantes, et des
commandes de fin de boucle, de fonction et de test est automatique. On peut
cependant désactiver ces deux fonctionnalités dans le menu Options > Complétion
automatique.

En principe, il faut aller à la ligne après chaque instruction, mais il est possible de
taper plusieurs instructions sur une même ligne en les séparant par un point-virgule
« ; ». Un décalage de début de ligne appelé indentation se fait automatiquement
lorsqu’on commence une boucle ou un test.

4
Initialisation au logiciel Scilab
3. Enregistrement
Il est possible d’enregistrer tout fichier en cliquant sur Fichier > Enregistrer
sous. L’extension « .sce » à la fin du nom de fichier déclenchera automatiquement
le lancement de

Scilab à l’ouverture du fichier (excepté sous Linux et Mac OS X).

4. Exécuter
En cliquant sur Exécuter dans la barre de menus, trois options sont proposées :

1 Exécuter « ...fichier sans écho » (Ctrl Maj E sous Windows et Linux, Cmd
Maj E sous Mac OS X) : le fichier est exécuté sans que le programme ne
s’écrive dans la console (en ayant enregistré le fichier au préalable).

2 Exécuter « ...fichier avec écho » (Ctrl L sous Windows et Linux, Cmd L


sous Mac OS X) : réécrit le fichier dans la console et l’exécute.

3 Exécuter « ...jusqu’au curseur, avec écho » (Ctrl E sous Windows et


Linux, Cmd E sous Mac OS X) : réécrit la sélection choisie avec la souris
dans la console et l’exécute ou exécute les données du fichier jusqu’à la
position du curseur définie par l’utilisateur).

1.1. L’aide en ligne de Scilab


Pour accéder sur l’aide en ligne de Scilab, il suffit de taper la commande help. Pour
obtenir de l’aide sur une fonction donnée, on utilise la commande help suivie du nom
de la fonction.
-->help exp

5
2. La programmation
2.1. Les fonctions
2.1.1. Les fonctions prédéfinies sur Scilab

Exemple 1 : la fonction disp


--> disp("Ibrahima Mbaye est un bon étudiant")
Ibrahima Mbaye est un bon étudiant

Pour mélanger des mots et des valeurs, utilisez la commande string qui
transforme les valeurs en caractères, et « + » entre les différentes parties :
--> a=17;

--> disp("Ibrahima Mbaye a une moyenne de


"+string(a)+" au semestre 1")

Ibrahima Mbaye a une moyenne de 17 au semestre 1

Si la phrase contient une apostrophe, il est nécessaire de la doubler dans la chaîne


de caractères pour qu’elle s’affiche correctement :

6
Initialisation au logiciel Scilab
--> disp("c''est ok")

c'est ok

Exemple 2 : les fonctions expo, log sin …

--> log(1)
ans =
0.
--> exp(0)
ans =
1.
--> cos(0)
ans =
1.

2.2. Programmer une fonction avec Scilab


Pour avoir une idée sur l’utilisation d’une fonction en Scilab, il faut se référer à
l’aide en ligne en utilisant la commande help suivie du nom de la fonction. La
définition d’une fonction commence par function et finit par endfunction

2.2.1. Fonction d’une variable


Considèrons la fonction suivante d’une variable réelle à valeur réelle
Syntaxe

function out=nomfonction(in1,in2,...,inP)
// out est la variable de sortie
// in1,in2,...,inP variables d’entrée
suite instructions
endfunction

7
Exemple Considèron la fonction numérique d’une variable réelle à valeur réelles
donnée par f(x) = 𝑥 ! − 2 𝑥 + 1
function out = f(x)
out = x^2 – 2*x +1 ;
endfunction

2.2.2. Fonction de deux ou plusieurs variables

Syntaxe

function [out1,...,outn]=nomfonction(in1,in2,...,inP)
//out1...,outn sont les variables de sortie
// in1,in2,...,inP variables d entree
suite d’instructions
endfunction

Exemple
function [moyenne, produit]=mafonc(a, b)
moyenne=(a+b)/2 ;
produit=a*b ;
endfunction

Appel de la fonction mafonc


[x,y]=mafonc(3,5)

Remarque : la commande mafonc(3,5) ne renvoie que la valeur 4. Pour


récupérer la valeur 15 il faut taper : [x,y]=mafonc(3,5)

8
Initialisation au logiciel Scilab
2.2.3. Fonctions imbriquées

Il s’agit ici de la définition d’une (ou de plusieurs) fonction à l’intérieure d’une autre
fonction.
function y=foo(x)
a=sin(x)
function y=sq(x)
y=x^2
endfunction
y=sq(a)+1
endfunction

2.2.4. La commande deff

Pour définir une fonction sur scilab, on peut aussi utiliser la commande deff
Exemple : deff(’[y]=f(x)’,’y=exp(−x)’);

2.2.5. Exercices

1. Proposer une fonction Scilab permettant de calculer le volume d’un cône de


révolution de hauteur h et dont la base est un disque de rayon r.
2. Programmer une fonction Scilab qui reçoit en paramètre un vecteur V et qui
permet de calculer la moyenne et la variance du vecteur. Afficher les résultats
obtenus.
Application : V = (12, 3, -5, cos(π /3), 34, log(23), exp(3.5), π/12, 0).
Indication : utiliser les fonctions suivante moyenne = mean, variance =
variance, afficher = disp.
3. Proposer une fonction Scilab permettant de convertir une durée d secondes
en années, mois, jours, heures et secondes.
Indication : Pour faire la division euclidienne, on utilisera les
commandes floor et pmodulo

9
3. La fenêtre graphique
Scilab permet de visualiser de manière très simple des résultats numériques.

3.1. En dimension 2
3.1.1. Exemple 1

Tracer le segment [AB] en bleu (par défaut) avec A(-1 ; 2) et B(0 ; 5).

plot([-1,2],[0,5])

3.1.2. Exemple 2

--> x= linspace(-%pi,+%pi,100) ;
--> y=sin(x);
--> plot2d(x,y)

10
Initialisation au logiciel Scilab

3.2. Nuages de points

Le cas le plus courant est celui où l’on veut représenter les termes d’une suite u(n). On
écrit alors plot(u,"*r") en spécifiant la forme et la couleur des points du nuage entre
guillemets. On a choisi ici des étoiles de couleur rouge qui ne sont pas reliées. Par défaut,
les points sont bleus et reliés.

--> for n=1:50


> u(n)=(-0.8)^n;
> end
--> clf; plot(u,"*r")

11
Les couleurs "b" = bleu (par défaut), "k" = noir, "r" = rouge, "g" = vert, "c" = cyan,
"m" = magenta, "y" = jaune, "w" = blanc.

Les styles de points Reliés (par défaut), ou ".", "+", "o", "x", "*". D’autres options
sont disponibles avec : "s", "d", "v", "<", et ">".

3.3. Deux courbes sur la même figure


--> x= linspace(-%pi,+%pi,100) ;
--> y=sin(x) ;
--> z=cos(x) ;
--> plot2d(x,y) ;
-->plot2d(x,z) ;
-->xtitle("Mes Courbes") // Titre de graphique

Une autre alternative


--> x= linspace(-%pi,+%pi,100) ;
--> y1=x.*cos(x) -2*x;
--> y2=2*x^2-1;

12
Initialisation au logiciel Scilab
--> plot2d([x x],[y1 y2]) // concaténation de
matrices
-->xtitle("Mes Courbes","x","y") // Titre et
légendes

3.4. En dimension 3

--> function z=f(x,y)


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

13
3.5. Récupérer ses graphiques sous plusieurs formats

Ceci est très facile à partir du menu Fichier de la fenêtre graphique, en choisissant
Exporter, un autre menu vous propose différents choix tournant autour du langage
postscript ainsi que le format fig qui permet lui de retravailler son graphique avec le
logiciel de dessin vectoriel xfig. Vous pouvez aussi exporter en png, pdf, jpg….

4. Les structure de contrôle


4.1. Les instructions conditionnelles

if condition-principale then
suite-d-instructions

else
suite-des-instructions
end
Ou encore

14
Initialisation au logiciel Scilab

if condition-principale then
suite-d-instructions
elseif
autre-suite-d-instructions
else
encore-des-instructions
end
Remarque : if … then doivent être écrits sur la même ligne, de même que elseif … then.

Exemple

4.2. La boucle for

La syntaxe générale d’une boucle for est :

for i=vecteur
suite-d-instructions
end

L’indice i prend successivement les valeurs de chaque coordonnée du vecteur. La liste des
instructions finit toujours par end.
Exemple 1 : la somme des 100 premiers nombres entiers est donnée par

s=0
for i=1:100
s=s+i ;
end

15
Exemple 2

u(1)=4;
for n=1:20
u(n+1)= u(n)+2*n+3;
disp([n,u(n)])
end

4.3. La boucle while

La boucle while (tant que) est une autre variante de la boucle for. Elle permet de répéter
une suite d’instructions tant qu’une condition est vraie. La syntaxe de la boucle while
est :
while condition
suite-d-instructions
end
1. Exemple 1 -->x=1 ; while x<22 , x=3*x -1, end

!
!!
2. Exemple 2: calcul des termes de la suite 𝑢!!! = ! !!
!!
avec 𝑢! = 1.

u=1;
while u>0.001
do u=(u^2)/(u^2+1);
disp(u);
end;

! !
5. Exemple 3 : On admet que la somme Sn = !!! ! tend vers +∞. Le
programme suivant donne l’entier n tel que Sn > A pour A donné par
l’utilisateur.
A=input('A');
S=0;
n=1;
while S<=A do

16
Initialisation au logiciel Scilab
S=S+1/n;
n=n+1;
end;
disp(n-1);

On rappelle que les opérateurs de comparaisons sont les suivants

Exercice 3. On considère les suites (an) et (bn) définies par a0 = 2,b0 = 3 et pour tout
𝑛∈ℕ

5. Quelques primitives utiles dans les fonctions


En dehors de length et size qui permettent de récupérer les dimensions des structures
de données, et de pause, resume, disp qui permettent de d ́eboguer, d’autres
fonctions peuvent ˆetre utiles comme error, warning, argn.

5.1. La fonction error


Elle permet d’arrêter brutalement le déroulement d’une fonction tout en affichant un

17
message d’erreur ; voici une fonction qui calcule n! en prenant soin de vérifier que n
𝑛𝜖ℕ

function [f]=fact(n)
// calcul de la factorielle d’un nombre entier positif
if (n - floor(n) ~=0) | n<0 then // vérifier su n est un
entier
error('erreur dansla fonction fact : l’’argument doit
etre un nombre entier naturel')
end
f = prod(1:n) // permet de calculer la factorielle
endfunction

--> factorielle(1.4)
à la ligne 4 de la fonction fact (
/Users/mrdiop/Documents/UVS/cours Anum L2/erreur.sce ligne 5
)

erreur dans fact2 : l’’argument doit etre un nombre entier


naturel

--> factorielle(5)
ans =
120.

5.2. La fonction warning


Elle permet d’afficher un message à l’écran mais n’interrompt pas le déroulement de
la fonction :
function [f]=factorielle1(n)
// calcul de la factorielle d’un nombre entier positif

18
Initialisation au logiciel Scilab
if (n - floor(n) ~=0) | n<0 then
n = floor(abs(n))
warning('l''argument n’’est pas un entier naturel: on
calcule '+sprintf("%d",n)+"!")
end
f = prod(1:n)
endfunction

--> factorielle1(4.4)
ATTENTION : l'argument n’’est pas un entier naturel: on
calcule 4!
ans =
24.

5.3. L’instruction break


Elle permet dans une boucle for ou while d’arrêter le déroulement des itérations en passant
le contrôle à l’instruction qui suit le end marquant la fin de la boucle.
function ind=recherche2(v, l)
n = max(size(v))
i=1
succes = %f
while ~succes & (i <= n)
succes = part(v(i),1) == l
i= i+1
end

if succes then
ind = i-1
else
ind = 0
end

endfunction

Si on s’autorise l’utilisation d’un break, on a la solution suivante plus naturelle

19
(mais moins conforme aux critères purs et durs de la programmation structurée) :

function ind=recherche1(v, l)
n= max(size(v))
ind = 0
for i=1:n
if part(v(i),1) == l then
ind = i
break end
end

6. Calcul matriciel

6.1. Définition
Définition 1 Une matrice m×n est un tableau de nombres à m lignes et n colonnes. Les
nombres qui composent la matrice sont appelés les éléments de la matrice (ou aussi les
coefficients). Une matrice à m lignes et n colonnes est dite matrice d’ordre (m, n) ou
de dimension m × n. Un élément de la matrice est repéré par sa position en ligne et en
colonne.

En SCILAB, on utilise les crochets pour délimiter une matrice. Les virgules permettent
de séparer les composantes d’une ligne. Les lignes sont séparées par un point-virgule.

-->A=[1,2,3,4;3,4,5,6;2,3,4,5]
A =

20
Initialisation au logiciel Scilab
1. 2. 3. 4.
3. 4. 5. 6.
2. 3. 4. 5.

Ici la virgule est équivalente à l’espace

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


A =

1. 2. 3. 4.
3. 4. 5. 6.
2. 3. 4. 5.
6.2. Cas particuliers
1. Si m=n, alors la matrice est dite carrée
2. Si m=1, alors la matrice est dite vecteur ligne
3. Si n=1, alors la matrice est dite vecteur colonne
4. La matrice vide est donnée par la commande [].
X = []

La commande [] permet aussi de supprimer une colonne ou une ligne dans une
matrice donnée.

-->A(1,:)=[] // Supprime la première ligne de la matrice A


A =

3. 4. 5. 6.
2. 3. 4. 5.

21
-->A(:,1)=[] // ,:)=[] // Supprime la première colonne de la matrice A

A =

4. 5. 6.
3. 4. 5.

Matrice nulle
On appelle matrice nulle une matrice dont toutes ses composantes sont nulles. En
SCILAB, la matrice nulle de m lignes et n colonne est notée zero(m,n) .

Matrice des uns


5. On appelle matrice des uns, une matrice à m ligne et n colonnes dont tous les
éléments valent 1.
Syntaxe : ones(m,n)
6.3. Quelques fonctions utiles sur le calcul matriciel
6.3.1. Taille : les commandes size et length

La commande size(A) donne la taille de la matrice A

-->size(A)
ans =

3. 4.

U=[1;2;3;4]
--> length(U)
ans = 4

22
Initialisation au logiciel Scilab
6.3.2. Trier

La fonction gsort permet d’ordonner par ordre croissant ou décroissant les éléments
d’un vecteur.
-->u=[2 3 4 9 1 -8 3 2-1]
u =
2. 3. 4. 9. 1. -8. 3. 1.
--> gsort(u,"g","i")
ans =

-8. 1. 1. 2. 3. 3. 4. 9.
--> gsort(u)
ans =
9. 4. 3. 3. 2. 1. 1. -8.

6.3.3. Vecteur régulier : opérateur deux points


L’opérateur « : » permet de créer une suite de réels régulière
Soient a, b et h deux réels. a:b donne deux résultats possibles
• Une matrice vide si a>b.
• Le vecteur [a,a+1,a+2, …, a+n], avec a+n ≤ b <a+n+1
1. a :h :b permet d’obtenir le vecteur [a, a+h,a+2h, …, a+nh], avec a+nh ≤ b <
a+(n+1)h.
-->1.2:7.4
ans =

1.2 2.2 3.2 4.2 5.2 6.2 7.2

-->1.2:0.9:7.4
ans =

1.2 2.1 3. 3.9 4.8 5.7 6.6

23
6.3.4. La commande linspace
C’est une autre alternative de discrétisation linéaire d’un intervalle [a,b]
Syntaxe linspace(a,b,c)
linspace(2, 1, 5)
ans =

2. 1.75 1.5 1.25 1.

6.4. Matrice magique


On appelle matrice magique …
-->testmatrix('magic',3)
ans =
8. 1. 6.
3. 5. 7.
4. 9. 2.
Syntaxe : textmatrix(‘magic’,ordre_de_la_matrice)
6.5. Transposée d’une matrice
Soit M une matrice m × n. La transposée de la matrice M est la matrice dont
les lignes sont les colonnes de M et les colonnes sont les lignes de M.
En SCILAB, la transposée de la matrice A est notée A’.

-->A'
ans =

1. 3. 2.
2. 4. 3.
3. 5. 4.
4. 6. 5.

6.6. Addition de deux matrices

24
Initialisation au logiciel Scilab
Soit M et N deux matrices ayant le même nombre de lignes et de colonnes. La
somme des matrices M et N est la matrice de même dimension que M et N, dont
chaque élément est la somme des éléments correspondants de M et N.
6.7. Multiplication par un réel

Soit M une matrice quelconque et λ un réel. Le produit de M par λ est la matrice de


même dimension que M et dont chaque élément est le produit de λ par l’élément
correspondant de M.

6.8. Multiplication de deux matrices

Soit A une matrice m × p et B une matrice p × n. On peut effectuer le produit d’une


matrice à m lignes et p colonnes par une matrice à p lignes et n colonnes. On
appelle produit A × B la matrice de dimension m × n obtenue en multipliant chaque
ligne de A par chaque colonne de B.

Remarque Le produit de matrices n’est pas commutatif

6.9. Déterminant d’une matrice


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

--> det(A)
ans =
17.
6.10. Matrice inverse
-->inv(A)
ans =

-0.4705882 -0.0588235 0.7647059

25
0.1176471 -0.2352941 0.0588235
0.4117647 0.1764706 -0.2941176
6.11. Spectre
Scilab possède des commandes permettant de trouver très simplement le spectre
d’une matrice. Ainsi la commande spec(A) donne la liste des valeurs propres de
A. On peut aussi obtenir les vecteurs propres. Ceux-ci sont stockés dans une
matrice que l’on peut récupérer en demandant explicitement que la commande
spec(A) sorte la liste de valeurs propres ainsi que la matrice des vecteurs
propres.

--> A=[1,2;3,5];spec(A)
ans =

-0.1622777
6.1622777

ou
--> [Vec,val]=spec(A)
val =

-0.1622777 0.
0. 6.1622777

Vec =

-0.8646035 -0.361261
0.5024547 -0.9324647

7. Résolution des systèmes linéaires


Pour résoudre le système linéaire AX = b, où A est une matrice carrée, utilisez l’anti-slash
« \ » X = A \ Y.
A=[1 2 3; 1 -3 2; 2 1 2];
--> b=[2; 1; 4];
--> X=A\b
X =
2.0588235

26
Initialisation au logiciel Scilab
0.2352941
-0.1764706

Attention, l’opération Y / A donnera (à condition que les dimensions soient bonnes) un


autre résultat, soit la matrice Z telle que Z A = Y.

8. Résolution des équations différentielles


8.1. Utilisation basique de ode

La fonction ode est très simple à utiliser .


ü Il faut écrire le second membre f comme une fonction Scilab avec la
syntaxe suivante :

function y=f(t,x)

// suite d’instructions

endfunction
ü On écrit la commande suivante :

y=ode(y0,t0,t,f),
avec :
Ø y0 : condition initiale, vecteur de dimension
Ø t0 : instant initial,
Ø t : vecteur de dimension T des instants où l’on veut avoir la solution. Ce
vecteur doit commencer par t0,
Ø f : fonction définissant le système.

Remarque : Même si l’équation est autonome, il faut quand même mettre t comme
premier argument de la fonction second membre.

8.2. Exemples

27
Ø Exemple 1

function yprim=f(t,y)
yprim(1)=y(2);
yprim(2)=-4*y(1) ;
endfunction
t0=0;
tmax=5;
t=t0:0.05:tmax;
y0=3;
yprim0=0;
y=ode([y0;yprim0],t0,t,f);
clf;
plot(t,y(1,:))

Ø Exemple 2 Equation de VanDerpol

Elle est donnée par


𝑦 !! = 𝑐 1 − 𝑦 ! 𝑦 ! − 𝑦.
On la reformule comme un système de deux équations différentielles du premier
ordre en posant 𝑢! 𝑡 = 𝑦(𝑡) et 𝑢! 𝑡 = 𝑦′(𝑡)

28
Initialisation au logiciel Scilab

function [f] = VanDerPol(t,u)


// second membre pour Van der Pol (c = 0.55)
f(1) = u(2)
f(2) = 0.55*(1 - u(1)^2)*u(2) - u(1)
endfunction

t = linspace(t0,T,m);
[U] = ode(u0,t0,t, VanDerPol)

9. Quelques fonctions utiles de scilab

29

Vous aimerez peut-être aussi