Articulo de referencia

Matriz de almacenamiento empaquetada

Una matriz de almacenamiento empaquetada , también conocida como matriz empaquetada , es un término utilizado en programación para representar una metro × norte {\displaystyle m...

Una matriz de almacenamiento empaquetada , también conocida como matriz empaquetada , es un término utilizado en programación para representar unametro×norte{\displaystyle m\times n}matriz . Es una forma más compacta que una matriz rectangular de m por n al explotar una estructura especial de la matriz.

Algunos ejemplos típicos de matrices que pueden aprovechar el almacenamiento compacto son:

Matrices triangulares empaquetadas

La matriz de almacenamiento compacta permite convertir una matriz en un arreglo, reduciendo significativamente el tamaño de la matriz. Al hacerlo, un cuadradonorte×norte{\displaystyle n\times n}La matriz se convierte en un arreglo de longitud n ( n+1) / 2. [ 1 ]

Considere la siguiente matriz superior:

U=(a11a12a13a14a22a23a24a33a34a44){\displaystyle \mathbf {U} ={\begin{pmatrix}a_{11}&a_{12}&a_{13}&a_{14}\\&a_{22}&a_{23}&a_{24}\\&&a_{33}&a_{34}\\&&&a_{44}\\\end{pmatrix}}}

que se pueden empaquetar en una sola matriz:

UPAG=(a11 a12 a22 a13 a23 a33 a14, a24 a34 a44){\displaystyle \mathbf {UP} =(\underbrace {a_{11}} \ \underbrace {a_{12}\ a_{22}} \ \underbrace {a_{13}\ a_{23}\ a_{33}} \ \underbrace {a_{14},\ a_{24}\ a_{34}\ a_{44}} )}[ 2 ]

De forma similar, la matriz inferior:

L=(a11a21a22a31a32a33a41a42a43a44).{\displaystyle \mathbf {L} ={\begin{pmatrix}a_{11}&&&\\a_{21}&a_{22}&&\\a_{31}&a_{32}&a_{33}&\\a_{41}&a_{42}&a_{43}&a_{44}\\\end{pmatrix}}.}

se puede empaquetar en la siguiente matriz unidimensional:

LPAG=(a11 a21 a31 a41 a22 a32 a42 a33 a43 a44){\displaystyle LP=(\underbrace {a_{11}\ a_{21}\ a_{31}\ a_{41}} \ \underbrace {a_{22}\ a_{32}\ a_{42}} \ \underbrace {a_{33}\ a_{43}} \ \underbrace {a_{44}} )}[ 2 ]

Ejemplos de código (Fortran)

Los dos esquemas de almacenamiento que se describen a continuación se utilizan ampliamente en BLAS y LAPACK.

Un ejemplo de almacenamiento compacto para matriz hermitiana:

complejo :: A ( n , n ) ! una matriz hermitiana complejo :: AP ( n * ( n + 1 ) / 2 ) ! almacenamiento empaquetado para A ! el triángulo inferior de A se almacena columna por columna en AP. ! desempaquetando la matriz AP en A hacer j = 1 , n k = j * ( j - 1 ) / 2 A ( 1 : j , j ) = AP ( 1 + k : j + k ) A ( j , 1 : j - 1 ) = conjg ( AP ( 1 + k : j - 1 + k )) fin hacer

Un ejemplo de almacenamiento compacto para matriz en bandas:

real :: A ( m , n ) ! una matriz de banda con kl subdiagonales y ku superdiagonales real :: AP ( - kl : ku , n ) ! almacenamiento empaquetado para A ! la banda de A se almacena columna por columna en AP. Algunos elementos de AP no se utilizan. ! desempaquetando la matriz AP en A do j = 1 , n forall ( i = max ( 1 , j - kl ): min ( m , j + ku )) A ( i , j ) = AP ( i - j , j ) end do print * , AP ( 0 ,:) ! la diagonal

Véase también

Lecturas adicionales

  • https://www.netlib.org/lapack/lug/
  • https://www.netlib.org/blas/
  • https://github.com/numericalalgorithmsgroup/LAPACK_Examples

Referencias

  1. Golub, Gene H.; Van Loan, Charles F. (2013). Cálculos matriciales (4.ª  ed.). Baltimore, MD: Johns Hopkins University Press. pág.  170. ISBN 9781421407944.
  2. 1 2 Blackford, Susan (1999-10-01). "Packed Storage" . Netlib . Guía del usuario de LAPACK. Archivado del original el 2024-04-01 . Recuperado el 2024-10-01 .