Scripts et fonctions avec Scilab
Index ScilabScilab fournit un environnement propice à la programmation; en particulier on peut créer des scripts et des fonctions. Un script est un fichier contenant un ensemble de commandes et qui sera exécuter séquentiellement lors de son exécution. Une fonction permet quant à elle de systématiser un ensemble de calculs ou d'instruction, reposant éventuellement sur un certain nombres de paramètres d'entrée et délivrant éventuellement en retour un certain nombre de valeurs.
Un simple fichier texte contient ces scripts et/ou fonctions. On peut utiliser pour éditer et travailler sur ceux-ci l'éditeur de Scilab, lancé avec la commande
edit
,
ou avec n'importe quel éditeur de texte (emacs, vi, nedit, …).
L'exécution d'un script ou le chargement d'une fonction se fait avec la commande
exec 'file_name.sce'
,
ou exec('file_name.sce',N)
.
Le paramètre N permet (voir l'aide
help exec
) de régler les affichages générer
(0: valeur par défaut, -1: rien n'est affiché, sauf ce qui explicitement indiqué par un disp
par exemple,
1: recopie chaque instruction dans la fenêtre de commande avant exécution, …)
Définition et utilisation d'une fonction
On définit par exemple dans le fichier 'test.sci' la fonctionfunction [y,z]=my_f(x,a)
y=1/(x^2+2*a);
z=[x y];
endfunction
qu'on charge alors et exécute par
-->exec('test.sci',-1)
-->[y,z]=my_f(1,2)
z =
1. 0.2
y =
0.2
Le nom du fichier n'a pas nécessairement de lien avec le nom de la fonction.
Un fichier peut contenir plusieurs fonctions.
Fonction comme variable
Une remarque interessante à ce point: pour Scilab, une fonction est une variable.On peut donc écrire une fonction avec comme variable d'entrée…une fonction.
Par exemple, dans le fichier 'test.sce',
function y=my_f(f,x,n)
y=n*f(x);
endfunction
function y=fct(x)
y=x^2;
endfunction
y=my_f(fct,2,3);
disp(y)
qui s'exécute suivant
-->exec('test.sce',-1)
12.
Définition et utilisation d'un script
Un script est écrit dans un simple fichier texte, par exemple, pour créer une matrice// Commentaires: lignes débutant par "//"
for i=1:3
for j=1:5
F(i,j)=j+(i-1)*5;
end
end
disp(F)
puis son exécution, dans la fenêtre de commande,
-->exec('test_script.sce',-3)
1. 2. 3. 4. 5.
6. 7. 8. 9. 10.
11. 12. 13. 14. 15.
Espaces de travail et localisation des variables
Un script regroupe un ensemble d'instructions; lors de son exécution, chacune est exécutée de la même façon que si elle avait été tapée directement dans la fenêtre de commandes.Les variables définies et utilisées dans un script sont donc globales.
Par contre, les variables dans le corps d'une fonction sont locales. L'exécution d'une fonction définit un espace de travail spécifique à la fonction, qui est effacé par la commande
endfunction
qui termine la fonction.
Ainsi, exceptées les variables assignées en sortie de la fonction, toutes les autres ne sont pas accessibles à l'extérieure de la fonction. de plus, si une variable existe avant l'exécution d'une fonction, elle n'est pas modifiée non plus.
Par exemple, dans le fichier "test.sci"
function y=f(x)
c=26;
y=x^2;
endfunction
puis, dans la fenêtre de commandes
-->c=3
c =
3.
-->exec('test.sci',-1)
-->c
c =
3.
Extension des fichiers
Les fichiers Scilab ont pour extensionsci
ou sce
.
La première extension, sci
, est utilisée pour désigner des fichiers contenant des fonctions,
tandis que la deuxième, sce
, des scripts.
Un fichier contenant un script et des fonctions peut avoir l'une ou l'autre des extensions.
La différence principale entre ces deux extensions réside dans la possibilité, et la facilité, de charger des fonctions externes, c'est-à-dire provenant d'autres fichiers.
Chargement d'un ensemble de fonctions
La commandegetd(dir)
permet de charger toutes les fonctions
présentes dans tous les fichiers .sci
du répertoire dir
. getd(".")
Les fichiers ayant pour extension sce
ne sont pas pris ici en compte, même si ils contiennent des fonctions.
Cette commande permet ainsi d'organiser un projet de taille conséquente, en créant par exemple un sous-répertoire contenant un ensemble de fonctions, éventuellement dans autant de fichiers d'extension
sci
que souhaité,
et des les charger en une fois dans un script principal.
On peut par exemple créer un, ou plusieurs, sous-repertoire "fonctions" contenant les fonctions "élémentaires" utilisées, et les charger dans l'espace de travail courant, au début d'un script dans le répertoire courant par
getd("fonctions")
.