Transcript end - Loria
Annexe : présentation de Scilab
1. Introduction à Scilab
Les outils de calcul scientifique (1/2)
Deux types d’outils :
Les langages de calcul symbolique
– Maple, Mupad, …
– exemple (Maple) :
Scilab
Les outils de calcul scientifique (2/2)
Les langages de calcul numérique
– Matlab, Scilab, …
– exemple (Scilab) :
Scilab
Présentation de Scilab (1/2)
Logiciel libre développé par l’I.N.R.I.A. (Institut National
de Recherche en Informatique et Automatique)
Dispose des méthodes usuelles du calcul numérique :
– résolution de systèmes linéaires
– calcul de valeurs propres, vecteurs propres,
– décomposition en valeurs singulières
– transformée de Fourier rapide,
– résolution d'équations différentielles,
– algorithmes d’optimisation,
– résolution d'équations non linéaires,
– génération de nombres aléatoires,
– de nombreuses primitives d'algèbre linéaire ...
Scilab
Présentation de Scilab (2/2)
Une batterie d’instructions graphiques
– de bas niveau (tracer un polygone, récupérer les coordonnées du pointeur
de la souris, etc.)
– de haut niveau (visualiser des courbes, des surfaces)
– petites animations possible grâce a l’utilisation d ’un double buffer
Un langage de programmation interprété
– assez simple et agréable
– assez puissant car il intègre les notations matricielles
– présence d’un pseudo débogueur
– possibilité de lier Scilab à des sous-programmes C ou Fortran
Scilab
Où trouver de l’information sur
Scilab ?
Scilab home page :
http://www.scilab.org
(de nombreuses infos, liens + téléchargement gratuit des versions Windows,
Unix, Linux, Mac)
Forum usenet :
comp.sys.math.scilab
L’aide en ligne de Scilab !
Scilab
L’interface Scilab
"prompt"
L’interface Linux
Scilab
Premiers exemples...
Affectation :
variable = expression
ou
expression
Scilab
Fonctions usuelles
Scilab
L’aide de Scilab (1/2)
Scilab
L’aide de Scilab (2/2)
Scilab
Informations sur l’espace de
travail : la commande who (1/2)
Variables
d’environnement
Variables
définies par
l’utilisateur
Constantes
prédéfinies
Bibliothèques
Scilab
Nombre de
mots de 8
octets utilisés
Mémoire totale
disponible
Nombre de
variables
utilisées
Scilab
Nombre maximum de
variables autorisé
Informations sur l’espace de
travail : la commande who (2/2)
Changer la taille de la pile :
stacksize(nbmots)
supprimer une variable v1 de l ’environnement :
clear v1
Scilab
2. Algèbre linéaire
Définir une matrice
Espace ou virgule
entre chaque colonne
Point-virgule
entre chaque
ligne
Pour continuer la
description à la
ligne suivante
Matrice complexe
Scilab
Référencer les coefficients d ’une
matrice
Préciser les indices entre parenthèse
Scilab
Quelques matrices types (1/2)
Identité :
eye(n_lig, n_col) ou
eye(mat)
Pour ne pas
afficher le
résultat
Matrice diagonale :
diag(vect)
Matrice « de 1 » :
ones(n_lig, n_col) ou
ones(mat)
Matrice nulle :
zeros(n_lig, n_col) ou
zeros(mat)
Scilab
Quelques matrices types (2/2)
Matrice remplie de nombres pseudo-aléatoires :
rand(n_lig, n_col)
Vecteur à n composantes régulièrement réparties entre x1 et xn :
– imposer n : linspace(x1, xn, n)
– imposer l’incrementation : x1:incr:xn
Scilab
Expressions matricielles (1/6)
Somme, produit, transposée
Scilab
Expressions matricielles (2/6)
Les fonctions usuelles s’appliquent aux matrices élément
par élément
Scilab
Expressions matricielles (3/6)
Opérations entre deux matrices, élément par élément :
préfixer l’opération par un point : .*
./
.^
Scilab
Expressions matricielles (4/6)
Résoudre le système linéaire Ax=b
Scilab
Expressions matricielles (5/6)
Calcul des valeurs propres : la fonction spec
evals=spec(A)
A: matrice carrée (réelle ou complexe)
evals : vecteur réel ou complexe contenant les valeurs propres
Scilab
Expressions matricielles (6/6)
Calcul des vecteurs propres : la fonction bdiag
[Ab [,X [, bs]]]=bdiag(A)
A : matrice carrée (réelle ou complexe)
Ab : matrice carrée diagonale par bloc
X : matrice de changement de base (Ab=X-1AX), matrice des vecteurs propres pour A
diagonalisable)
bs : taille respective des blocs
Scilab
Sauvegarder une matrice sur le
disque
Utiliser la variable
PWD pour savoir où
est sauvegardé le
fichier
Si le nombre de lignes n’est pas connu
Scilab
Transformée de Fourier rapide
[x]=fft(a, -1) : FFT directe
[x]=fft(a, 1) : FFT inverse
a et x sont des vecteurs réels ou complexes
Si a est une matrice, une FFT à deux dimensions est calculée
Scilab
3. Graphisme 2D et 3D
Les fenêtres graphiques
Initialement, la fenêtre courante (dans laquelle les dessins sont affichés
par défaut) est la fenêtre numéro 0
On peut utiliser d’autres fenêtres graphiques et basculer de l’une à
l’autre à l’aide des instructions suivantes :
xset("window",num)
la fenêtre courante devient la fenêtre numéro num; si
cette fenêtre n’existait pas, elle est créée par Scilab.
xselect()
met en avant la fenêtre courante ; si aucune fenêtre
graphique n’existe, Scilab en crée une.
xbasc([num])
efface la fenêtre graphique numéro num; si num est
omis, Scilab efface la fenêtre courante.
xdel([num])
détruit la fenêtre graphique numéro num; si num est
omis, Scilab détruit la fenêtre courante.
Scilab
Les courbes dans le plan : plot2d
1. Définir les abscisses dans un vecteur colonne
2. Définir les ordonnées dans un vecteur colonne
3. Tracer le graphe
Scilab
Afficher simultanément plusieurs
courbes
Plot2d(Mx,My) où Mx et My sont deux matrices de tailles
identiques, le nombre de courbes etant egal au nombre de
colonnes des deux matrices
Un titre plus une légende pour les deux axes
Scilab
Les surfaces : plot3d
Surfaces définies par z=f(x,y)
Exemple : f(x,y)=cos(x)cos(y) pour (x,y)[0,2][0,2]
Scilab
Les courbes dans l’espace :
param3d
Surfaces définies par x=f1(t), y=f2(t), z=f3(t)
Exemple de l’hélice
Scilab
4. Programmation
Principales caractéristiques du
langage Scilab
Un langage interprété, simple mais complet
les variables ne sont pas déclarées (type, taille) : c’est
l’interpréteur qui s’en charge
dispose d’instructions graphiques
interprété plus lent, mais appel de routines compilées
(fortran) pour les instructions matricielles
possibilité de lier à Scilab des sous-programmes fortran ou
C
Scilab
Lire / afficher une donnée
Lire une donnée :
-->a=input("Valeur de a ?")
valeur de a?-->12
a =
12.
Afficher une donnée :
-->disp(a,"Valeur de a :")
Valeur de a :
12.
Les fonctions printf et scanf utilisées en C sont aussi reconnues
Scilab
La boucle for (1/2)
Syntaxe
for variable = matrice
instruction_1
…
instruction_n
end
le
nombre d’itérations est égal au nombre de colonnes de la
matrice et la variable de la boucle à la ième itération est
égale à la ième colonne de la matrice
Scilab
La boucle for (2/2)
Exemple 2
Exemple 1
Facultatif (1 par défaut)
--> for i=1:1:3
--> v=[1 -1 1 -1]
--> disp(i, "iteration no ")
--> y=0
--> end
--> for k=v
iteration no
--> y=y+k
--> end
1.
iteration no
2.
iteration no
3.
Scilab
La boucle while (1/2)
Syntaxe
while condition
instruction_1
…
instruction_n
end
Exemple
--> x=1
--> while x<14
--> x=2*x
--> end
Scilab
La boucle while (2/2)
Opérateurs de comparaison
==
<
>
<=
>=
<>
egal
strictement inferieur
strictement superieur
inferieur ou egal
superieur ou egal
different
Opérateurs logiques (vrai : %t faux : %f)
&
|
~
et
ou
non
Scilab
La construction if then else (1/2)
Syntaxe
if condition_1
suite_d_instructions_1
elseif condition_2
suite_d_instructions_2
…
elseif condition_n
suite_d_instructions_n
else
suite_d_instructions_n+1
end
Scilab
La construction if then else (2/2)
Exemple
if x>0 then // la variable x doit être définie
y=-x
else
y=x
end
Scilab
La construction select case (1/2)
Syntaxe
select variable_test
case expr_1
suite_d_instructions_1
…
case expr_n
suite_d_instructions_n
else
suite_d_instructions_n+1
end
Scilab
La construction select case (2/2)
Exemple
select num // on suppose que num est defini
case 1
y="cas 1"
case 2
y="cas 2"
else
y="autre cas"
end
Scilab
Les fonctions (1/3)
Syntaxe
function [y1,y2,…,yn]=nom_fonction(x1,x2,…,xm)
x1,x2,…,xm : arguments d'entrée
y1,y2,…,yn : arguments de sortie
Exemple
function [y]=fact1(n) // n doit etre un entier naturel
y=1
for i=1:n
y=y*i
end
Scilab
Les fonctions (2/3)
Les fonctions sont écrites dans un fichier
– la 1ère ligne du fichier doit commencer par l’instruction function
– la dernière instruction du ficher doit être suivie d’un passage à la
ligne
– la tradition est de suffixer les noms des fichiers contenant les
fonctions en .sci
– pas de mot-clé délimitant la fin d’une fonction (fin du fichier ou
function suivant)
– pour lire le fichier : getf(’nom_du_fichier’)
Scilab
Les fonctions (3/3)
Exemple
--> getf(’fact1.sci’)
--> m=fact1(5)
m =
120.
--> n1=2; n2=3;
--> fact1(n1*n2)
ans =
720.
Scilab