@ccueil Colles

Scripts et fonctions avec Scilab

Index Scilab

Scilab 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 fonction
function [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 extension sci 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 commande getd(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").


Voir aussi: Index Scilab