Opérations arithmétiques sur les tableaux

Nous avons vu en préambule que MATLAB ne faisait pas de distinction forte entre tableaux et matrices. En fait, pour MATLAB, tout est tableau, et une matrice n'est qu'un tableau qui a une signification mathématique particulière.

Ainsi, si historiquement MATLAB proposait principalement des fonctions pour les calculs impliquant des matrices, aujourd'hui le spectre fonctionnel s'est largement étendu, et MATLAB propose des fonctions pour tous les calculs sur des données numériques, tabulées en tableau, ou matrices au sens mathématique du terme.

Dans ce chapitre, nous passons en revue les opérations arithmétiques que nous pouvons réaliser avec des données tabulées ou des matrices.

Addition et soustraction

Les deux opérateurs sont les mêmes que pour les scalaires, à savoir + et -. À partir du moment où les deux tableaux concernés ont la même taille, le tableau résultant est obtenu en ajoutant ou soustrayant les termes de chaque tableau.

Multiplication, division et puissance terme à terme

Ces opérateurs sont notés .*, ./ et .^ (attention à ne pas oublier le point).

Ils sont prévus pour effectuer des opérations terme à terme sur deux tableaux de même taille.

Ces opérations sont fondamentales lorsque l'on veut tracer des courbes, et nous le reverrons spécifiquement dans ce cas d'usage, ou plus généralement lorsque l'on souhaite effectuer ces opérations arithmétiques sur un ensemble de données tabulées.

Multiplication, division et puissance au sens matriciel

Multiplication

Puisque l'on peut manipuler des matrices, MATLAB propose aussi ces opérations matricielles. La multiplication se note simplement * et ne doit pas être confondue avec la multiplication terme à terme (qui par définition ne donne pas le même résultat).

Il va de soi que si l'on écrit A*B, le nombre de colonnes de \(A\) doit être égal au nombre de lignes de \(B\) pour que la multiplication fonctionne.

Division

La division matricielle se définit comme étant la multiplication par l'inverse de la matrice. Ainsi A/B représente la matrice \(A\) multipliée (au sens matriciel) par la matrice inverse de \(B\).

Attention

Même si la matrice \(B\) est régulière, elle peut être mal conditionnée, et la méthode numérique utilisée pour calculer son inverse peut renvoyer des résultats erronés (cf. cours sur les systèmes linéaires).

Complément

Il existe aussi une division à gauche qui se note \.

Ainsi la syntaxe A\B signifie l'inverse de \(A\) multiplié par \(B\). Ce symbole peut être aussi utilisé pour résoudre des systèmes linéaires : si \(v\) est un vecteur, A\v représente mathématiquement \(A^{-1}v\) c'est-à-dire la solution du système linéaire \(Ax = v\).

Puissance

La puissance \(n^{\textrm{ième}}\) d'une matrice représente cette matrice multipliée, au sens matricielle,\(n\) fois par elle-même.

Distinction entre opérations terme à terme et opérations matricielles

Il est fondamental de bien distinguer l'opération de multiplication (et par voie de conséquence de division et de puissance) définie terme à terme de celle définie pour les matrices.

Dans bien des cas (et notamment si les matrices sont carrées et de même dimensions), les deux types d'opérations peuvent être réalisés, sans produire d'erreur de syntaxe pour le langage MATLAB, mais produiront des résultats numériques totalement différents.

Exemple

Pour bien montrer la différence entre les opérateurs .* et *, prenons un exemple trivial faisant intervenir la matrice identité multipliée à la matrice \(\left[\begin{array}{cc}1 & 2\\3 & 4\end{array} \right]\). Voici la multiplication au sens des matrices :

>> [1 0; 0 1] * [1 2; 3 4]
 
ans =
    1   2
    3   4

dans ce cas-ci, on retrouve la matrice \(\left[\begin{array}{cc}1 & 2\\3 & 4\end{array} \right]\), par définition de ce qu'est la matrice identité.

Et maintenant regardons la multiplication terme à terme :

>> [1 0; 0 1] .* [1 2; 3 4]
 
ans =
    1   0
    0   4

Les résultats sont totalement différents. C'est à vous de savoir quelle est l'opération que vous souhaitez réaliser !

Fondamental

Si vous manipulez des données tabulées, les opérations que vous allez réaliser sont nécessairement terme à terme ; les opérateurs *, / et ^ seront alors précédés d'un point.

Si vous réalisez des calculs matriciels, les opérateurs n'ont pas de point.

Complément

Pour ces trois opérations, pour tableaux ou matrices, il existe aussi des fonctions qui peuvent remplacer les opérateurs :

Opérateurs et fonctions équivalentes

opérations terme à terme

opérations matricielles

A.*B

times(A,B)

A*B

mtimes(A,B)

A./B

rdivide(A,B)

A/B

mrdivide(A,B)

A.^B

power(A,B)

A^B

mpower(A,B)

Synthèse

Le tableau suivant résume les différents opérateurs applicables aux matrices ou tableaux.

Les différents opérateurs applicables aux matrices ou tableaux

Opérateur MATLAB

Écriture mathématique

Terme général

A

\(A\)

\(A_{ij}\)

B

\(B\)

\(B_{ij}\)

A+B

\(A+B\)

\(A_{ij}+B_{ij}\)

A-B

\(A-B\)

\(A_{ij}-B_{ij}\)

A.*B

\(A_{ij}B_{ij}\)

A./B

\(A_{ij}/B_{ij}\)

A.^B

\(A_{ij}^{B_{ij}}\)

A.^s

\(A_{ij}^{s}\)

A*B

\(AB\)

\(\sum_k A_{ik}B_{kj}\)

A/B

\(AB^{-1}\)

A\B

\(A^{-1}B\)

A^n

\(A^{n}\)