Está en la página 1de 4

Mtodos Numricos Trabajo Prctico 2 Introduccin a la programacin en Matlab Fecha de presentacin: 5 de Marzo de 2013

Ingeniera Geolgica Curso 2012 - 2013

1. Dibujar la funcin (paraboloide hiperblico) f (x, y ) = x a


2

y b

x [1, 1], y [1, 1], a = b = 1

utilizando las funciones de matlab surf, mesh y contour en tres grcas diferentes que deben estar incluidas en una nica gura. Repetir la representacin anterior para las funciones: f (x, y ) = cos(2x) cos(2y ) x2 + y 2 x2 + y 2 x [1, 5], y [1, 5] x [1, 1], y [1, 1], c = 1

f (x, y ) = c

Ayuda: utilizar las funciones meshgrid y subplot. 2. Se denomina matriz esparsa, del ingls sparse, a aquella matriz que tiene un nmero de elementos no nulos muy pequeo comparado con el nmero total de coecientes. Por ejemplo, las siguientes matrices son esparsas: 8 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 1 2 3 0 2 0 0 0 1 0 0 0 0 0 0 A= 1 0 1 0 0 , B = 0 0 2 1 0 0 0 3 0 2 0 0 2 0 0 0 0 0 0 0 2 3 0 0 0 3 0 0 0 1 0 0 0 0 5 0 0 3 El hecho de que estas matrices aparezcan muy a menudo en aplicaciones de ingeniera ha inducido el desarrollo de algoritmos especcos para este tipo de matrices. Entre estos algoritmos se pueden destacar: algoritmos para almacenar matrices esparsas de forma eciente (almacenando slo los coecientes no nulos) que permiten reducir mucho el espacio de memoria necesario para guardar las matrices. algoritmos para operar con las matrices esparsas (suma, producto, resolucin de sistemas de ecuaciones) que reducen el tiempo de clculo al no operar con coecientes nulos (se ahorran muchas operaciones como sumar cero o multiplicar por cero).

El primer aspecto que se debe aprender al trabajar com matrices esparsas es cmo se almacenan. Una de las maneras de almacenar estas matrices de forma compacta es la utilizacin del llamado formato sparse triplet. Este formato consiste en almacenar la matriz utilizando tres vectores: i: vector que contiene los ndices de las las de los elementos no nulos j: vector que contiene los ndices de las columnas de los elementos no nulos. s: vector que contiene los valores de los elementos no nulos Por ejemplo, las matrices A y B mostradas anteriormente, se almacenan utilizando el formato sparse triplet de la siguiente manera: iA = [1, 1, 1, 1, 2, 3, 3, 4, 4, 5, 5] jA = [1, 3, 4, 5, 2, 1, 3, 1, 4, 1, 5] sA = [1, 1, 2, 3, 2, 1, 1, 2, 2, 3, 3] iB = [1, 2, 3, 4, 4, 5, 6, 6, 7, 7] jB = [1, 2, 1, 3, 4, 1, 2, 6, 4, 7] sB = [8, 2, 1, 2, 1, 3, 2, 1, 5, 3]

Obsrvese que el coste de almacenar una matriz de dimensiones m n esparsa no es m n sino 3 nnz , donde nnz es el nmero de elementos no nulos que contiene la matriz. En los ejemplos anteriores, el almacenamiento clsico de A y B (almacenamiento en formato de matriz llena ) guardarda 25 y 49 coecientes de tipo decimal respectivamente, mientras que el almacenamiento en formato sparse triplet utiliza 22 y 20 nmeros naturales y 11 y 10 nmeros de tipo decimal. Las diferencias en el almacenamiento aumentan cuando se incrementan las dimensiones de las matrices. a. Conversin del formato sparse triplet a matriz llena Se pide desarrollar una funcin en Matlab llamada sparse2full que implemente el algoritmo que convierte una matriz en formato sparse triplet a matriz llena de Matlab. Esta funcin recibe como parmetros de entrada los vectores i, j y s que determinan la matriz y el nmero de las m y columnas n de la matriz. La funcin debe retornar la matriz en el formato estndar de Matlab. La sintaxis de esta funcin ser: function M = sparse2full(i,j,s,m,n)1 El pseudocdigo 2 del algoritmo para pasar de formato sparse triplet a matriz llena es: Input: vectores de la sparse triplet i, j, s y tamao de la matriz m y n Output: matriz M llena Generar la matriz M de dimensiones m por n llena de ceros; forall elemento e de s do determinar la la ie y la columna je correspondientes al elemento e; almacenar el elemento e en la posicin (ie, je) de la matriz M; end
En esta declaracin i, j, s, m, n y M son los nombres de las variables de entrada y salida, respectivamente. Se llama pseudocdigo a un algoritmo escrito en un formato similar al de un lenguaje de programacin pero utilizando el lenguaje coloquial.
2 1

