08.11.2014 Views

Aprenda Matlab 6.1 - Universidad Politécnica de Madrid

Aprenda Matlab 6.1 - Universidad Politécnica de Madrid

Aprenda Matlab 6.1 - Universidad Politécnica de Madrid

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capítulo 5: Otros tipos <strong>de</strong> datos <strong>de</strong> MATLAB página 53<br />

Las matrices dispersas se almacenan <strong>de</strong> una forma especial: solamente se guardan en memoria<br />

los elementos distintos <strong>de</strong> cero, junto con la posición que ocupan en la matriz. MATLAB usa 3<br />

arrays para matrices reales sparse con nnz elementos distintos <strong>de</strong> cero:<br />

1. Un array con todos los elementos<br />

distintos <strong>de</strong> cero (nnz elementos)<br />

2. Un array con los índices <strong>de</strong> fila <strong>de</strong><br />

los elementos distintos <strong>de</strong> cero (nnz<br />

elementos)<br />

3. Un array con punteros a la posición<br />

<strong>de</strong>l primer elemento <strong>de</strong> cada<br />

columna (n elementos)<br />

En total se requiere una memoria<br />

<strong>de</strong> (nnz*8+(nnz+n)*4) bytes. La Figura<br />

24 muestra un ejemplo <strong>de</strong> matriz<br />

dispersa que viene con MATLAB (se<br />

pue<strong>de</strong> cargar con load west0479). Esta<br />

matriz tiene 479 filas y columnas. De<br />

los 229441 elementos sólo 1887 son<br />

distintos <strong>de</strong> cero. Se compren<strong>de</strong> que se<br />

pue<strong>de</strong>n conseguir gran<strong>de</strong>s ahorros <strong>de</strong><br />

Figura 24. Ejemplo <strong>de</strong> matriz dispersa (west0479).<br />

memoria y <strong>de</strong> tiempo <strong>de</strong> cálculo almacenando<br />

y operando sólo con los elementos distintos <strong>de</strong> cero.<br />

A continuación se va a mostrar con un ejemplo más pequeño cómo guarda MATLAB estas<br />

matrices. Primero se creará una matriz 5×5 llena y luego se convertirá en dispersa.<br />

>> A=[1, 0, 0, -1, 0; 0, 2, 0, 0, 1; 0, 0, 1, 1, 0; 0, 2, 0, 1, 0; -3, 0, 0, 0, 2]<br />

A =<br />

1 0 0 -1 0<br />

0 2 0 0 1<br />

0 0 1 1 0<br />

0 2 0 1 0<br />

-3 0 0 0 2<br />

>> S=sparse(A)<br />

S =<br />

(1,1) 1<br />

(5,1) -3<br />

(2,2) 2<br />

(4,2) 2<br />

(3,3) 1<br />

(1,4) -1<br />

(3,4) 1<br />

(4,4) 1<br />

(2,5) 1<br />

(5,5) 2<br />

Pue<strong>de</strong> observarse cómo MATLAB muestra las matrices dispersas: primero los dos índices, <strong>de</strong><br />

filas y <strong>de</strong> columnas, entre paréntesis y <strong>de</strong>spués el valor <strong>de</strong>l elemento. Los elementos se almacenan<br />

por columnas y por eso se guarda la posición en que empieza cada columna.<br />

5.5.1. FUNCIONES PARA CREAR MATRICES DISPERSAS (DIRECTORIO SPARFUN)<br />

Las siguientes funciones permiten crear matrices dispersas. Casi todas estas funciones tienen<br />

muchas posibles formas <strong>de</strong> ser utilizadas, con distintos argumentos y valores <strong>de</strong> retorno. Se<br />

recomienda ver el Help <strong>de</strong> MATLAB para tener una información más <strong>de</strong>tallada.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!