linsolve

Solve linear system of equations

Syntax

X = linsolve(A,B)
X = linsolve(A,B,opts)

Description

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 m-by-n and B is m-by-k, then X is n-by-k. 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.

    Notes   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

LT

Lower triangular

UT

Upper triangular

UHESS

Upper Hessenberg

SYM

Real symmetric or complex Hermitian

POSDEF

Positive definite

RECT

General rectangular

TRANSA

Conjugate transpose — specifies whether the function solves A*X = B or A'*X = B

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

true

false

false

false

false

true/false

true/false

false

true

false

false

false

true/false

true/false

false

false

true

false

false

false

true/false

false

false

false

true

true/false

false

true/false

false

false

false

false

false

true/false

true/false

Examples

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

    Note   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.

See Also

Was this topic helpful?