3. Scalaires, constantes, opérateurs et fonctions de base

3.1 Scalaires et constantes

MATLAB/Octave ne différencie fondamentalement pas une matrice à N-dimension (tableau) d'un vecteur ou d'un scalaire, et ces éléments peuvent être redimensionnés dynamiquement. Une variable scalaire n'est donc, en fait, qu'une variable matricielle "dégénérée" de 1x1 élément (vous pouvez le vérifier avec size(variable_scalaire)).

Ex de définition de scalaires : a=12.34e-12, w=2^3, r=sqrt(a)*5, s=pi*r^2 , z=-5+4i

MATLAB/Octave offre un certain nombre de constantes utiles. Celles-ci sont implémentées par des "built-in functions" . Le tableau ci-dessous énumère les constantes les plus importantes.

Constante Description
pi 3.14159265358979 (la valeur de "pi")
i ou j Racine de -1 (sqrt(-1)) (nombre imaginaire)
exp(1) ou e 2.71828182845905 (la valeur de "e")
Inf ou inf Infini (par exemple le résultat du calcul 5/0)
NaN ou nan Indéterminé (par exemple le résultat du calcul 0/0)
NA Valeur manquante
realmin Environ 2.2e-308 : le plus petit nombre positif utilisable (en virgule flottante double précision)
realmax Environ 1.7e+308 : le plus grand nombre positif utilisable (en virgule flottante double précision)
eps Environ 2.2e-16 : c'est la précision relative en virgule flottante double précision (ou le plus petit nombre représentable par l'ordinateur qui est tel que, additionné à un nombre, il crée un nombre juste supérieur)
true Vrai. Correspond à 1, mais notez que n'importe quelle valeur numérique différente de 0 ou chaîne non vide est aussi assimilée à "vrai"
Ex: si nb vaut 0, la séquence if nb, disp('vrai'), else, disp('faux'), end retourne "faux",
mais si nb vaut n'importe quelle autre valeur, elle retourne "vrai"
false Faux. Correspond à 0. Une chaîne vide est aussi assimilée à "faux"


MATLAB/Octave manipule en outre des variables spéciales de nom prédéfini. Les plus utiles sont décrites dans le tableau ci-dessous.

Variable Description
ans Variable sur laquelle MATLAB retourne le résultat d'une expression qui n'a pas été affectée à une variable, agissant donc comme nom de variable par défaut pour les résultats
nargin Nombre d'arguments passés à une fonction
nargout Nombre d'arguments retournés par une fonction

3.2 Opérateurs de base

La commande help ops décrit l'ensemble des opérateurs et caractères spéciaux sous MATLAB/Octave.

3.2.1 Opérateurs arithmétiques de base

Les opérateurs arithmétiques de base sous MATLAB/Octave sont les suivants (voir le chapitre "Opérateurs matriciels" pour leur usage dans un contexte matriciel) :

Opérateur ou fonction Description Précédence
+
ou plus(v1, v2, v3 ...)
Addition 4

{var2=}++var1

{var2=}var1++

Pré- ou post-incrémentation (sous Octave seulement) :

• pré-incrémentation: incrémente d'abord var1 de 1, puis affecte le résultat à var2 (ou l'affiche, si var2 n'est pas spécifiée et que l'instruction n'est pas suivie de ;) ; donc équivalent à var1=var1+1; var2=var1;
• post-incrémentation: affecte d'abord var1 à var2 (ou affiche la valeur de var1 si var2 n'est pas spécifiée et que l'instruction n'est pas suivie de ;), puis incrémente var1 de 1 ; donc équivalent à var2=var1; var1=var1+1;

Si var1 est un tableau, agit sur tous ses éléments.

 
-
ou minus(v1, v2)
Soustraction 4

{var2=}--var1

{var2=}var1--

Pré- ou post-décrémentation (sous Octave seulement) :

• pré-décrémentation: décrémente d'abord var1 de 1, puis affecte le résultat à var2 (ou l'affiche, si var2 n'est pas spécifiée et que l'instruction n'est pas suivie de ;) ; donc équivalent à var1=var1-1; var2=var1;
• post-décrémentation: affecte d'abord var1 à var2 (ou affiche la valeur de var1 si var2 n'est pas spécifiée et que l'instruction n'est pas suivie de ;), puis décrémente var1 de 1 ; donc équivalent à var2=var1; var1=var1-1;

