backslash (\) division matricielle à gauche

## Séquence d'appel

    X = A \ B

## Description

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 `/`.

## Exemples

    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

    // Rang non maximal
    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/demos/bcsstk24.rsa");

    b = zeros(size(A,1),1);

    tic();
    res = umfpack(A,'\',b);
    mprintf('\ntemps nécessaire à la résolution du système avec umfpack: %.3f\n',toc());

    tic();
    res = linsolve(A,b);
    mprintf('\ntemps nécessaire à la résolution du système avec linsolve: %.3f\n',toc());

    tic();
    res = A\b;
    mprintf('\ntemps nécessaire à la résolution du système avec l''opérateur backslash: %.3f\n',toc());

## Voir aussi

- slash
- inv
- pinv
- linsolve
- umfpack
- kron .\.
- overloading

## Historique

5.5.0 The threshold level which switches between Gaussian Elimination with row pivoting and linear least squares when computing A\B is decreased from sqrt(eps) to eps.