backslash

() left matrix division.

Calling Sequence

x=A\b

Description

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

If A is square and nonsingular x=Ab (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=Ab, 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=Ab, 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

// 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/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`_());

See Also

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

Table Of Contents

This Page