Section : Vecteurs et matrices
Précédent : Opérations
Suivant : Fonctions
Types de données
Certaines constantes sont prédéfinies, et leur valeur ne peut être
modifiée.
Constantes prédéfinies |
%pi |
3.1415927 |
%e |
2.7182818 |
%i |
|
%eps |
précision machine |
%inf |
infini |
%t |
vrai |
%f |
faux |
%s |
variable de polynôme |
Scilab est un langage faiblement typé. Les variables ne sont
pas déclarées, et la même lettre peut désigner un réel, un
entier, un polynôme, ou une fonction. Les types existent bien sûr,
et peuvent être obtenus par la fonction type
. Par défaut,
les nombres sont traités comme des réels en double précision.
Les calculs ne sont donc pas ``exacts''. La précision machine
est donnée par la constante %eps
, de l'ordre de .
Cela ne signifie pas que les nombres inférieurs à %eps
ou supérieurs à 1/%eps
sont inaccessibles.
help type
%eps
1/%eps
1/%inf
1/0.0000000000000000000000000000000000000003
1/300000000000000000000000000000000000000000
A=[1,2,3;4,5,6;7,8,8]
A/A
A*(1/A)
L'affichage de vecteurs avec de très grandes coordonnées réserve
quelques surprises.
v=2^2^[1:5]
v=2^2^[1:6] // etonnant non ?
v(1:5) // le calcul etait correct
v=2^2^[1:10]
log(v)./log(2)
2^[1:10]
A part les réels, les entrées d'une matrice peuvent être
des complexes, des
booléens, des polynômes ou des chaînes de caractères.
Les booléens sont %t
(true) et %f
(false)
pour les saisies, T
et F
pour les affichages.
Les matrices booléennes sont le résultat d'opérations
logiques matricielles (toujours terme à terme). Par exemple,
si A
et B
sont deux matrices (réelles) de même
taille, A<B
est la matrice des booléens
A(i,j)<B(i,j)
. Les opérateurs
and
et or
peuvent s'appliquer à l'ensemble des
éléments d'une matrice booléenne, à ses lignes
ou à ses colonnes selon
l'option choisie. La commande find(v)
retourne la liste des indices
des coordonnées ``vraies'' du vecteur booléen v
. Si
v
est une matrice, ses colonnes sont préalablement
concaténées. Si A
est une matrice et B
est
une matrice de booléens, la commande A(B)
extrait de A
les coordonnées correspondant aux indices pour lesquels
B
est à vrai. Cette propriété, fort utile en programmation, a
pour corollaire quelques comportements curieux : ones(B)
retournera une matrice de même taille que B
, mais
rand(B)
retourne un message d'erreur.
La fonction bool2s
transforme des booléens
en 0 ou 1.
x=rand(2,10)
b=x<0.5
bool2s(b)
and(b)
and(b,"c")
and(b,"r")
or(b,"r")
b1=b(1,:); b2=b(2,:);
b1 & b2
b1 | b2
find(b1)
y=[1:10]
y(b1)
A=[1,2,3;4,5,6;7,8,9]
x=[%t,%f,%t]
A(x,x)
A(~x,x)
B=rand(3,3)<0.5
A(B)
Opérateurs logiques |
== |
|
~ |
non |
< |
|
> |
|
<= |
|
>= |
|
& |
et |
| |
ou |
Les complexes sont définis à l'aide de la constante %i
() ou bien en affectant sqrt(-1)
à une nouvelle
variable. A noter que par défaut A'
est la transposée
conjuguée de A
. La transposée non conjuguée est
A.'
. Les fonctions classiques appliquées à un complexe
donnent toujours un résultat unique, même si mathématiquement
elles ne sont pas définies de façon unique (racine carrée, logarithme,
puissances).
A=[1,2;3,4]+%i*[0,1;2,3]
real(A)
imag(A)
conj(A)
A'
A.'
abs(A)
phasemag(A)
i=sqrt(-1)
%i*i
A*i
%e^(%i*%pi)
x=log(%i)
exp(x)
x=%i^(1/3)
x^3
Complexes |
real |
partie réelle |
imag |
partie imaginaire |
conj |
conjugué |
abs |
module |
phasemag |
argument (en degrés) |
Les polynômes et les fractions rationnelles constituent un type de données
particulier. On peut construire un polynôme comme résultat d'opérations
sur d'autres polynômes. Il existe par défaut un polynôme élémentaire,
%s
. On peut construire un polynôme d'une variable quelconque à
l'aide de la fonction poly
, en spécifiant soit ses racines (par
défaut), soit ses coefficients. Les
fractions rationnelles sont des quotients de polynômes.
Par défaut, Scilab effectue automatiquement les simplifications qu'il
reconnaît.
apropos poly
help poly
v=[1,2,3]
p1=poly(v,"x")
roots(p1)
p2=poly(v,"x","c")
coeff(p2)
p1+p2
p3=1+2*%s-3*%s^2
p1+p3 // erreur : variables differentes
p4=(%s-1)*(%s-2)*(%s-3)
p3/p4
Polynômes |
poly(v,"x") |
polynôme dont les racines sont les éléments
de v |
poly(v,"x","c") |
polynôme dont les coefficients sont les éléments
de v |
inv_coeff(v) |
idem |
coeff(P) |
coefficients du polynôme P |
roots(P) |
racines du polynôme P |
factors |
facteurs irréductibles réels d'un polynôme |
horner |
évaluation d'un polynôme |
Les chaînes de caractères, encadrées par des
doubles côtes ("..."
), permettent de
définir des expressions mathématiques, interprétables ensuite
comme des commandes à exécuter ou des fonctions à définir.
Elles servent aussi d'intermédiaire pour des échanges de données
avec des fichiers. On peut donc transformer et formater des nombres
en chaînes de caractères (voir apropos string
).
expression=["x+y","x-y"] // matrice de 2 chaines de caracteres
length(expression) // longueurs des 2 chaines
size(expression) // taille de la matrice
part(expression,2) // deuxieme caractere de chaque chaine
expression(1)+expression(2) // concatenation des deux chaines
x=1; y=2;
evstr(expression)
x=1; instruction="y=(x+1)^2"
execstr(instruction)
y
deff("p=plus(x,y)","p=x+y")
plus(1,2)
plus(2,3)
Chaînes de caractères |
evstr |
évaluer une expression |
deff |
définir une fonction |
execstr |
exécuter une instruction |
length |
longueur |
part |
extraire |
+ |
concaténer |
string |
transformer en chaîne |
Section : Vecteurs et matrices
Précédent : Opérations
Suivant : Fonctions
© B. Ycart (2001)