Solve linear system of equations
X = linsolve(A,B)
X = linsolve(A,B,opts)
X = linsolve(A,B)
solves the
linear system A*X = B
using LU factorization with
partial pivoting when A is square and QR factorization with column
pivoting otherwise. The number of rows of A
must
equal the number of rows of B
. If A
is
mbyn and B
is mbyk, then X
is
nbyk. linsolve
returns a warning if A
is
square and ill conditioned or if it is not square and rank deficient.
[X, R] = linsolve(A,B)
suppresses these warnings
and returns R
, which is the reciprocal of the condition
number of A
if A
is square,
or the rank of A
if A
is not
square.
X = linsolve(A,B,opts)
solves
the linear system A*X = B
or A'*X = B
,
using the solver that is most appropriate given the properties of
the matrix A
, which you specify in opts
.
For example, if A
is upper triangular, you can
set opts.UT = true
to make linsolve
use
a solver designed for upper triangular matrices. If A
has
the properties in opts
, linsolve
is
faster than mldivide
, because linsolve
does
not perform any tests to verify that A
has the
specified properties.
If A
does not have the properties that you
specify in opts
, linsolve
returns
incorrect results and does not return an error message. If you are
not sure whether A
has the specified properties,
use mldivide
instead.
For small problems, there is no speed benefit in using linsolve
on triangular matrices as opposed to using the mldivide
function.
The TRANSA
field of the opts
structure
specifies the form of the linear system you want to solve:
If you set opts.TRANSA = false
, linsolve(A,B,opts)
solves A*X
= B
.
If you set opts.TRANSA
= true
, linsolve(A,B,opts)
solves A'*X
= B
.
The following table lists all the field of opts
and
their corresponding matrix properties. The values of the fields of opts
must
be logical
and the default value for all fields
is false
.
Field Name  Matrix Property 

 Lower triangular 
 Upper triangular 
 Upper Hessenberg 
 Real symmetric or complex Hermitian 
 Positive definite 
 General rectangular 
 Conjugate transpose — specifies whether the function
solves 
The following table lists all combinations of field values in opts
that
are valid for linsolve
. A true/false entry indicates
that linsolve
accepts either true or false.
LT  UT  UHESS  SYM  POSDEF  RECT  TRANSA 




































The following code solves the system A'x = b
for
an upper triangular matrix A
using both mldivide
and linsolve
.
A = triu(rand(5,3)); x = [1 1 1 0 0]'; b = A'*x; y1 = (A')\b opts.UT = true; opts.TRANSA = true; y2 = linsolve(A,b,opts) y1 = 1.0000 1.0000 1.0000 0 0 y2 = 1.0000 1.0000 1.0000 0 0
If you are working with matrices having different properties,
it is useful to create an options structure for each type of matrix,
such as opts_sym
. This way you do not need to change
the fields whenever you solve a system with a different type of matrix A
.