Si var1 est un tableau, agit sur tous ses éléments.

 
*
ou mtimes(v1, v2, v3 ...)
Multiplication 3
/
ou mrdivide(v1, v2)
Division standard 3
\
ou mldivide(v1, v2)
Division à gauche
Ex: 14/7 est équivalent à 7\14
3
^ ou **
ou mpower(v1, v2)
Puissance
Ex: 4^2 => 16, 64^(1/3) => 4 (racine cubique)
2
( ) Parenthèses (pour changer ordre de précédence) 1


Les expressions sont évaluées de gauche à droite avec l'ordre de précédence classique : puissance, puis multiplication et division, puis addition et soustraction. On peut utiliser des parenthèses ( ) pour modifier cet ordre (auquel cas l'évaluation s'effectue en commençant par les parenthèses intérieures).
Ex: a-b^2*c est équivalent à a-((b^2)*c) ; mais 8 / 2*4 retourne 16, alors que 8 /(2*4) retourne 1

L'usage des fonctions plutôt que des opérateurs s'effectue de la façon suivante :
Ex: à la place de 4 - 5^2 on pourrait par exemple écrire minus(4,mpower(5,2))

3.2.2 Opérateurs relationnels

Les opérateurs relationnels permettent de faire des tests numériques en construisant des "expressions logiques", c'est-à-dire des expressions retournant les valeurs vrai ou faux.

Les opérateurs de test ci-dessous "pourraîent" être appliqués à des chaînes de caractères, mais pour autant que la taille des 2 chaînes (membre de gauche et membre de droite) soit identique ! Cela retourne alors un vecteur logique (avec autant de 0 ou de 1 que de caractères dans ces chaînes). Pour tester l'égalité exacte de chaînes de longueur quelconque, on utilisera plutôt les fonctions strcmp ou isequal (voir chapitre "Chaînes de caractères").

Les opérateurs relationnels MATLAB/Octave sont les suivants (voir help relop) :

Opérateur ou fonction Description
== ou fonction eq Test d'égalité
~= ou != ou fonction ne Test de différence
< ou fonction lt Test d'infériorité
> ou fonction gt Test de supériorité
<= ou fonction le Test d'infériorité ou égalité
>= ou fonction ge Test de supériorité ou égalité

Ex:
• si l'on a a=3, b=4, c=3, l'expression a==b ou la fonction eq(a,b) retournent alors "0" (faux), et a==c ou >eq(a,c) retournent "1" (vrai)
• si l'on définit le vecteur A=1:5, l'expression A>3 retourne alors le vecteur [0 0 0 1 1]
• le test 'abc'=='axc' retourne le vecteur [1 0 1] ; mais le test 'abc'=='vwxyz' retourne une erreur (chaînes de tailles différentes)

3.2.3 Opérateurs logiques

Les opérateurs logiques ont pour arguments des expressions logiques et retournent les valeurs logiques vrai (1) ou faux (0). Les opérateurs logiques principaux sont les suivants (voir help relop) :

Opérateur ou fonction Description
~ expression
not(expression)
! expression
Négation logique
(rappel: NON 0 => 1 ; NON 1 => 0)
expression1 & expression2
and(expression1, expression2)
ET logique. Si les expressions sont des tableaux, retourne un tableau
(rappel: 0 ET 0 => 0 ; 0 ET 1 => 0 ; 1 ET 1 => 1)
expression1 && expression2 ET logique "short circuit". A la différence de & ou and, cet opérateur est plus efficace, car il ne prend le temps d'évaluer expression2 que si expression1 est vraie.
En outre:
- sous Octave: retourne un scalaire même si les expressions sont des tableaux
- sous MATLAB: n'accepte pas que les expressions soient des tableaux
expression1 | expression2
or(expression1, expression2)
OU logique. Si les expressions sont des tableaux, retourne un tableau
(rappel: 0 OU 0 => 0 ; 0 OU 1 => 1 ; 1 OU 1 => 1)
expression1 || expression2 OU logique "short circuit". A la différence de | ou or, cet opérateur est plus efficace, car il ne prend le temps d'évaluer expression2 que si expression1 est fausse.
En outre:
- sous Octave: retourne un scalaire même si les expressions sont des tableaux
- sous MATLAB: n'accepte pas que les expressions soient des tableaux
xor(expr1, expr2 {, expr3...}) OU EXCLUSIF logique (rappel: 0 OU EXCL 0 => 0 ; 0 OU EXCL 1 => 1 ; 1 OU EXCL 1 => 0)
Pour des opérandes binaires, voir les fonctions bitand, bitcmp, bitor, bitxor...

