MATLAB Function Reference  linsolve

Solve a 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 columns of `A` must equal the number of rows of `B`. If `A` is m-by-n and `B` is n-by-k, then `X` is m-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.

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

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` `true`/`false` `false` `false` `false` `false` `false` `true`/`false` `true`/`false`

Example

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

`mldivide`

© 1994-2005 The MathWorks, Inc.