nextpreviouscontents
Suivant: Les entrées sorties Précédent:Types de données et variables
Voir:  Table des matièreIndex - Accueil

Calculer avec MATLAB


Les constantes

Les principales constantes sont:
 
3.1415926535897 : 3.1415926535897 
i : i 2 = - 1 
j : j 2 = - 1
eps : précision numérique relative
realmin : plus petit nombre à virgule flottante manipulable
realmax : plus grand nombre à virgule flottante manipulable
inf : infini. Est obtenu quand on essaie d'évaluer une expression dont le résultat excède realmax
NaN : not-a-number. Est obtenu quand on essaie d'effectuer une opération non-définie comme 0/0

 

Les valeurs des constantes eps, realmin et realmax dépendent de la machine sur laquelle MATLAB est installé. Par exemple sur une station SUN Ultra 1 on a eps = 2.2204e-16, realmin = 2.2251e-308 et realmax = 1.7977e+308. Les noms des constantes n'est pas réservé, c'est-à-dire qu'il est possible de définir des variables de même nom. Dans ce cas, l'identificateur fera référence à la variable définie par l'utilisateur et non plus à la constante MATLAB. On fera attention par exemple, si l'on utilise le type complex, à ne pas écrire de boucles ayant i ou j comme indices. Pour que l'identificateur fasse à nouveau référence à la constante MATLAB, il suffit de supprimer la variable de même nom de la mémoire par la commande clear.
 

>> pi = 0; cos(pi)
ans =
1
>> clear pi
>> cos(pi)
ans =
-1
>>

  
Opérations et fonctions portant sur les scalaires

Il est bien entendu possible d'utiliser MATLAB pour faire de simples additions (-:. Si x et y sont deux variables scalaires de type réel, x+y, x-y, x*y et x/y désignent les 4 opérations usuelles entre les valeurs de x et y dans  . Si x et y sont deux variables scalaires de type complexe, x+y, x-y,x*y et x/y désignent les 4 opérations usuelles entre les valeurs de x et y dans  . L'exponentiation s'obtient grâce au symbole ^ (la syntaxe est x^y).

La commande rem donne le reste (remainder) de la division entière de deux entiers (la syntaxe est rem(m,n)). Les commandes lcm(m,n) et gcd(m,n) retournent respectivement le plus petit multiple commun et le plus grand commun diviseur à deux entiers m et n. La commande factor(n) permet d'obtenir les termes de la décomposition en facteurs premiers de l'entier n.

Les fonctions mathématiques incorporées sont:
 
