![]() |
3. Scalaires, constantes, opérateurs et fonctions de base |
![]() |
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 |
![]() |
3.14159265358979 (la valeur de "pi") |
![]() |
Racine de -1 (sqrt(-1)) (nombre imaginaire) |
exp(1) ou ![]() |
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) |
![]() |
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) |
![]() |
Valeur logique Vrai, mais s'affiche 1 par un disp. Mais notez que n'importe quelle valeur numérique différente de 0 ou une chaîne non vide sont aussi assimilées à Vrai. En fait true est une fonction (voir chapitre "Fonctions matricielles").
Ex: si nb vaut 0, la séquence if nb, disp('vrai'), else, disp('faux'), end retourne "faux", |
![]() |
Valeur logique Faux, mais s'affiche 0 par un disp. Notez que la valeur 0 ou une chaîne vide sont aussi assimilées à Faux. En fait false est une fonction (voir chapitre "Fonctions matricielles"). |
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 |
![]() |
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 |
La commande help ops décrit l'ensemble des opérateurs et caractères spéciaux sous MATLAB/Octave.
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 |
![]()
|
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; Si var1 est un tableau, agit sur tous ses éléments. |
|
- ou minus(v1, v2) |
Soustraction | 4 |
![]()
|
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; 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))
![]() 8:15 min |
Présentation des opérateurs relationnels et logiques |
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 |
![]() |
Test d'égalité |
~= ou ![]() |
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)
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 |
![]() not(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) |
![]() |
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 - ![]() |
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) |
![]() |
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 - ![]() |
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
![]() 8:15 min |
Présentation des fonctions mathématiques, statistiques et de calcul matriciel |
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. Pour la conversion à partir ou en [degrés], voir deg2rad et rad2deg.
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 |
radians = deg2rad(degrés) degrés = rad2deg(radians) |
Conversion de degrés en radians, et vice-versa. |
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), |
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: |
mod(var1,var2)
rem(var1,var2) |
Fonction var1 "modulo" var2
Reste ("remainder") de la division de var1 par var2
Remarques:
Ex: mod(3.7, 1) et rem(3.7, 1) retournent 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...).
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 |
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".