backslash (\) — division matricielle à gauche
x=A\b
L'anti-slash représente la division matricielle à gauche.
x=A\b
est une solution de A*x=b
.
Si A
est carrée et régulière x=A\b
(unique) est équivalent mathématiquement à x=inv(A)*b
(dont le calcul est par contre beaucoup plus coûteux).
Si A
n'est pas carrée, x
est une solution au sens des moindres carrés, c'est à dire que norm(A*x-b)
est minimale (norme euclidienne). Si A
est de rang maximal (colonnes linéairement indépendantes), la solution au sens des moindres carrés, x=A\b
, est unique (le vecteur x
minimisant norm(A*x-b)
est unique).
Si A
n'est pas de rang maximal, cette solution n'est pas unique, et x=A\b
, en général, n'est pas la solution de norme minimale (la solution de norme minimale est x=pinv(A)*b
).
A.\B
est la matrice dont le terme (i,j)
est égal à A(i,j)\B(i,j)
.
Si A
(ou B
) est un scalaire A.\B
est équivalent à A*ones(B).\B
(or A.\(B*ones(A))
A\.B
est un opérateur dont la signification n'est pas prédéfinie. il peut être utilisé pour définir de nouveaux opérateurs (voir "overloading") avec la même priorité que * ou /.
A=rand(3,2);b=[1;1;1]; x=A\b; y=pinv(A)*b; x-y A=rand(2,3);b=[1;1]; x=A\b; y=pinv(A)*b; x-y, A*x-b, A*y-b A=rand(3,1)*rand(1,2); b=[1;1;1]; x=A\b; y=pinv(A)*b; A*x-b, A*y-b A=rand(2,1)*rand(1,3); b=[1;1]; x=A\b; y=pinv(A)*b; A*x-b, A*y-b // Une comparaison de différents solveurs linéaire creux [A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/examples/bcsstk24.rsa"); b = 0*ones(size(A,1),1); tic(); res = umfpack(A,'\',b); printf('\ntemps nécessaire à la résolution du système avec umfpack: %.3f\n',toc()); tic(); res = linsolve(A,b); printf('\ntemps nécessaire à la résolution du système avec linsolve: %.3f\n',toc()); tic(); res = A\b; printf('\ntemps nécessaire à la résolution du système avec l'opérateur backslash: %.3f\n',toc());