Section : Programmation
Précédent : Types de fichiers
Suivant : Statistiques en Scilab
Style de programmation
La philosophie de Scilab est celle d'un langage fonctionnel.
Au lieu de créer un
logiciel avec programme principal et procédures, on étend le langage par
les fonctions dont on a besoin. Le rôle du programme principal
est joué par un fichier de commandes contenant essentiellement
des appels de fonctions.
Certaines erreurs difficiles à trouver proviennent de confusions entre
noms de variables ou de fonctions. Scilab garde en mémoire tous les
noms introduits tant qu'ils n'ont pas été libérés par clear
.
Il est donc prudent de donner des noms assez explicites aux
variables. Les variables introduites dans la session ou dans les
fichiers de commandes sont globales. Par
défaut, toutes les variables introduites à l'intérieur d'une fonction
sont locales. C'est une des raisons pour lesquelles on a intérêt
à définir de nouvelles fonctions plutôt que d'utiliser des
fichiers de commande exécutables.
Pour comparer l'efficacité des algorithmes, on dispose de timer
qui permet de compter le temps CPU écoulé.
A=rand(200,200);
b=rand(200,1);
timer(); x=A\b; timer() // resout le systeme lineaire
timer(); x=inv(A)*b; timer() // inverse la matrice : plus lent
Scilab propose les commandes des langages de programmation classiques.
Commandes principales |
Pour |
for |
x=vecteur, |
instruction; |
end |
Tant que |
while |
booleen, |
instruction; |
end |
Si |
if |
booleen then, |
instruction; |
end |
Sinon |
else |
|
instruction; |
end |
Sinon si |
elseif |
booleen then, |
instruction; |
end |
Selon |
select x |
case 1 ... |
then ... |
end |
La boucle for
peut aussi s'appliquer à une matrice.
Dans
for x=A, instruction, end
,
l'instruction sera exécutée pour
x
prenant successivement comme valeurs les colonnes de la
matrice A
.
Scilab est un outil de calcul plus que de développement. Pour un
problème compliqué, on aura tendance
à utiliser Scilab pour réaliser des maquettes de logiciels et
tester des algorithmes, quitte à lancer ensuite les gros calculs dans un
langage compilé comme C. Cela ne dispense pas de
chercher à optimiser la programmation en Scilab, en utilisant au
mieux la logique du calcul matriciel.
Voici un exemple illustrant cette logique. Si
et
sont deux vecteurs, on souhaite définir la matrice
, où
. Il y a
plusieurs solutions. Dans les commandes qui suivent, v
est un
vecteur colonne et w
est un vecteur ligne.
for i=1:n, for j=1:m, A(i,j)=v(i)^w(j); end; end // a eviter
A=v^w(1); for j=2:m, A=[A,v^w(j)]; end // mieux
A=v(1)^w; for i=2:n, A=[A;v(i)^w]; end // equivalent
A=(v*ones(w)).^(ones(v)*w) // preferable
Si on doit appeler plusieurs fois ce calcul, on aura intérêt à
en faire une fonction.
Scilab offre toutes les facilités pour programmer correctement :
protection des saisies, utilitaires de débuggage...
Protection et débuggage |
disp |
affichage de variables |
type |
type des variables |
typeof |
idem |
argn |
nombre de variables d'entrée |
break |
sortie de boucle |
pause |
attente clavier |
return |
sortie de fonction |
resume |
idem |
error |
message d'erreur |
warning |
message d'avertissement |
Nous donnerons plusieurs exemples de fonctions dans le chapitre suivant.
Elles ne sont pas toujours optimisées. Nous avons privilégié la
clarté de la programmation sur la rapidité d'exécution.
Section : Programmation
Précédent : Types de fichiers
Suivant : Statistiques en Scilab
© B. Ycart (2001)