SRC/sspsv.f(3)

✨ SRC/sspsv.f(3) ✨

okay bestie, so this is a page straight out of the Library Functions Manual β€” it's SRC/sspsv.f(3), the glow-up doc for the Fortran subroutine sspsv. buckle up, she's a linear-algebra icon πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

subroutine sspsv (uplo, n, nrhs, ap, ipiv, b, ldb, info)

SSPSV computes the solution to the system of linear equations A * X = B for OTHER matrices. periodt. πŸ”₯


πŸŽ€ Function/Subroutine Documentation πŸŽ€

subroutine sspsv (character uplo, integer n, integer nrhs, real, dimension( * ) ap, integer, dimension( * ) ipiv, real, dimension( ldb, * ) b, integer ldb, integer info)

SSPSV computes the solution to the system of linear equations A * X = B for OTHER matrices. that's the whole vibe, no cap ✨

πŸ’œ Purpose:

!>
!> SSPSV computes the solution to a real system of linear equations
!>    A * X = B,
!> where A is an N-by-N symmetric matrix stored in packed format and X
!> and B are N-by-NRHS matrices.
!>
!> The diagonal pivoting method is used to factor A as
!>    A = U * D * U**T,  if UPLO = 'U', or
!>    A = L * D * L**T,  if UPLO = 'L',
!> where U (or L) is a product of permutation and unit upper (lower)
!> triangular matrices, D is symmetric and block diagonal with 1-by-1
!> and 2-by-2 diagonal blocks.  The factored form of A is then used to
!> solve the system of equations A * X = B.
!>

so basically: A is this N-by-N symmetric queen stored in packed format, and X and B are N-by-NRHS matrices. the diagonal pivoting method factors A into A = U * D * U**T when UPLO = 'U', or A = L * D * L**T when UPLO = 'L' β€” where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks 🫢 then that factored form gets used to solve A * X = B. she ate and left no crumbs.


🌸 Parameters 🌸

  • UPLO β€” UPLO is CHARACTER*1. it's giving "which triangle are we doing":
!>          = 'U':  Upper triangle of A is stored;
!>          = 'L':  Lower triangle of A is stored.
  • N β€” N is INTEGER. the number of linear equations, i.e. the order of the matrix A. N >= 0. lowkey the main character number here πŸ‘‘
  • NRHS β€” NRHS is INTEGER. the number of right hand sides, i.e. the number of columns of the matrix B. NRHS >= 0. πŸ’–
  • AP β€” AP is REAL array, dimension (N*(N+1)/2). okay so on entry, this holds the upper or lower triangle of the symmetric matrix A, packed columnwise in a linear array. the j-th column of A is stored in the array AP like this:
!>          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
!>          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.

see below for further details (she said, teasingly).

on exit? the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed by SSPTRF, stored as a packed triangular matrix in the same storage format as A. iconic behaviour honestly ✨

  • IPIV β€” IPIV is INTEGER array, dimension (N). all the deets on the interchanges and the block structure of D, as determined by SSPTRF. so:
!>          If IPIV(k) > 0, then rows and columns
!>          k and IPIV(k) were interchanged, and D(k,k) is a 1-by-1
!>          diagonal block.  If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0,
!>          then rows and columns k-1 and -IPIV(k) were interchanged and
!>          D(k-1:k,k-1:k) is a 2-by-2 diagonal block.  If UPLO = 'L' and
!>          IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and
!>          -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2
!>          diagonal block.

if IPIV(k) > 0, rows and columns k and IPIV(k) were swapped and D(k,k) is a 1-by-1 diagonal block πŸŽ€ if UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were swapped and D(k-1:k,k-1:k) is a 2-by-2 diagonal block. and if UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were swapped and D(k:k+1,k:k+1) is a 2-by-2 diagonal block. iykyk πŸ’…

  • B β€” B is REAL array, dimension (LDB,NRHS). on entry, the N-by-NRHS right hand side matrix B. on exit, if INFO = 0, the N-by-NRHS solution matrix X. glow-up complete, she's transformed πŸ’–
  • LDB β€” LDB is INTEGER. the leading dimension of the array B. LDB >= max(1,N). no skipping this one bestie, it's a whole rule πŸ“
  • INFO β€” INFO is INTEGER. the vibe check:
!>          = 0:  successful exit
!>          < 0:  if INFO = -i, the i-th argument had an illegal value
!>          > 0:  if INFO = i, D(i,i) is exactly zero.  The factorization
!>                has been completed, but the block diagonal matrix D is
!>                exactly singular, so the solution could not be
!>                computed.

so = 0 means successful exit πŸŽ‰, < 0 means if INFO = -i the i-th argument had an illegal value πŸ™ˆ, and > 0 means if INFO = i, D(i,i) is exactly zero β€” the factorization finished, but the block diagonal matrix D is exactly singular, so the solution could not be computed 😭 that's the sad ending, fr.


πŸ‘‘ Author πŸ‘‘

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

the academic royalty behind all of this. bow down 🫢


🌈 Further Details: 🌈

okay this part is so satisfying, she really said "let me draw it for you":

!>
!>  The packed storage scheme is illustrated by the following example
!>  when N = 4, UPLO = 'U':
!>
!>  Two-dimensional storage of the symmetric matrix A:
!>
!>     a11 a12 a13 a14
!>         a22 a23 a24
!>             a33 a34     (aij = aji)
!>                 a44
!>
!>  Packed storage of the upper triangle of A:
!>
!>  AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]
!>

see how the upper triangle just folds into that one flat array? the way that a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 reads like a little poem πŸ¦‹ (and remember aij = aji β€” symmetric queen behaviour, she only needs to store half her business).


Definition at line 161 of file sspsv.f.


πŸ’« Author πŸ’«

Generated automatically by Doxygen for LAPACK from the source code. (not a human, just a very diligent robot 🧚)


and that's the whole page bestie! πŸŽ€ this was LAPACK, Version 3.12.0, page SRC/sspsv.f(3) β€” go forth and solve those symmetric systems, you absolute icon πŸ’œβœ¨

πŸ“¦ where this page comes from