Change language to:
Français - 日本語 - Português

Please note that the recommended version of Scilab is 2024.1.0. This page might be outdated.
See the recommended documentation of this function

Scilab manual >> Scilab > Scilab keywords > backslash (\)

# backslash (\)

left matrix division.

`x=A\b`

### Description

Backslash denotes left matrix division. `x=A\b` is a solution to `A*x=b`.

If `A` is square and nonsingular `x=A\b` (uniquely defined) is equivalent to `x=inv(A)*b` (but the computations are much cheaper).

If `A` is not square, `x` is a least square solution. i.e. `norm(A*x-b)` is minimal (euclidian norm). If `A` is full column rank, the least square solution, `x=A\b`, is uniquely defined (there is a unique `x` which minimizes `norm(A*x-b)`). If `A` is not full column rank, then the least square solution is not unique, and `x=A\b`, in general, is not the solution with minimum norm (the minimum norm solution is `x=pinv(A)*b`).

`A.\B` is the matrix with `(i,j)` entry `A(i,j)\B(i,j)`. If `A` (or `B`) is a scalar `A.\B` is equivalent to `A*ones(B).\B` (or `A.\(B*ones(A))`

`A\.B` is an operator with no predefined meaning. It may be used to define a new operator (see overloading) with the same precedence as * or /.

### Examples

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

b = 0*ones(size(A,1),1);

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

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

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