Académique Documents
Professionnel Documents
Culture Documents
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
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
> 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 ».
La commande ls peut être aussi utilisée avec des options. Par exemple ls *.txt
-->mkdir Cours\TD créer en une seule fois un sous répertoire TD dans un répertoire
Cours.
--> who affiche la liste de toutes les variables utilisées dans la session Scilab.
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.
-->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
1.2. L’éditeur
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 ».
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
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).
5
2. La programmation
2.1. Les fonctions
2.1.1. Les fonctions prédéfinies sur Scilab
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;
6
Initialisation au logiciel Scilab
--> disp("c''est ok")
c'est ok
--> log(1)
ans =
0.
--> exp(0)
ans =
1.
--> cos(0)
ans =
1.
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
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
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
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
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
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.
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 ">".
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
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….
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
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
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);
Exercice 3. On considère les suites (an) et (bn) définies par a0 = 2,b0 = 3 et pour tout
𝑛∈ℕ
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
)
--> factorielle(5)
ans =
120.
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.
if succes then
ind = i-1
else
ind = 0
end
endfunction
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.
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.
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) .
-->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.
-->1.2:0.9:7.4
ans =
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 =
-->A'
ans =
1. 3. 2.
2. 4. 3.
3. 5. 4.
4. 6. 5.
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
--> det(A)
ans =
17.
6.10. Matrice inverse
-->inv(A)
ans =
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
26
Initialisation au logiciel Scilab
0.2352941
-0.1764706
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,:))
28
Initialisation au logiciel Scilab
t = linspace(t0,T,m);
[U] = ode(u0,t0,t, VanDerPol)
29