Anexo 1: Almacenamiento de matrices ralas

Download (0)

Full text

(1)

Anexo 1: Almacenamiento de matrices ralas

Almacenamiento compacto para matrices ralas. Esquema de almacenamiento comprimido por filas. Esquema de

almacenamiento indexado por filas. Esquema de almacenamiento coordenado.

Prof. Saúl Buitrago

(2)

Una matriz se denomina esparcida o rala cuando la mayoría de sus entradas son ceros.

Estas matrices aparecen en ciencia e ingeniería, por ejemplo, cuando se resuelve numéricamente ecuaciones diferenciales parciales.

Veremos 3 esquemas de almacenamiento para la matriz A.

Cuando se almacenan y manipulan este tipo de matrices en un

computador, es beneficioso usar algoritmos y estructuras de datos especiales que tomen en cuenta la estructura esparcida de estas

matrices.

Matriz 479 x 479 (229441)

0.82% no ceros

(3)

Prof. Saúl Buitrago

Almacenamiento compacto de matrices esparcidas (ralas) – Esquema 1 La matriz A se almacena a través de tres arreglos XA, IF, IC, los

cuales se describen a continuación:

XA: arreglo unidimensional real que contiene los elementos no nulos de la matriz, tomados fila por fila, comenzando desde la primera. Su dimensión es igual al número de elementos no nulos de la matriz.

IF: arreglo unidimensional entero que contiene los apuntadores al comienzo de cada fila de la matriz en A sobre el vector XA. Su dimensión es igual al orden de la matriz más uno.

IC: arreglo unidimensional entero que contiene los índices de las columnas de los elementos de la matriz en A. Su dimensión es igual a la de XA

Así, en la i-ésima fila de la matriz hay IF(i+1)-IF(i) elementos no nulos, los cuales están almacenados consecutivamente en

XA(IF(i)), XA(IF(i)+1), . . ., XA(IF(i+1)-1),

y los índices de columna están almacenados consecutivamente en IC(IF(i)), IC(IF(i)+1), . . ., IC(IF(i+1)-1).

(4)

Prof. Saúl Buitrago

 

 

 

 

 

 

=

0 . 2 0

3 . 0 0

0

8 . 4 0

. 1 0

0 2

. 5

0 0

3 . 4 0

0

0 0

0 0

. 1 0 . 3

0 . 5 0

0 1

. 1 1 . 0

A

( 0 . 1 1 . 15 . 0 3 . 0 1 . 0 4 . 3 5 . 21 . 0 4 . 8 0 . 32 . 0 )

= XA

( 1 4 6 7 10 12 )

IF =

( 1 2 5 1 2 3 1 4 5 3 5 )

= IC

A = [0.1 1.1 0 0 -5.0; 3.0 1.0 0 0 0; 0 0 4.3 0 0; 5.2 0 0 -1.0 4.8; 0 0 0.3 0 -2.0];

(5)

Prof. Saúl Buitrago

Almacenamiento compacto de matrices esparcidas (ralas) – Esquema 2 Para representar una matriz esparcida A de dimensión n×n usaremos el esquema denominado "indexado por filas" que contempla dos vectores de nombres sa e ija, donde sa almacena los elementos distintos de cero de A e ija almacena valores enteros correspondientes a apuntadores de filas y columnas para A.

Las reglas para el llenado de sa e ija son las siguientes (todos los vectores arrancan en 1 y no en 0):

(6)

• En las primeras n posiciones de sa se almacenan los elementos de la diagonal de A (inclusive si los elementos son ceros).

• La posición n+1 en sa es arbitraria.

• Las entradas en sa correspondientes a la posiciones mayores o iguales a n+2 contienen las entradas no diagonales de A, ordenadas por fila, y

dentro de cada fila ordenadas por columna.

• Cada una de las primeras n posiciones de ija almacena el índice sobre el vector sa donde comienza cada fila de A para los elementos fuera de la diagonal principal. Así ija(k+1) - ija(k) nos da el número de elementos no diagonal distinto de cero de la fila k de la matriz A.

• La posición 1 sobre ija es siempre n+2. Esta información puede ser usada para conocer la dimensión de la matriz A.

• La posición n+1 sobre ija es 1 mas que el índice en sa del último

elemento no diagonal. Esta información puede ser usada para conocer el número de elementos no diagonales distintos de cero en A, es decir

ija(n+1) -1 -(n+1).

(7)

Prof. Saúl Buitrago

Almacenamiento compacto de matrices esparcidas (ralas) – Esquema 2

• Las entradas en ija en las posiciones mayores o iguales a n+2 contienen los números de las columnas del elemento respectivo en sa.

• Los vectores sa e ija tienen la misma longitud, es decir ija(ija(1)-1)-1.

Ejemplo del llenado de los vectores sa e ija para la matriz A :

 

 

 

 

 

 

=

5 6 0 0 0

2 0 0 0 0

0 9 5 7 0

0 0 0 4 0

0 0 1 0 3

A

( 7 8 8 10 11 12 3 2 4 5 4 )

ija =

( 3 4 5 0 5 x 1 7 9 2 6 )

sa =

Así, ija(1) = 7 = 5 + 2 entonces n = 5, el número de elementos fuera de la diagonal distintos de cero es ija(5+1)-1 -(5+1) = 5, la dimensión de los vectores sa e ija es ija(ija(1)-1)-1 = 11.

diagonal elementos fuera de la diagonal

número de columna de los elementos fuera de la diagonal inicio de filas

(8)

Uno de estos formatos de almacenamiento es el denominado coordenado mediante el cual se almacenan los elementos no nulos de una matriz

empleando tres vectores correspondientes a los índices de la fila, columna y a su valor correspondiente en la matriz.

Por ejemplo, dada la matriz A

 

 

 

 

 

 

=

7 . 2 0

. 0 1

. 5 0

. 0 7

. 2

0 . 2 0

. 100 0

. 0 0

. 0 0

. 0

0 . 1 0

. 0 0

. 0 0

. 0 1

. 2

0 . 0 0

. 0 6

. 3 0

. 0 1

. 1

0 . 0 0

. 2 0

. 0 0

. 1 0

. 0

A

y denotando por F(i), C(i), S(i), para i =1,…,n, las componentes de los vectores fila (F), columna (C) y entrada no nula de la matriz (S), se tiene que el almacenamiento coordenado de A viene dado por:

(9)

Prof. Saúl Buitrago

Almacenamiento compacto de matrices esparcidas (ralas) – Esquema 3

( − 1 . 0 2 . 0 1 . 13 . 6 2 . 1 1 . 0100 . 02 . 02 . 7 5 . 12 . 7 )

S =

( 1 1 2 2 3 3 4 4 5 5 5 )

F =

( 2 4 1 3 1 5 4 5 1 3 5 )

C =

Es de hacer notar que la matriz A fue recorrida por filas para generar el almacenamiento coordenado.

Figure

Updating...

References

Related subjects :