2+3*4 (2+3)*4 2^3*4 2^(3*4) 2^3^4 (2^3)^4
Toutes les opérations habituelles +, -, *, ^, /
sont matricielles. Tenter une opération entre
matrices de tailles non compatibles retournera en général un
message d'erreur, sauf si une des matrices est un scalaire. Dans
ce cas, l'opération (addition, multiplication, puissance)
s'appliquera terme à terme.
A=[1,2,3;4,5,6] A+ones(1,3) // erreur A+ones(A) A+10 A*10 A*ones(A) // erreur A*ones(A') A'*ones(A)
Il n'y a pas d'ambiguïté sur l'addition, mais il est souvent utile de pouvoir appliquer des multiplications terme à terme sans qu'elles soient interprétées comme des produits matriciels.
Dans ce cas on considère que les matrices sont des tableaux
qui doivent avoir les mêmes dimensions afin de garantir un sens
aux opérations terme à terme.
Le symbole d'opérateur, *
ou ^
, doit alors être
précédé d'un point, .*
ou .^
A=[1,2,3;4,5,6] A*A // erreur A*A' A.*A' // erreur A.*A A=[1,2;3,4] A^3 A.^3 // attention 2.^A 2^A // attention A.^A
La division est un cas particulier dangereux. Par défaut,
la division à droite,
A/B
, calcule une solution d'un système linéaire,
X*B=A
.
A=[1,2;3,4] B=[1,2;2,2] D=A./B X=A/B X*B
Si v
est un vecteur colonne, 1/v
retourne un
vecteur ligne w
tel que w*v=1
. Ceci engendre
des erreurs fréquentes, d'autant que 1./v
,
compris comme (1.0)/v
, retourne la même chose.
Il y a plusieurs solutions à ce problème, dont la plus
simple consiste à mettre des parenthèses : (1)./v
v=[1,2,3]' w=1/v w*v 1./v (1)./v ones(v)./v v.^(-1) v=v' w=1/v 1./v
Opérations matricielles | |
+ - |
addition, soustraction |
* ^ |
multiplication, puissance (matricielles) |
.* .^ |
multiplication, puissance terme à terme |
A\b |
solution de A*x=b |
b/A |
solution de x*A=b |
./ |
division terme à terme |