log(x) : logarithme néperien de x,
log10(x) : logarithme en base 10 de x,
exp(x) : exponentielle de x,
sqrt(x) : racine carrée de x (s'obtient aussi par x.^0.5),
abs(x) : valeur absolue de x,
sign(x) : fonction valant 1 si x est positif ou nul et 0 sinon.

 

Lorsque la fonction est définie sur le corps des nombres complexes l'argument peut être de type complexe. On dispose également de fonctions spécifiques aux complexes:
 
conj(z) : le conjugué de z,
abs(z)  : le module de z,
angle(z)  : argument de z,
real(z) : partie réelle de z,
imag(z) : partie imaginaire de z.

 

Les fonctions d'arrondis sont:
 
round(x) : entier le plus proche de x,
floor(x) : arrondi par défaut,
ceil(x) : arrondi par excès,
fix(x) : arrondi par défaut un réel positif et par excès un réel négatif.

 

Les fonctions trigonométriques et hyperboliques sont:
 
cos : cosinus,
acos : cosinus inverse (arccos),
sin : sinus,
asin : sinus inverse (arcsin),
tan : tangente,
atan : tangente inverse (arctan),
cosh : cosinus hyperbolique (ch),
acosh : cosinus hyperbolique inverse (argch),
sinh : sinus hyperbolique (sh),
asinh : sinus hyperbolique inverse (argsh),
tanh : tangente hyperbolique (th),
atanh : tangente hyperbolique inverse (argth).

Opérations et fonctions portant sur les vecteurs

Une particularité de MATLAB est de permettre d'effectuer des opérations de manière globale sur les éléments d'un vecteur de type réel ou complexe sans avoir à manipuler directement ses éléments. Si k est une variable scalaire et x un vecteur, l'instruction k*x multiplie tous les éléments de x par k. Si x et y sont deux vecteurs de longueur identique, l'instruction z = x+y (respectivement x-y) définit le vecteur z dont les éléments sont z(i) = x(i) + y(i) (respectivement z(i) = x(i) - y(i)). On obtient un vecteur z dont la i-eme composante est le produit (respectivement le quotient) de la i-emecomposante du vecteur x par la i-eme composante du vecteur y en effectuant l'instruction z = x.*y (respectivement z = x./y). Attention à ne pas oublier le point!

La commande cross(x,y) permet de calculer le produit vectoriel des deux vecteurs x et y. Il n'y a pas dans la version 5.1 de commande dédiée pour calculer le produit scalaire de deux vecteurs. Il s'obtient grâce à l'instruction sum(x.*y).  Dans les versions suivantes, la commande dot(x,y) permet de calculer le produit scalaire des deux vecteurs x et y.

Les fonctions mathématiques incorporées décrites au paragraphe 3.2 peuvent être utilisées avec un argument qui est un vecteur. La fonction est alors appliquée à tous les éléments du vecteur en même temps.
 

>> x = [1:10:100]; y=sqrt(x);
y =
Columns 1 through 7
1.0000 3.3166 4.5826 5.5678 6.4031 7.1414 7.8102
Columns 8 through 10
8.4261 9.0000 9.5394
>>


Il existe également quelques fonctions spécifiques aux vecteurs:
 
sum(x) : somme des éléments du vecteur x,
prod(x) : produit des éléments du vecteur x,
max(x) : plus grand élément du vecteur x,
min(x) : plus petit élément du vecteur x,
mean(x) : moyenne des éléments du vecteur x,
sort(x)  : ordonne les éléments du vecteur x par ordre croissant,
fliplr(x) : échange la position des éléments du vecteur x.

>> x=[3 1 2];
>> sum(x)
ans =
     6
>> prod(x)
ans =
     6
>> max(x)
ans =
     3
>> min(x)
ans =
     1
>> sort(x)
ans =
     1     2     3
>> fliplr(x)
ans =
     2     1     3  
>>
Citons enfin quelques fonctions logiques. Les commandes all et any servent à tester si les éléments d'un vecteur sont nuls ou non. Si v est un vecteur de valeurs numériques, all(v) retourne vrai (1) si tous les éléments du vecteur sont différents de 0 et faux (0) si au moins un élément vaut 0. any(v) retourne vrai (1) si au moins un élément du vecteur est différent de 0 et faux (0) si le vecteur est composé exclusivement de 0.

  
Opérations et fonctions portant sur les matrices

Si les opérandes sont des matrices, les opérations + (addition), - (soustraction), * (multiplication), ^ (exponentiation), sont alors les opérations matricielles usuelles. Ainsi A*B désigne le produit de la matrice A par la matrice B, A+B désigne la somme de ces deux matrices et A^2 le carré de la matrice A.
>> A=[1 2 3; 4 5 6]
A =
    1 2 3
    4 5 6
>> B = [1 1; 2 2; 3 3]
B =
     1 1
     2 2
     3 3
>> C = A*B
C =
     14 14
     32 32
>> C^2
ans =
     644  644
    1472 1472
>>
Si les dimensions des matrices A et B sont incompatibles avec l'opération matricielle, MATLAB renvoi un message d'erreur:
>> A+B

??? Error using ==> + Matrix dimensions must agree.
>>
En plus des opérations matricielles usuelles, il est possible d'effectuer des opérations entre matrices <<élément par élément>>. Pour cela, il faut faire précéder l'opérateur d'un point (.). Ainsi si A et B sont 2 matrices de même dimension, on obtient la matrice dont le terme d'indices (i,j) est le produit des deux termes d'indices (i,j) des matrices A et B par la commande A.*B. De même la commande A.^2 fournit la matrice dont les termes sont les carrés des termes de la matrice A. Bien entendu les commandes A.+B et A+B donnent le même résultat.
>> A=[1 2 3; 4 5 6]
A =
    1 2 3
    4 5 6
>> B=[1 2 3; 1 2 3]
B =
     1 2 3
     1 2 3
>> A.*B
ans =
     1 4 9
     4 10 18
>> A.^2
ans =
     1     4     9
    16    25    36
>>
Les fonctions matricielles les plus courantes sont:
 
det(A) : renvoie le déterminant de la matrice carrée A.
eig(A) : renvoie les valeurs propres  (eigenvalues) de la matrice carrée A. Si l'on souhaite également les vecteurs propres  on exécutera [V,D] = eig(A) qui renvoie une matrice diagonale D formée des valeurs propres de A et une matrice V dont les vecteurs colonnes sont les vecteurs propres correspondant.
poly(A) : renvoie les coefficients du polynôme caractéristique  associé à la matrice carrée A. On sera vigilant à l'ordre dans lequel sont rangés les coefficients: le premier élément du vecteur est le coefficient du monôme de plus haut degré. Ainsi dans l'exemple suivant il faut lire p(x) = x3 - 6 x2 - 72 x -27
>> A = [1 2 3 ; 4 5 6 ; 7 8 0]; p = poly(A)
p =
     1    -6    -72    -27
inv(A) : renvoie l'inverse de la matrice carrée A.
rank(A) : renvoie le rang de la matrice carrée A.
trace(A) : renvoie la trace de la matrice A.
expm(A) : renvoie l'exponentielle matricielle de A.

 

On peut obtenir les différentes normes  d'une matrice A grâce à la commande norm.
 
norm(A) : renvoie la norme 2 de la matrice A.
norm(A,2) : même chose que norm(A).
norm(A,1) : norme 1 de la matrice A .
norm(A,inf) : norme infini de la matrice A, .
norm(A,'fro') : norme de Frobenius de la matrice A, .

 

Ces fonctions matricielles incorporée de MATLAB peuvent être utilisées avec un argument qui est une matrice << sparse >>. Les exceptions sont les fonctions rank, expm et norm qui nécessitent de passer en stockage full (on exécutera donc rank(full(B)) par exemple).

Résolution de systèmes linéaires

La commande MATLAB / (backslash) est la commande générique pour résoudre un système linéaire. L'algorithme mis en oeuvre dépend de la structure de la matrice A du système. MATLAB utilise dans l'ordre les méthodes suivantes: Dans le cas des matrices stockées sous forme sparse, des algorithmes particuliers sont mis en oeuvre. Chacune des méthodes précédentes peut être utilisée de manière spécifique grâce aux commandes chol, lu, qr. Il est également possible d'utiliser des méthodes itératives. Les commandes cgs, bicg, bicgstab mettent par exemple en oeuvre des méthodes de type gradient conjugué .
>> A=[1 2 ;3 4]; b=[1 1]';
>>  x= A\b
x =
    -1
     1
>> A*x
ans =
     1
     1
>>

Les polynômes

Sous MATLAB le polynôme de degré n, p(x) = an xn + an-1 xn-1 + . . . + a1 x + a0 est défini par un vecteur p de dimension n+1 contenant les coefficients {ai}{i=0,...,n} rangés dans l'ordre décroissant des indices. C'est-à-dire que l'on a p(1) = an , . . . , p(n+1) = a0. La commande polyval permet d'évaluer le polynôme p (la fonction polynômiale) en des points donnés. La syntaxe est polyval(p,x)x est une valeur numérique ou un vecteur. Dans le second cas on obtient un vecteur contenant les valeurs de la fonction polynômiale aux différents points spécifiés dans le vecteur x. Utilisée avec la commande fplot, la commande polyval permet de tracer le graphe de la fonction polynômiale sur un intervalle [xmin , xmax] donné. La syntaxe de l'instruction est
fplot('polyval([ a_n, ..., a_0] , x)' , [x_min , x_max]).

Voici par exemple comment définir le polynôme p(x) = x2 -1. Le graphe de la fonction polynômiale est présenté à la figure 3.

>> p = [ 1, 0, -1];
>> polyval(p,0)
ans =
    -1
>> polyval(p,[-2,-1,0,1,2])
ans =
     3     0    -1     0     3
>> fplot('polyval([ 1, 0, -1] , x)' , [-3,3]), grid
>>
 
Figure 3: Graphe de la fonction polynômiale p(x) = x2 -1.

On obtient les racines du polynôme p grâce à l'instruction roots(p).

L'instruction polypermet d'obtenir la représentation canonique p(x) = an xn + an-1 xn-1 + . . . + a1 x + a0 d'un polynôme de degré n dont on connait les n+1 racines {xi}{i=0,...,n}. Les coefficients {ai}{i=0,...,n} sont obtenus sous forme d'un vecteur p et sont rangés dans l'ordre décroissant des indices. C'est-à-dire que p(1) = an , . . . , p(n+1) = a0.

>> r = roots(p)
r =
   -1.0000
    1.0000 
>> poly(r)
ans =
    1.0000    0.0000   -1.0000
>>


nextpreviouscontents
Suivant: Les entrées sorties Précédent:Types de données et variables
Voir:  Table des matièreIndex - Accueil

(c) Stéphane Balac - Centre de Mathématiques - INSA de Lyon