b. Conversin de una matriz llena al formato sparse triplet Se pide desarrollar una funcin en Matlab llamada full2sparse que implemente el algoritmo que convierte una matriz de Matlab al formato sparse triplet. Esta funcin ha de recibir como a parmetro de entrada una matriz y ha de retornar los tres vectores i, j y s y el nmero delas m y columnas n de la matriz. La sintaxis de esta funcin ser: function [i,j,s,m,n] = full2sparse(M) El pseudocdigo del algoritmo para obtener la sparse triplet de una matriz es: Input: matriz M llena Output: vectores de lsparse triplet i, j, s y dimensiones de la matriz m y n Generar los vectores i, j, s vacios; Calcular las dimensiones m y n de la matriz; forall elemento e de la matriz M do if el elemento e que es encuentra en la la ie y la columna je de la matriz M no es nulo then almacenar ie en el vector i; almacenar je en el vector j; almacenar el elemento e en el vector s; end end AYUDA: Utilizando Matlab resulta muy facil ampliar la longitud de un vector. Por ejemplo, dado un vector v es posible adir otro elemento e despus del ltimo elemento de v mediante la instruccin: v = [v,e]. c. Clculo del mximo coeciente de una matriz almacenada en el format sparse triplet Se pide desarrollar una funcin en Matlab que dados los tres vectores i, j y s asociados a una matriz esparsa y, utilizando una instruccin for y una instruccin if, retorne el mxim coeciente y su posicin. La sintaxis de esta funcin ser: function [e,f,c] = maxsparse(i,j,s) donde e es el coeciente mxim, y f y c son el nmero de la y columna correspondientes a este elemento. d. Clculo de la traza de una matriz almacenada en el formato sparse triplet Se pide desarrollar una funcin en Matlab que dados los tres vectores i, j y s asociados a una matriz esparsa y, utilizando una instruccin for y una instruccin if, retorne el valor de la traza de la matriz (suma dels elements de la diagonal). La sintaxis de esta funcin ser: function [t] = trazasparse(i,j,s) donde t es el valor de la traza. e. Utilizacin de les funciones: sparse2full, full2sparse, maxsparse y trazasparse Desarrollar un programa principal con el nombre principalEx5.m que realice las siguientes tareas: Leer por pantalla dos nmeros naturales m y n y un nmero decimal d entre 0 y 1. Crear, utilizando la instruccin de Matlab sprand, una matriz esparsa de di3

mensiones m n con densidad d. Convertir esta matriz, utilizando la instrucci full, en una matriz llena y denotada por M . Calcule la sparse triplet i, j, s utilizando la funcin full2sparse. Calcule el mximo coeciente de la matriz y su posicin utilizando la funcin maxsparse. Calcule la traza de la matriz utilizando la funci trazasparse. Convierta la matriz esparsa en una matriz llena utilizando la funcin sparse2full y denomine M 2. Represente en una gura, utilizando la instruccin spy de Matlab, la estructura de los elementos no nulos de la matriz M 2 Escriba los resultados obtenidos en el chero resultadosSparse.txt de forma ordenada y clara en el ordre seguiente: valores de m, n y d, matriz original M , sparse triplet i, j, s, coeciente mximo y su posicin, traza, matriz M 2.

Ejecutar el programa anterior para los valores m = 15, n = 10 y d = 0.5 e incluir los resultados debidamente comentados en el informe. Funciones de Matlab que pueden ser tiles: load

También podría gustarte