Ex: si A=[0 0 1 1] et B=[0 1 0 1], alors :
  • A | B ou or(A,B) retourne le vecteur [0 1 1 1]
  • A & B ou and(A,B) retourne le vecteur [0 0 0 1]
  • A || B ne fonctionne ici (avec des vecteurs) que sous Octave, et retourne le scalaire 0
  • A && B ne fonctionne ici (avec des vecteurs) que sous Octave, et retourne le scalaire 0

3.3 Fonctions de base

3.3.1 Fonctions mathématiques

Utilisées sur des tableaux (vecteurs, matrices), les fonctions ci-dessous seront appliquées à tous les éléments et retourneront donc également des tableaux.

Pour les fonctions trigonométriques, les angles sont exprimés en [radians].
Rappel : on passe des [gons] aux [radians] avec les formules : radians = 2*pi*gons/400, et gons = 400*radians/2/pi.

Les principales fonctions mathématiques disponibles sous MATLAB/Octave sont les suivantes :

Fonction Description
sqrt(var) Racine carrée de var.
Remarque : pour la racine n-ème de var, faire var^(1/n)
exp(var) Exponentielle de var
log(var)
log10(var)
log2(var)
Logarithme naturel de var (de base e), respectivement de base 10, et de base 2

Ex: log(exp(1)) => 1, log10(1000) => 3, log2(8) => 3

