The LUSOL function is used in conjunction with the LUDC procedure to solve a set of n linear equations in n unknowns Ax = b. The parameter A is input not as the original array, but as its LU decomposition, created by the routine LUDC.

Note: If you are working with complex inputs, use the LA_LUSOL function instead.

Examples


This example solves the linear system Ax = b using LU decomposition and back substitution:

; Define array A:
A = [[ 2.0, 1.0, 1.0], $
  [ 4.0, -6.0, 0.0], $
  [-2.0, 7.0, 2.0]]
A_orig = A ; save a copy
                
; Define right-hand side vector B:
B = [3.0, -8.0, 10.0]
 
; Decompose A (this will replace A with its LU decomposition):
LUDC, A, INDEX
 
; Compute the solution using back substitution:
X = LUSOL(A, INDEX, B)
PRINT, X

IDL prints:

  1.00000   2.00000   -1.00000

Confirm the results using matrix multiplication:

PRINT, A_orig ## X

IDL prints:

3.00000
-8.00000
10.0000

Syntax


Result = LUSOL(A, Index, B, /COLUMN, /DOUBLE)

Return Value


The result is an n-element vector whose type is identical to A.

Arguments


A

The n by n LU decomposition of an array created by the LUDC procedure.

Note: If LUSOL is complex then only the real part is used for the computation.

Index

An input vector, created by the LUDC procedure, containing a record of the row permutations which occurred as a result of partial pivoting.

B

An n-element vector containing the right-hand side of the linear system Ax = b.

Keywords


COLUMN

Set this keyword if the input array A is in column-major format (composed of column vectors) rather than in row-major format (composed of row vectors).

DOUBLE

Set this keyword to force the computation to be done in double-precision arithmetic.

Version History


Pre 4.0

Introduced

Resources and References


LUSOL is based on the routine lubksb described in section 2.3 of Numerical Recipes in C: The Art of Scientific Computing (Second Edition), published by Cambridge University Press, and is used by permission.

See Also


CHOLSOL, CRAMER, GS_ITER, LA_LUSOL, LU_COMPLEX, LUDC, SVSOL, TRISOL