cgetrf.f(3)
π 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 matrixA.M >= 0. πNβN is INTEGER. the number of columns of the matrixA.N >= 0. πAβA is COMPLEX array, dimension (LDA,N). on entry, the M-by-N matrix to be factored. on exit, the factorsLandUfrom the factorizationA = P*L*U; the unit diagonal elements ofLare not stored. lowkey the star of the show πLDAβLDA is INTEGER. the leading dimension of the arrayA.LDA >= max(1,M). do not skip this vibe check πIPIVβIPIV is INTEGER array, dimension (min(M,N)). the pivot indices; for1 <= i <= min(M,N), rowiof the matrix was interchanged with rowIPIV(i). π₯INFOβINFO is INTEGER. the receipts:= 0: successful exit β¨< 0: ifINFO = -i, thei-th argument had an illegal value π> 0: ifINFO = i,U(i,i)is exactly zero. the factorization has been completed, but the factorUis 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 getINFO > 0, yourUis 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
- centos-stream 9: lapack 3.9.0-10.el9 Β· BSD
- centos-stream 9: lapack 3.9.0-10.el9 Β· BSD
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms