lu

Functions
lu
Complete List of ArrayFire Functions ArrayFire Functions by Category » Linear Algebra » | Matrix factorizations and decompositions

Perform LU decomposition. More...

## Functions
AFAPI void | lu (array &out, array &pivot, const array &in, const bool is_lapack_piv=true)
| C++ Interface for LU decomposition in packed format. More...
AFAPI void | lu (array &lower, array &upper, array &pivot, const array &in)
| C++ Interface for LU decomposition. More...
AFAPI void | luInPlace (array &pivot, array &in, const bool is_lapack_piv=true)
| C++ Interface for in place LU decomposition. More...
AFAPI af_err | af_lu (af_array *lower, af_array *upper, af_array *pivot, const af_array in)
| C Interface for LU decomposition. More...
AFAPI af_err | af_lu_inplace (af_array *pivot, af_array in, const bool is_lapack_piv)
| C Interface for in place LU decomposition. More...

## Detailed Description

Perform LU decomposition.

This function decomposes input matrix A into a lower triangle L, an upper triangle U such that

\(A = L * U\)

For stability, a permutation array P is also used to modify the formula in the following manner.

\(A(P, span) = L * U\)

This operation can be performed in ArrayFire using the following code snippet.

af::array l, u, pivot;
af::lu(l, u, pivot, a_orig);

The permuted version of the original matrix can be reconstructed using the following snippet.

af::array a_recon = af::matmul(l, u);
af::array a_perm = a_orig(pivot, af::span);

The sample output for these operations can be seen below.

a_orig [3 3 1 1]
0.0000 3.0000 6.0000
1.0000 4.0000 7.0000
2.0000 5.0000 8.0000
l [3 3 1 1]
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.5000 0.5000 1.0000
u [3 3 1 1]
2.0000 5.0000 8.0000
0.0000 3.0000 6.0000
0.0000 0.0000 0.0000
pivot [3 1 1 1]
2
0
1
a_recon [3 3 1 1]
2.0000 5.0000 8.0000
0.0000 3.0000 6.0000
1.0000 4.0000 7.0000
a_perm [3 3 1 1]
2.0000 5.0000 8.0000
0.0000 3.0000 6.0000
1.0000 4.0000 7.0000

When memory is a concern, users can perform the LU decomposition in place as shown below.

af::array out = a_orig.copy();
af::array pivot2;
af::luInPlace(pivot2, out, false);

The lower and upper triangle matrices can be obtained if necessary in the following manner.

af::array l2 = lower(out, true);
af::array u2 = upper(out, false);

LU decompositions has many applications including solving a system of linear equations. Check af::solveLU fore more information.

## Function Documentation

## ◆ af_lu()

AFAPI af_err af_lu | ( | af_array * | lower,
|  | af_array * | upper,
|  | af_array * | pivot,
|  | const af_array | in
| ) |  |

C Interface for LU decomposition.

Parameters

  [out] | lower | will contain the lower triangular matrix of the LU decomposition
  [out] | upper | will contain the upper triangular matrix of the LU decomposition
  [out] | pivot | will contain the permutation indices to map the input to the decomposition
  [in] | in | is the input matrix

## ◆ af_lu_inplace()

AFAPI af_err af_lu_inplace | ( | af_array * | pivot,
|  | af_array | in,
|  | const bool | is_lapack_piv
| ) |  |

C Interface for in place LU decomposition.

Parameters

  [out] | pivot | will contain the permutation indices to map the input to the decomposition
  [in,out] | in | contains the input on entry, the packed LU decomposition on exit
  [in] | is_lapack_piv | specifies if the pivot is returned in original LAPACK compliant format

## ◆ lu() [1/2]

AFAPI void af::lu | ( | array & | out,
|  | array & | pivot,
|  | const array & | in,
|  | const bool | is_lapack_piv = `true`
| ) |  |

C++ Interface for LU decomposition in packed format.

Parameters

  [out] | out | is the output array containing the packed LU decomposition
  [out] | pivot | will contain the permutation indices to map the input to the decomposition
  [in] | in | is the input matrix
  [in] | is_lapack_piv | specifies if the pivot is returned in original LAPACK compliant format

Note
  This function is not supported in GFOR

Examples:
  lin_algebra/lu.cpp.

## ◆ lu() [2/2]

AFAPI void af::lu | ( | array & | lower,
|  | array & | upper,
|  | array & | pivot,
|  | const array & | in
| ) |  |

C++ Interface for LU decomposition.

Parameters

  [out] | lower | will contain the lower triangular matrix of the LU decomposition
  [out] | upper | will contain the upper triangular matrix of the LU decomposition
  [out] | pivot | will contain the permutation indices to map the input to the decomposition
  [in] | in | is the input matrix

Note
  This function is not supported in GFOR

## ◆ luInPlace()

AFAPI void af::luInPlace | ( | array & | pivot,
|  | array & | in,
|  | const bool | is_lapack_piv = `true`
| ) |  |

C++ Interface for in place LU decomposition.

Parameters

  [out] | pivot | will contain the permutation indices to map the input to the decomposition
  [in,out] | in | contains the input on entry, the packed LU decomposition on exit
  [in] | is_lapack_piv | specifies if the pivot is returned in original LAPACK compliant format

Note
  This function is not supported in GFOR

Examples:
  lin_algebra/lu.cpp.