Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: Français - Português - 日本語 - Русский
Scilab Help >> Scilab > Scilab keywords > backslash

backslash

(\) left matrix division.

Syntax

X=A\B

Description

Backslash is the left matrix division: X=A\B is a solution to A*X=B.

If A is square and non-singular X=A\B is equivalent to X=inv(A)*B in exact arithmetic, but the computations are more accurate and cheaper in floating point arithmetic. Hence, to compute the solution of the linear system of equations A*X=B, the backslash operator should be used, and the inv function should be avoided.

In the case where A is square, the solution X can be computed either from LU factorization or from a linear least squares solver. If the condition number of A is smaller than 1/(10*%eps) (i.e. if A is well conditioned), the LU factorization with row pivoting is used. If not (i.e. if A is poorly conditioned), then X is the minimum-norm solution which minimizes ||A*X-B|| using a complete orthogonal factorization of A (i.e. X is the solution of a linear least squares problem).

If A is not square, X is a least square solution, i.e. norm(A*X-B) is minimal (Euclidean 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=[
   9.   -36.    30.
  -36.   192.  -180.
   30.  -180.   180.
];
b=[
   3.
  -24.
   30.
];
x=A\b
A*x-b // close to zero

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

// if rank is deficient
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/demos/bcsstk24.rsa");

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

tic();
res = umfpack(A,'\',b);
mprintf('\nTime with umfpack: %.3f\n',toc());

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

tic();
res = A\b;
mprintf('\ntime with backslash: %.3f\n',toc());

See also

  • slash — (/) right division and feed back
  • inv — matrix inverse
  • pinv — pseudoinverse
  • percent — (%) special character
  • ieee — sets or gets the floating point exception mode
  • linsolve — linear equation solver
  • umfpack — solve sparse linear system

History

VersionDescription
5.4.1 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.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Feb 14 14:57:05 CET 2019