cos(var) et acos(var) Cosinus, resp. arc cosinus, de var. Angle exprimé en radian
sin(var) et asin(var) Sinus, resp. arc sinus, de var. Angle exprimé en radian
sec(var) et csc(var) Sécante, resp. cosécante, de var. Angle exprimé en radian
tan(var) et atan(var) Tangente, resp. arc tangente, de var. Angle exprimé en radian
cot(var) et acot(var) Cotangente, resp. arc cotangente, de var. Angle exprimé en radian
atan2(dy,dx) Angle entre -pi et +pi correspondant à dx et dy
cart2pol(x,y {,z}) et
pol2cart(th,r {,z})
Passage de coordonnées carthésiennes en coordonnées polaires,
et vice-versa
cosh, acosh, sinh, asinh,
sech, asch,
tanh, atanh, coth, acoth
Fonctions hyperboliques...
factorial(n) Factorielle de n (c'est-à-dire : n*(n-1)*(n-2)*...*1). La réponse retournée est exacte jusqu'à la factorielle de 20 (au-delà, elle est calculée en virgule flottante double précision, c'est-à-dire à une précision de 15 chiffres avec un exposant)

rand
rand(n)
rand(n,m)
Génération de nombres aléatoires réels compris entre 0.0 et 1.0 selon une distribution uniforme standard :
- génère un nombre aléatoire
- génère une matrice carrée n x n de nombres aléatoires
- génère une matrice n x m de nombres aléatoires

Voir encore les fonctions : randn (distribution normale standard), randg (distribution Gamma), rande (distribution exponentielle), randp (distribution de Poisson)


randi(imax {, n {,m} } )
randi([imin, imax] {,n{,m}})
Génération de nombres aléatoires entiers selon une distribution uniforme standard :
- nombre(s) entier(s) compris entre 1 et imax
- nombre(s) entier(s) compris entre imin et imax

En l'absence des paramètres n et m, un seul nombre est généré. Avec le paramètre n, une matrice carrée de n x n nombres est générée. Avec les paramètres n et m, c'est une matrice n x m qui est générée.

fix(var)
round(var)
floor(var)
ceil(var)
Troncature à l'entier, dans la direction de zéro (donc 4 pour 4.7, et -4 pour -4.7)
Arrondi à l'entier le plus proche de var
Le plus grand entier qui est inférieur ou égal à var
Le plus petit entier plus grand ou égal à var

Ex:
fix(3.7) et fix(3.3) => 3, fix(-3.7) et fix(-3.3) => -3
round(3.7) => 4, round(3.3) => 3, round(-3.7) => -4, round(-3.3) => -3
floor(3.7) et floor(3.3) => 3, floor(-3.7) et floor(-3.3) => -4
ceil(3.7) et ceil(3.3) => 4, ceil(-3.7) et ceil(-3.3) => -3

mod(var1,var2)
rem(var1,var2)
Fonction var1 "modulo" var2
Reste ("remainder") de la division de var1 par var2

Remarques:
- var1 et var2 doivent être des scalaires réels ou des tableaux réels de même dimension
- rem a le même signe que var1, alors que mod a le même signe que var2
- les 2 fonctions retournent le même résultat si var1 et var2 ont le même signe

Ex: mod(3.7, 1) et rem(3.7, 1) retournent 0.7,
mais mod(-3.7, 1) retourne 0.3, et rem(-3.7, 1) retourne -0.7

idivide(var1, var2, 'regle') Division entière. Fonction permettant de définir soi-même la règle d'arrondi.
abs(var) Valeur absolue (positive) de var

Ex: abs([3.1 -2.4]) retourne [3.1 2.4]

sign(var) (signe) Retourne "1" si var>0, "0" si var=0 et "-1" si var<0

Ex: sign([3.1 -2.4 0]) retourne [1 -1 0]

real(var) et imag(var) Partie réelle, resp. imaginaire, de la var complexe


Voir help elfun où sont notamment encore décrites : autres fonctions trigonométriques (sécante, cosécante, cotangente), fonctions hyperboliques, manipulation de nombres complexes... Et voir encore help specfun pour une liste des fonctions mathématiques spécialisées (Bessel, Beta, Jacobi, Gamma, Legendre...).

3.3.2 Fonctions de changement de type numérique

Au chapitre "Généralités sur les nombres" on a décrit les différents types relatifs aux nombres : réels virgule flottante (double ou simple précision), et entiers (64, 32, 16 ou 8 bits). On décrit ci-dessous les fonctions permettant de passer d'un type à l'autre :

Fonction Description
var2 = single(var1)
var4 = double(var3)
Retourne, dans le cas où var1 est une variable réelle double précision ou entière, une variable var2 en simple précision
Retourne, dans le cas où var3 est une variable réelle simple précision ou entière, une variable var4 en double précision
int8,int16,int32,int64

uint8,uint16,uint32,uint64

Fonctions retournant des variables de type entiers signés, respectivement stockés sur 8 bits, 16 bits, 32 bits ou 64 bits
ou des entiers non signés (unsigned) stockés sur 8 bits, 16 bits, 32 bits ou 64 bits

3.3.3 Fonctions logiques

Les fonctions logiques servent à réaliser des tests. Comme les opérateurs relationnels et logiques (voir plus haut), elles retournent en général les valeurs vrai (true ou 1) ou faux (false ou 0). Il en existe un très grand nombre dont en voici quelque-unes :

Fonction Description
isfloat(var) Vrai si la variable var est de type réelle (simple ou double précision), faux sinon (entière, chaîne...)
isepmty(var) Vrai si la variable var est vide (de dimension 1x0), faux sinon.
Notez bien qu'il ne faut ici pas entourer var d'apostrophes, contrairement à la fonction exist.

Ex: si vect=5:1 ou vect=[], alors isempty(vect) retourne "1"

ischar(var) Vrai si var est une chaîne de caractères, faux sinon. Ne plus utiliser isstr qui va disparaître.
exist ('objet'
   {,'var|builtin|file|dir'})
Vérifie si l'objet spécifié existe. Retourne "1" si c'est une variable, "2" si c'est un M-file, "3" si c'est un MEX-file, "4" si c'est un MDL-file, "5" si c'est une fonction builtin, "6" si c'est un P-file, "7" si c'est un directoire. Retourne "0" si aucun objet de l'un de ces types n'existe.
Notez bien qu'il faut ici entourer objet d'apostrophes, contrairement à la fonction isempty !

Ex: exist('sqrt') retourne "5", exist('axis') retourne "2", exist('variable_inexistante') retourne "0"

isinf(var) Vrai si la variable var est infinie positive ou négative (Inf ou -Inf)
isnan(var) Vrai si la variable var est indéterminée (NaN)
isfinite(var) Vrai si la variable var n'est ni infinie ni indéterminée

Ex: isfinite([0/0 NaN 4/0 pi -Inf]) retourne [0 0 0 1 0]

Les fonctions logiques spécifiques aux tableaux (vecteurs, matrices N-D) sont présentées au chapitre "Fonctions matricielles".


Documentation CC BY-SA 4.0 / J.-D. BONJOUR () / EPFL-ENAC-IT / Rév. 12-09-2015       ↵ Table des matières