The LA_LINEAR_EQUATION function uses LU decomposition to solve a system of linear equations, *AX* = *B*, and provides optional error bounds and backward error estimates.

The LA_LINEAR_EQUATION function may also be used to solve for multiple systems of linear equations, with each column of *B* representing a different set of equations. In this case, the result is a *k*-by-*n* array where each of the *k *columns represents the solution vector for that set of equations.

This routine is written in the IDL language. Its source code can be found in the file la_linear_equation.pro in the lib subdirectory of the IDL distribution.

## Examples

Given the system of equations:

4u + 16000v + 17000w = 100.1

2u + 5v + 8w = 0.1

3u + 6v + 10w = 0.01

The following program can be used to find the solution:

`; Define the coefficient array:`

a = [[4, 16000, 17000], $

[2, 5, 8], $

[3, 6, 10]]

; Define the right-hand side vector b:

b = [100.1, 0.1, 0.01]

`; Compute and print the solution to ax=b:`

`x = LA_LINEAR_EQUATION(a, b)`

PRINT, 'LA_LINEAR_EQUATION solution:', X

IDL prints:

LA_LINEAR_EQUATION solution:

-0.397432 -0.334865 0.321148

The exact solution to 6 decimal places is [-0.397432, -0.334865, 0.321149].

## Syntax

*Result* = LA_LINEAR_EQUATION( *Array*, *B* [, BACKWARD_ERROR=*variable*] [, /DOUBLE] [, FORWARD_ERROR=*variable*] [, STATUS=*variable*])

## Return Value

The result is an *n*-element vector or *k*-by-*n* array.

## Arguments

### Array

The *n*-by-*n* array of the linear system *AX* = *B*.

### B

An *n*-element input vector containing the right-hand side of the linear system, or a* k*-by-*n* array, where each of the *k* columns represents a different linear system.

## Keywords

### BACKWARD_ERROR

Set this keyword to a named variable that will contain the relative backward error estimate for each linear system. If *B* is a vector containing a single linear system, then BACKWARD_ERROR will be a scalar. If *B* is an array containing *k* linear systems, then BACKWARD_ERROR will be a *k*-element vector. The backward error is the smallest relative change in any element of *A* or *B* that makes *X* an exact solution.

### DOUBLE

Set this keyword to use double-precision for computations and to return a double-precision (real or complex) result. Set DOUBLE = 0 to use single-precision for computations and to return a single-precision (real or complex) result. The default is /DOUBLE if Array is double precision, otherwise the default is DOUBLE = 0.

### FORWARD_ERROR

Set this keyword to a named variable that will contain the estimated forward error bound for each linear system. If *B* is a vector containing a single linear system, then FORWARD_ERROR will be a scalar. If* B* is an array containing* k* linear systems, then FORWARD_ERROR will be a* k*-element vector. For each linear system, if *Xtrue* is the true solution corresponding to* X*, then the forward error is an estimated upper bound for the magnitude of the largest element in (*X* - *Xtrue*) divided by the magnitude of the largest element in *X*.

### STATUS

Set this keyword to a named variable that will contain the status of the computation. Possible values are:

- STATUS = 0: The computation was successful.
- STATUS > 0: The computation failed because one of the diagonal elements of the LU decomposition is zero. The STATUS value specifies which value along the diagonal (starting at one) is zero.

**Note: **If STATUS is not specified, any error messages will be output to the screen.

## Version History

5.6 |
Introduced |

## See Also

LA_LUDC, LA_LUMPROVE, LA_LUSOL