Fonctions

Scilab propose beaucoup de fonctions dans des domaines très variés. On peut en obtenir la description par help. On peut retrouver une fonction avec apropos, qui retourne les rubriques d'aide dont le titre contient une chaîne de caractères donnée. De très nombreux exemples sont disponibles en démonstration, on y accède par le menu \fbox{?} $ \longrightarrow$ \fbox{D\'emonstrations} Les fonctions numériques s'appliquent en général à chaque terme d'un vecteur ou d'une matrice. Il ne faut pas oublier que la multiplication, la puissance, la division doivent être précédées par un point pour s'appliquer terme à terme.

x=1:10
y=sin(x)
y=x*sin(x)       // erreur
y=x.*sin(x)
y=1./x.*sin(x)   // erreur
y=(1)./x.*sin(x)
y=sin(x)./x
A=[ 4, 4; 4, 4]
sqrt(A)
A.^(1/2)         // operation terme a terme
B=A^(1/2)        // operation matricielle
B*B

Fonctions mathématiques
sqrt exp log round
sin cos tan floor
asin acos atan ceil

Les fonctions vectorielles s'appliquent à l'ensemble d'un vecteur ou d'une matrice, et retournent un scalaire. Pour appliquer une telle fonction colonne par colonne ou ligne par ligne, il faut rajouter l'option "r" ou "c". Il n'est pas toujours évident de décider laquelle des deux options choisir. Il faut se souvenir qu'avec l'option "r", la fonction retournera un vecteur ligne (row), et donc s'appliquera aux colonnes. Par exemple, sum(A,"r") retourne un vecteur ligne, qui est formé des sommes des coefficients dans chaque colonne.

Fonctions vectorielles
max maximum
min minimum
sort tri par ordre décroissant
gsort tri, ordres particuliers
sum somme
prod produit
cumsum sommes cumulées
cumprod produits cumulés
mean moyenne
median médiane
stdev écart-type

A=[1,2,3;4,5,6]
sum(A)
sum(A,"r")
sum(A,"c")
cumsum(A,"r")
cumsum(A,"c")
cumsum(A)
x=rand(1,5)
mean(x)
stdev(x)
median(x)
sort(x)
gsort(x,"c","i")

L'utilisation de Scilab consiste en général à étendre le langage par de nouvelles fonctions, définies par des séquences d'instructions. Nous avons vu l'utilisation de deff, qu'il convient de réserver à des définitions courtes. L'alternative à deff, est de définir une fonction sur plusieurs lignes dans la fenêtre Scilab. La première ligne est nécessairement du type function y=f(x), la dernière est endfunction. Si la fonction à écrire est un tant soit peu compliquée il vaut mieux écrire un fichier de fonction externe, comme nous le verrons plus loin. Cela permet une programmation beaucoup plus claire et un débuggage plus efficace.

Il est important de choisir des noms différents pour les nouvelles fonctions, sans quoi les définitions se superposeront, y compris à celles des fonctions prédéfinies.

deff("y=sin(x)","y=2*x")      // message d'avertissement
sin(2)
clear
sin(2)

Les nouvelles fonctions sont traitées comme des variables, à la différence des fonctions prédéfinies (primitives) : une fonction définie par deff peut être utilisée comme argument dans fplot2d mais une primitive ne peut pas.

deff("z=pente_secante(f,x,y)","z=(f(y)-f(x))/(y-x)")
x=%pi; y=%pi+0.01;
pente_secante(cos,x,y)        // correct
deff("y=f(x)","y=cos(x)")  
pente_secante(f,x,y)
z=[0:0.01:%pi];
fplot2d(z,cos)                // erreur
fplot2d(z,f)

Quand on définit une nouvelle fonction numérique, on a toujours intérêt à faire en sorte qu'elle puisse s'appliquer correctement à une matrice, ce qui impose de veiller aux multiplications terme à terme. On peut aussi utiliser feval, qui distribue l'évaluation d'une fonction sur l'ensemble des éléments d'un vecteur.

deff("y=f(x)","y=x*sin(x)")
f(1)
f([1:5])                      // erreur
help feval
feval([1:5],f)
deff("y=g(x)","y=x.*sin(x)") 
g(1)
g([1:5])

Certaines fonctions peuvent retourner plus d'un argument. Par exemple les fonctions de tri sort et gsort retournent par défaut le vecteur trié, mais peuvent aussi donner la permutation des coordonnées qui a été effectuée. Les fonctions max et min donnent aussi la position des maxima et minima dans une matrice.

v=rand(1,5)
max(v)
[m,i]=max(v)
sort(v)
[vtrie,perm]=sort(v)

         © UJF Grenoble, 2011                              Mentions légales