cgetrf.f(3)

πŸ“¦ version 3.9.0, in centos-stream 9

πŸŽ€ cgetrf.f β€” LAPACK's cgetrf

okay bestie, so this is cgetrf.f from LAPACK, and it is genuinely the moment. it's a Fortran file, it does LU factorization, and the whole thing has main character energy. let's get into it πŸ’…


✨ SYNOPSIS ✨

🌸 Functions/Subroutines 🌸

  • subroutine cgetrf (M, N, A, LDA, IPIV, INFO) β€” CGETRF VARIANT: iterative version of Sivan Toledo's recursive LU algorithm

πŸ¦‹ Function/Subroutine Documentation πŸ¦‹

subroutine cgetrf (integer M, integer N, complex, dimension( lda, * ) A,
    integer LDA, integer, dimension( * ) IPIV, integer INFO)

CGETRF VARIANT: iterative version of Sivan Toledo's recursive LU algorithm

πŸ’– Purpose πŸ’–

so CGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges. periodt.

the factorization has the form

A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n). slay ✨

this code implements an iterative version of Sivan Toledo's recursive LU algorithm[1]. for square matrices, this iterative version should be within a factor of two of the optimum number of memory transfers. no cap, that's the flex.

the pattern is as follows, with the large blocks of U being updated in one call to DTRSM, and the dotted lines denoting sections that have had all pending permutations applied:

 1 2 3 4 5 6 7 8
+-+-+---+-------+------
| |1|   |       |
|.+-+ 2 |       |
| | |   |       |
|.|.+-+-+   4   |
| | | |1|       |
| | |.+-+       |
| | | | |       |
|.|.|.|.+-+-+---+  8
| | | | | |1|   |
| | | | |.+-+ 2 |
| | | | | | |   |
| | | | |.|.+-+-+
| | | | | | | |1|
| | | | | | |.+-+
| | | | | | | | |
|.|.|.|.|.|.|.|.+-----
| | | | | | | | |

the 1-2-1-4-1-2-1-8-... pattern is the position of the last 1 bit in the binary expansion of the current column. each Schur update is applied as soon as the necessary portion of U is available. it's giving choreography, honestly 🧚

[1] Toledo, S. 1997. Locality of Reference in LU Decomposition with Partial Pivoting. SIAM J. Matrix Anal. Appl. 18, 4 (Oct. 1997), 1065-1081. http://dx.doi.org/10.1137/S0895479896297744

πŸ‘‘ Parameters πŸ‘‘

  • M β€” M is INTEGER. the number of rows of the matrix A. M >= 0. πŸ“
  • N β€” N is INTEGER. the number of columns of the matrix A. N >= 0. πŸ“
  • A β€” A is COMPLEX array, dimension (LDA,N). on entry, the M-by-N matrix to be factored. on exit, the factors L and U from the factorization A = P*L*U; the unit diagonal elements of L are not stored. lowkey the star of the show πŸ’œ
  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,M). do not skip this vibe check πŸ™ˆ
  • IPIV β€” IPIV is INTEGER array, dimension (min(M,N)). the pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i). πŸ”₯
  • INFO β€” INFO is INTEGER. the receipts:
    • = 0: successful exit ✨
    • < 0: if INFO = -i, the i-th argument had an illegal value 😭
    • > 0: if INFO = i, U(i,i) is exactly zero. the factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. bestie this one is serious β€” singular means singular, no rescuing it πŸ’€
fr fr, if you get INFO > 0, your U is singular. don't go solving systems with it and then act surprised. πŸ™ˆ

🌈 Author 🌈

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

⭐ Date ⭐

December 2016

🫢 Definition 🫢

Definition at line 136 of file VARIANTS/lu/REC/cgetrf.f.


πŸ’« Author (again, but Doxygen's version) πŸ’«

Generated automatically by Doxygen for LAPACK from the source code.


and that's the whole page, bestie! πŸŽ€ this lil masterpiece is Version 3.8.0, dated Tue Nov 14 2017 β€” so go forth, factor some matrices, and remember: partial pivoting with row interchanges is iconic and so are you πŸ’–βœ¨πŸ¦‹πŸŒΈπŸ‘‘

πŸ“¦ where this page comes from