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

See the recommended documentation of this function

# backslash (\)

left matrix division.

### Calling Sequence

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 [A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/examples/bcsstk24.rsa"); 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());

<< ans | Scilab keywords | brackets >> |