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
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.