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 la fonction timer
qui permet de compter le temps CPU écoulé entre deux appels consécutifs.
Les fonctions tic
et toc
fonctionnent comme timer
mais affichent le temps en secondes.
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 A=rand(1000,100); B=rand(1000,100); format("v",25) tic(); C=A.*B; toc() clear C tic(); for i=1:100,for j=1:100, .. C(i,j)=A(i,j)*B(i,j); end, end; toc() format("v",10)
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
x
prenant successivement comme valeurs les colonnes de la
matrice A
.
Scilab est un outil de calcul. 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 |