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
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)