# backslash

(\) divisão matricial direita-esquerda

## Seqüência de Chamamento

    x=A\b

## Descrição

(\) denota a divisão matricial direita-esquerda. `x=A\b` é a solução para `A*x=b`.

Se `A` é quadrada e não-singular, `x=A\b` (unicamente definida) é equivalente a `x=inv(A)*b` (mas as computações são menos custosas).

Se `A` não é quadrada, `x` é uma solução de mínimo quadrado, i.e., `norm(A*x-b)` é mínima (norma euclidiana). Se `A` é de posto coluna cheio, a solução de mínimo quadrado, `x=A\b` , é unicamente definida (há um único `x` que minimiza `norm(A*x-b)`). Se `A`não é de posto coluna cheio, então a solução de mínimo quadrado não é única e `x=A\b` , em geral, não é a solução com norma mínima (a solução com norma mínima é `x=pinv(A)*b`).

`A.\B` é a matriz com entrada `(i,j)` igual a `A(i,j)\B(i,j)`. Se `A` (ou `B`é um escalar, `A.\B` é equivalente a `A*ones(B).\B` (ou `A.\(B*ones(A))`

`A\.B` é um operador sem significado predefinido. Pode ser usado para definir um novo operador (ver overloading) com a mesma precedência que * ou /.

## Exemplos

    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

    // A benchmark of several linear solvers

    [A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/examples/bcsstk24.rsa");

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

    tic();
    res = umfpack(A,'\',b);
    mprintf('\ntime needed to solve the system with umfpack: %.3f\n',toc());

    tic();
    res = linsolve(A,b);
    mprintf('\ntime needed to solve the system with linsolve: %.3f\n',toc());

    tic();
    res = A\b;
    mprintf('\ntime needed to solve the system with the backslash operator: %.3f\n',toc());

## Ver Também

- slash
- inv
- pinv
- percent
- ieee
- linsolve
- umfpack