Economia a en Matlab

Embed Size (px)

Citation preview

Introduccin a la

Economa Matemtica en MATLAB(Versin Preliminar)

Norma Gmez Lida Quintero Diego Corredor Mario Gonzlez Norman Maldonado Eduardo Snchez 11 de octubre de 2005

2

ndice general1. Conceptos Bsicos1.1. Qu es MATLAB ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Ventanas de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Command Window . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4. Command History . . . . . . . . . . . . . . . . . . . . . . . . 1.2.5. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . 1.3. M-File Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Procesos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Otros Conceptos Bsicos . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1. Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2. Help y Doc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11 2 2 3 4 5 6 6 11 16 16 17 19

I

LGEBRA LINEAL2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Hipermatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2. Tipos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3. Operaciones Bsicas entre Matrices . . . . . . . . . . . . . . . 2.1.4. Anlisis de una Matriz . . . . . . . . . . . . . . . . . . . . . . 2.1.5. Matrices Factorizables . . . . . . . . . . . . . . . . . . . . . . 2.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1. Anlisis de un vector . . . . . . . . . . . . . . . . . . . . . . . 2.2.2. Operaciones entre Vectores . . . . . . . . . . . . . . . . . . .i

272929 31 36 41 43 46 48 48 51

2. Matrices y Vectores

ii

2.2.3. Matrices y Vectores

. . . . . . . . . . . . . . . . . . . . . . .

54 58 59 61 63 64

2.3. Rectas y Planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1. Rectas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2. Planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3. Distancia entre un punto y un plano . . . . . . . . . . . . . . 2.4. Valores y Vectores Propios . . . . . . . . . . . . . . . . . . . . . . . .

3. Sistemas de Ecuaciones3.1. Mtodos Directos o Analticos . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Eliminacin Gauss-Jordan . . . . . . . . . . . . . . . . . . . . 3.1.2. Mtodo de la Inversa . . . . . . . . . . . . . . . . . . . . . . . 3.1.3. Regla de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.4. Factorizacin de Crout o LU . . . . . . . . . . . . . . . . . . 3.1.5. Factorizacin de Cholesky . . . . . . . . . . . . . . . . . . . . 3.2. Mtodos Indirectos o Numricos . . . . . . . . . . . . . . . . . . . . . 3.2.1. Matrices Dbilmente Condicionadas . . . . . . . . . . . . . . 3.2.2. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Apndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3. Mtodo de Richardson . . . . . . . . . . . . . . . . . . . . . .

6970 70 73 74 76 78 79 80 81 83 87 87 89 89

II CLCULO4. Funciones4.1. Funciones de una Variable . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Visualizacin de funciones de una variable . . . . . . . . . . . 4.1.2. Opciones adicionales para los grcos . . . . . . . . . . . . .

919394 94 99

4.2. Funciones de dos variables . . . . . . . . . . . . . . . . . . . . . . . . 103 4.2.1. Visualizacin de Funciones de dos variables . . . . . . . . . . 103 4.2.2. Opciones adicionales para los grcos . . . . . . . . . . . . . 108 4.3. Simulaciones en funciones de una variable . . . . . . . . . . . . . . . 114 4.4. Simulaciones en funciones de dos variables . . . . . . . . . . . . . . . 121 4.5. Anlisis de Funciones econmicas . . . . . . . . . . . . . . . . . . . . 124 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

iii

5. Derivacin

135

5.1. Derivacin de primer orden . . . . . . . . . . . . . . . . . . . . . . . 136 5.1.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 5.1.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 5.1.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 5.1.4. fjac y fdjac . . . . . . . . . . . . . . . . . . . . . . . . . . 142 5.1.5. Aplicacin: Una funcin de Produccin tipo Cobb-Douglas . . 145 5.2. Derivacin de orden superior . . . . . . . . . . . . . . . . . . . . . . 147 5.2.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.2.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.2.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 5.2.4. fdhess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 5.2.5. Expansin de Taylor . . . . . . . . . . . . . . . . . . . . . . . 156 5.2.6. Aplicacin: El Equilibrio en el Modelo de Cournot . . . . . . 157 5.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 5.4. Apndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

6. Integracin

167

6.1. Integracin por Regla del Exponente . . . . . . . . . . . . . . . . . . 168 6.2. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 6.4. Integrales Dobles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

III

OPTIMIZACIN Y DINMICA

181183

7. Concavidad y Convexidad

7.1. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 7.1.1. Deniciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 7.1.2. Criterios de clasicacin . . . . . . . . . . . . . . . . . . . . . 185 7.1.3. Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 7.2. Funciones Univariadas . . . . . . . . . . . . . . . . . . . . . . . . . . 188 7.3. Funciones con dos variables (Bivariadas) . . . . . . . . . . . . . . . . 196 7.3.1. Ejemplo 7.3. f (x, y) = x0.5 y 0.5 . . . . . . . . . . . . . . . . . . 206 7.4. Funciones con tres o ms variables (Multivariadas) . . . . . . . . . . 208 7.4.1. Ejemplo 7.4. f (x, y, z) = x4 + 3y 4 + 5z . . . . . . . . . . . . . 208 7.4.2. Ejemplo 7.5. f (w, x, y, z) . . . . . . . . . . . . . . . . . . . . . 211

iv

8. Optimizacin

213

8.1. Optimizacin no lineal sin restricciones . . . . . . . . . . . . . . . . . 214 8.1.1. Minimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

9. Sistemas Dinmicos9.1. Ecuaciones Diferenciales y Dinmica Continua 9.1.1. Mtodos Numricos . . . . . . . . . . 9.1.2. Ejemplos Computacionales . . . . . . 9.1.3. Aplicaciones Econmicas . . . . . . . . 9.2. Ecuaciones en Diferencia y Dinmica Discreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

217217 217 233 251 255

ndice de guras1.1. Conjunto Inicial de Ventanas . . . . . . . . . . . . . . . . . . . . . . 1.2. Command Window o Ventana de Comandos . . . . . . . . . . . . . . 1.3. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Command History . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7. Editor de M-Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8. Comentarios con % . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9. Ventana de Comandos y Resultados . . . . . . . . . . . . . . . . . . 1.10. Path de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11. Help de pcb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12. Documentacin de clc . . . . . . . . . . . . . . . . . . . . . . . . . . 1.13. Estructuras pibp, pcon . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. Hipermatriz de 3 dimensiones . . . . . . . . . . . . . . . . . . . . . . 2.2. Distancia entre P1 y P2 . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. La direccin del vector u = (7, 5) . . . . . . . . . . . . . . . . . . . 2.4. Producto cruz entre a y b . . . . . . . . . . . . . . . . . . . . . . . . 2.5. Proyeccin de a sobre b . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. a) nica Solucin b) No Existe Solucin c) Innitas soluciones . . . . 2.7. Una recta en tercera dimensin . . . . . . . . . . . . . . . . . . . . . 2.8. El vector n es perpendicular a todos los puntos del plano. . . . . . . 3.1. Modelo de vas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Funcin Cbica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Funcin Discontinua en x=1 . . . . . . . . . . . . . . . . . . . . . . . 4.3. Ejemplo 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Malla 3 4 4 5 5 6 7 7 9 17 19 20 22 31 50 51 53 55 58 59 62 86 97 98 99

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104v

vi

4.5. Comandos para gracar funciones de dos variables . . . . . . . . . . 108 4.6. Ejemplo 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 4.7. Distintos conjuntos de salida . . . . . . . . . . . . . . . . . . . . . . . 111 4.8. Punto de Silla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 4.9. Simulacin de una funcin de una variable . . . . . . . . . . . . . . . 114 4.10. Ejemplo 4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 4.11. Ejemplo 4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.12. Ejemplo 4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.13. Ejemplo 4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.14. Ejemplo 4.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.15. Simulacin del parmetro a en f (x, y) = acos(xy) . . . . . . . . . . . . 123 4.16. Simulacin del parmetro a en f (x, y) = x3 ax2 y + 6xy 2 y 3 . . . 125 4.17. Funcin Cobb-Douglas . . . . . . . . . . . . . . . . . . . . . . . . . . 127 4.18. Funcin CES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 4.19. Funcin CES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.1. Grca de f (x) = x4 y su derivada . . . . . . . . . . . . . . . . . . . 139 5.2. f (x, y) = x2 + y 2 y su gradiente a escala distinta . . . . . . . . . . . 140 5.3. Derivada de f (x) = x 2 mediante diff . . . . . . . . . . . . . . . . . 141 5.4. La funcin de produccin f (K, L) = K 3 L 31 1 5

. . . . . . . . . . . . . . 146

5.5. Izquierda: Productividad Marginal del Capital. Derecha: Productividad Marginal del Trabajo. . . . . . . . . . . . . . . . . . . . . . . . . 147 5.6. Las dos primeras derivadas de f (x) = x 3 . . . . . . . . . . . . . . . . 150 5.7. La tercera derivada de f (x) = x 3 mediante gradient y directamente 152 5.8. La funcin f (x, y) = x3 3xy 2 . . . . . . . . . . . . . . . . . . . . . 155 5.9. La funcin f (x) = x3 + y 3 . . . . . . . . . . . . . . . . . . . . . . . . 156 5.10. La funcin f (x) = 5x 3 32 y su aproximacin de grado tres . . . . . 158 5.11. El duopolio de Cournot . . . . . . . . . . . . . . . . . . . . . . . . . 160 6.1. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.2. Excedente del Consumidor . . . . . . . . . . . . . . . . . . . . . . . . 172 6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 6.4. Excedente del Productor . . . . . . . . . . . . . . . . . . . . . . . . . 176 6.5. Integracin Doble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.1. Mtodo grco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 7.2. Gradiente numrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 7.3. Gradiente numrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922 2 2

vii

7.4. 7.5. 7.6. 7.7. 7.8.

Segunda derivada con fhess . . . . . . . . . . . . . . Conjuntos Contorno de f (x) = x2 . . . . . . . . . . . . Conjuntos Contorno . . . . . . . . . . . . . . . . . . . Mtodo Grco - Concavidad y Convexidad . . . . . . Mtodo Grco - Cuasiconcavidad y Cuasiconvexidad

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

194 195 196 198 199

8.1. Comportamiento de f (x) . . . . . . . . . . . . . . . . . . . . . . . . . 215 9.1. Solucin Numrica (h = 0.21) . . . . . . . . . . . . . . . . . . 9.2. Solucin Numrica (h = 0.09) . . . . . . . . . . . . . . . . . . 9.3. Diagrama de Fase (t, x) de x = 3 x . . . . . . . . . . . . . . 9.4. Contraste de Dos Condiciones Iniciales con odephas2 . . . . 9.5. Comparacin de las Condiciones x0 = 1.5 y x0 = 0.5 . . . 9.6. Contraste de Tres Condiciones Iniciales con odephas3 . . . . 2 9.7. Diagrama de Fase (t, x) de x = batx . . . . . . . . . . . . . x 9.8. a) Diagramas de Fase (t, v) y (t, u) b) Diagrama de Fase 9.9. a) Diagrama de Fase (t, v) b) Diagrama de Fase (t, u) . 9.10. Diagrama de Fase (v, u) . . . . . . . . . . . . . . . . . . . . . 9.11. Diagrama de Fase (t, kt ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (v, u) . . . . . . . . . . . . 232 233 239 240 242 243 244 247 250 251 256

viii

ndice de cuadros1.1. 1.2. 1.3. 1.4. 2.1. 2.2. 2.3. 2.4. 2.5. Mtodo Numrico para hallar x . . . . . . . . . Algunos Comandos sobre Cadenas de caracteres Algunos Comandos sobre Estructuras . . . . . . Algunos Comandos para objetos Cell Array . . Comandos para hipermatrices . . . . . . . . Matrices generadas automticamente . . . . Algunos Comandos para Matrices Dispersas Operaciones bsicas entre matrices . . . . . Comandos para analizar una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 21 23 25 33 37 38 41 43

9.1. Rutinas de MATLAB

para solucionar IVPs . . . . . . . . . . . . . 234

ix

x

IntroduccinEn la academia a diario se producen desarrollos tericos que ms adelante llegan a ser aplicados para la solucin de una gran variedad de problemas reales. En particular, en economa y nanzas, se han producido desarrollos tericos y prcticos para abordar problemas econmicos como el crecimiento, los ciclos y el diseo de poltica econmica, o nancieros como la valoracin de activos nancieros y la cuanticacin del riesgo de un portafolio. En general, para que tales desarrollos puedan ser utilizados se requiere hacer clculos matemticos que en algunas ocasiones llegan a ser bastante complicados e incluso imposibles de realizar analticamente. Por otro lado, en la actualidad el uso de los computadores para la solucin de problemas se ha convertido en una prctica comn dada su gran capacidad de clculo y precisin en comparacin con los mtodos tradicionales. Es posible entonces, en economa y nanzas, utilizar mtodos computacionales para realizar los clculos que permitan aplicar los desarrollos tericos y prcticos que se producen en la academia. Por ejemplo, la estimacin de modelos economtricos, la calibracin de modelos de equilibrio general, simulacin de sistemas dinmicos, entre otros, son desarrollos que necesitan utilizar mtodos computacionales para la precisa realizacin de los clculos que estos requieren. El presente texto ha sido desarrollado por GEDEM (Grupo de Estudios De Economa Matemtica) y tiene como objetivo facilitar a los estudiantes de las ciencias econmicas un primer acercamiento a la aplicacin de mtodos computacionales en economa y nanzas. Especcamente, este libro va dirigido a estudiantes de Pregrado de carreras como Economa, Administracin de empresas o Contadura, ya que utiliza aplicaciones en economa y en nanzas. En la mayora de los casos los libros que trabajan con herramientas computacionales en estas reas estn dirigidos a estudiantes de Posgrado o de Doctorado, por lo cual pocas veces se enseaxi

xii

GEDEM - Versin Preliminar

el uso de herramientas computacionales como MATLAB en los cursos de Pregrado relacionados con economa o nanzas matemticas. El texto se desarrolla con base en los temas bsicos de la economa matemtica como son: Sistemas de ecuaciones lineales, matrices y vectores, rectas y planos, funciones, clculo diferencial e integral, optimizacin "libre" y restringida y sistemas dinmicos. Cada uno de los temas mencionados es tratado en un captulo en el que se presenta el problema matemtico a resolver y su correspondiente desarrollo computacional, acompaado de ejemplos y ejercicios matemticos y econmicos que permiten una plena comprensin del tema. Existen temas ms avanzados que no son objeto de estudio de este libro. En particular, temas como Optimizacin Dinmica, Ecuaciones Diferenciales y en Diferencias Estocsticas, Optimizacin Dinmica con Incertidumbre o Modelos de Equilibrio General Computable no son tratados aqu ya que generalmente estos se trabajan en libros actualmente disponibles en el mercado que van dirigidos a estudiantes de Posgrado o de Doctorado, o en Papers de libre acceso por Internet. Este libro es tan solo una introduccin a la utilizacin de mtodos computacionales en Economa y Finanzas, pero es til en la medida que permite llenar el vaco existente entre las matemticas bsicas que no se suelen ensear computacionalmente y las matemticas avanzadas que casi siempre se tratan con este tipo de mtodos. El libro comienza con una breve introduccin a los conceptos bsicos de MATLAB en el captulo 1, y luego de ella, ste se divide en tres partes. La primera parte contiene los Captulos 2 y 3, y trata los temas relacionados con el Algebra Lineal. En el Captulo 2 se trabajan las Matrices y los Vectores, junto con sus propiedades (inversa, traspuesta, norma y traza, entre otros), y en el Captulo 3, se estudian los sistemas de ecuaciones y los diferentes mtodos computacionales para resolverlos. La segunda parte del libro est compuesta por los Captulos 4, 5 y 6, y presenta el anlisis de funciones. El captulo 4 muestra cmo utilizar MATLAB para visualizar grcamente una funcin de una o de dos variables, y determinar a partir de este grco sus propiedades. Debido a las limitaciones en trminos de dimensin y de algunos clculos especcos, en los captulos 5 y 6 se abandona el mtodo grco y se procede a analizar una funcin a partir del clculo diferencial e integral. En particular, en el captulo 5 se explican en detalle las herramientas disponibles en MATLAB para calcular numricamente la derivada de una funcin en un punto o en un conjunto nito de puntos, a partir de lo cual se pueden determinar regiones

INTRODUCCION

xiii

en donde una funcin crece o decrece adems de otras propiedades, mientras que en el captulo 6 se presentan los diferentes mtodos numricos que se pueden emplear para calcular en MATLAB integrales denidas de cualquier tipo de funcin. Finalmente en la ltima parte del libro se estudia el planteamiento computacional de problemas de optimizacin esttica y de sistemas dinmicos. En el captulo 7 se presentan los mtodos numricos y la utilizacin de MATLAB para analizar la concavidad y convexidad de una funcin. A partir de estos conceptos, en el captulo 8 se muestra cmo resolver numricamente en MATLAB problemas de optimizacin esttica, tanto restringida como no restringida o "libre"Finalmente, el captulo ?? presenta las diferentes formas en que se puede hallar la solucin numrica a sistemas dinmicos, y a partir de ella analizar la existencia, unicidad y estabilidad de los equilibrios que pueden tener este tipo de sistemas. As, este ltimo captulo cierra el libro pero es una buena introduccin al planteamiento computacional de problemas de tipo dinmico. Todos los captulos se desarrollan computacionalmente utilizando como herramienta MATLAB . Existen otros programas para realizar clculos matemticos, como por ejemplo C++, C, FORTRAN o JAVA. Tambin, algunos autores han trabajado en otras plataformas computacionales problemas especcos de economa. Por ejemplo, Thomas Rutherford ha trabajado la programacin de Modelos de Equilibrio General Computable en GAMS-MPSGE1 ; Hal R. Varian ha trabajado herramientas matemticas bsicas y avanzadas utilizadas en economa por medio del lenguaje Mathematica2 . Otros programas como Econometric Views, SPSS y SAS se enfocan en trabajar computacionalmente la estadstica y la econometra. Por otro lado, lenguajes como Ox o Scilab trabajan de manera similar a MATLAB pero cuentan con la ventaja de ser software de libre acceso. En este texto hemos decidido trabajar con MATLAB por varias razones: en primer lugar, muchos autores actualmente trabajan en MATLAB para resolver computacionalmente problemas econmicos. Por ejemplo, Thomas Sargent utiliza MATLAB para modelos de poltica scal, inacin y desempleo, y para resolver matemticamente juegos dinmicos y equilibrios de Nash, Filtro de Kalman y ecuacin de Ricatti, entreRutherford, Thomas (1999). Applied General Equilibrium Modeling with MPSGE as a GAMS Subsystem: An Overview of the Modeling Framework and Syntax. En: Computational Economics, 14:1-46. Kluwer Academic Piblishers 2 Varian, Hal (1996). Computational Economics and Finance: Modeling and Analysis With Mathematica (Economic & Financial Modeling with Mathematica). Ed. Telos.1

xiv

GEDEM - Versin Preliminar

otros. Uhlig3 desarrolla un conjunto de cheros en MATLAB que permite resolver modelos dinmicos en tiempo discreto no lineales estocsticos. Muchos otros autores trabajan sus cursos en MATLAB , como por ejemplo Olivier Blanchard y Finn Kydland, y actualmente es utilizado en el Banco de la Repblica para la construccin de Modelos de Equilibrio General Computable. Adems de esto, MATLAB es muy comn en el desarrollo de aplicaciones cientcas en otras ciencias naturales y sociales. En segundo lugar, la comunidad de usuarios de MATLAB constantemente est produciendo toolboxes de libre acceso por Internet que permiten utilizar MATLAB para cierto tipo de problemas. Por ejemplo, en http://www.spatial-econometrics. com est disponible un Toolbox que permite desarrollar modelos economtricos en MATLAB . De esta manera, aunque existen programas especializados en el desarrollo de ciertos temas, MATLAB tambin cuenta con aplicaciones que permiten desarrollar en su plataforma este tipo de problemas. Finalmente, a diferencia de otras herramientas computacionales, MATLAB permite crear y editar rutinas especializadas en la solucin de cierto tipo de problemas. En algunas ocasiones, utilizar otros programas restringe al usuario en tanto que este solo puede invocar las rutinas, pero no puede editarlas ni vericar o modicar el algoritmo que est programado dentro de ellas. Adems, su forma de programar es similar a la de lenguajes tradicionales de programacin como C++. Debemos mencionar que esta es una version preliminar del libro, aunque el mismo ya se encuentra registrado ante la Direccin Nacional de Derecho de Autor. Actualmente el Grupo trabaja en la correccin del mismo. Cualquier comentario, correccin o sugerencia por favor enviarla al correo electrnico [email protected].

3

Uhlig, Harald. A Toolkit for Analyzing Nonlinear Dynamic Stochastic Models Easily. CEPR

Captulo 1

Conceptos BsicosDiego Corredor, Norman Maldonado1

1.1. Qu es MATLAB ?MATLAB es un lenguaje de computacin tcnica de alto nivel y un entorno interactivo para desarrollo de algoritmos, visualizacin de datos, anlisis de datos y clculo numrico, es la abreviatura de MATrix LABoratory, y fue diseado en los 70 s como una interface que permita la solucin de grandes sistemas de ecuaciones lineales. Desde entonces el software ha extendido su aplicacin a diferentes campos especcos, como la estadstica, las redes neuronales, la lgica difusa, las nanzas, el procesamiento de imgenes y sonido, etc., permitiendo manipular y solucionar sistemas dinmicos, datos estadsticos, informacin econmica y nanciera, realizando simulaciones de sistemas y estructuras en fsica, qumica y algunas ingenieras. Este software se caracteriza por realizar sus clculos utilizando matrices y vectores, permitiendo manipular grandes cantidades de informacin de manera rpida y sencilla, es una de las interfaces de mayor uso a nivel mundial, y actualmente se trabaja con ella en Biotecnologa, Medicina, Comunicaciones, Electrnica, Servicios Financieros y Aeroespacio.

MATLAB dispone de un cdigo bsico y de varios toolboxes 2 , o libreras especializadas en el manejo y solucin de problemas especcos, como por ejemplo, ecuaciones diferenciales parciales, optimizacin restringida o en ms de dos dimensiones, series de tiempo, variables simblicas, distribuciones de probabilidad, etc. Estos toolboxesFavor enviar correcciones, comentarios o sugerencias a [email protected] Los toolboxes son paquetes de herramientas adicionales que el usuario tiene la posibilidad de adquirir individualmente segn sus necesidades particulares.2 1

1

2

GEDEM - Versin Preliminar

son un conjunto de funciones compatibles con el cdigo bsico, y estn diseadas para resolver problemas complejos que el programa inicialmente no puede solucionar 3. Existen dos tipos de toolboxes: por un lado se encuentran los toolboxes diseados por el grupo creador de MATLAB (The MathWorks Inc.), y por otro lado, los toolboxes desarrollados por usuarios comunes del programa con el n de suplir sus propias necesidades (generalmente estos ltimos son de libre acceso en Internet, e incluso algunos de ellos se pueden bajar de manera gratuita de la pgina web de Mathworks Inc. 4 ). En este libro nos centramos en el cdigo bsico del programa y en un toolbox de distribucin gratuita denominado CompEcon5 aplicado a economa y nanzas.

1.2. Ventanas de MatlabComenzamos por presentar las ventanas ms importantes del programa. Al abrir el programa por primera vez, se despliega un conjunto de ventanas como el que se observa en la Figura 1.1. Las ventanas desplegadas son: Command Window, Launch Path, Workspace, Command History y Current Directory6 ; cada una se explica a continuacin.

1.2.1. Command WindowEsta ventana se encuentra ubicada en la parte derecha de la pantalla, y en ella son digitados y ejecutados, simultneamente, los comandos del programa. En esta ventana tambin se muestran los resultados de todas las operaciones, tanto las de MATLAB bsico como las de los toolboxes. La ventana de comandos trabaja de la siguiente forma: en la ltima lnea que inicia con el smbolo () se digita la instruccin, y sta es ejecutada al presionar la tecla `Enter'; luego de ello, en esta misma ventana, son visualizados los resultados del procedimiento. Por ejemplo si le decimos al programa que realice la siguiente operacin: 1 +2 5 ; primero debemos digitar:Dado que no est preprogramado para hacerlo. La pgina web de The Mathworks Inc. es www.mathworks.com 5 Desarrollado por Paul Fackler y Mario Miranda, profesores de North Carolina State University y Ohio State University, respectivamente. Este toolbox se encuentra disponible en la direccin www4.ncsu.edu/~pfackler/compecon/download.html y fue desarrollado como complemento del libro Fackler y Miranda (2003) 6 El usuario puede cambiar la disposicin de las ventanas en el men de la barra de herramientas view desktop layout. La Figura 1.1 corresponde a la opcin Default de este men.4 3

CONCEPTOS BSICOS

3

Figura 1.1: Conjunto Inicial de Ventanas

(1+sqrt(5))/2Luego presionamos `Enter'y el resultado es:

ans = 1.6180Si por algn motivo se presenta un error, el programa despliega un mensaje de alerta, en letra de color rojo, que describe el error que se ha presentado.

1.2.2.

Launch Pad

Esta ventana se encuentra ubicada en la esquina superior izquierda de la aplicacin. En ella se seala cada uno de los elementos cargados en la iniciacin del programa, es decir, las herramientas de las cuales dispone el usuario para realizar sus clculos. As, deben aparecer el cdigo bsico del programa y todos los toolboxes creados por The MathWorks Inc. y adquiridos por el usuario. En la Figura 1.1 se observa que se ha cargado MATLAB bsico y algunos otros toolboxes (Communication Toolbox, Control System Toolbox, Data Acquisition Toolbox, Database Toolbox, Datafeed Toolbox, Filter Design Toolbox, etc). A travs de esta ventana, y desplegando el men correspondiente a cada elemento

4

GEDEM - Versin Preliminar

Figura 1.2: Command Window o Ventana de Comandos

Figura 1.3: Launch Pad (como se observa en la Figura 1.3) se puede acceder fcilmente a tutoriales, demos, herramientas particulares, asi como a documentacin referente a los elementos cargados.

1.2.3. WorkspaceEsta ventana se encuentra en la misma posicin del Launch Pad, y para acceder a ella es necesario hacer click en la pestaa Workspace en la parte izquierda de la pantalla. Como se observa en la Figura 1.4, en esta ventana se muestran todos las variables que el usuario ha denido en la sesin, en la columna Name se muestra el nombre de cada una de las variables, en la segunda columna llamada Size se muestra el tamao de cada variable7 , en la tercera y cuarta columna se encuentran especicados el nmero7

Dado que

MATLAB

trabaja con matrices, la especicacin del tamao de la variable es

CONCEPTOS BSICOS

5

Figura 1.4: Workspace de bytes que ocupa cada variable y el tipo de variable u objeto8 .

1.2.4.

Command History

Se encuentra ubicada en la parte inferior izquierda de la ventana principal y como su nombre lo indica, su funcin es la de llevar un historial de los comandos utilizados por el usuario. Resulta de gran utilidad ya que cualquier comando, o conjunto de comandos, que sea ejecutado en la Ventana de Comandos (o Command Window) puede ser fcilmente recuperado; adicionalmente permite hacer seguimiento de los comandos utilizados en determinado momento y/o procedimiento.

Figura 1.5: Command History Como se muestra en la Figura 1.5, los comandos de cada sesin son almacenados y organizados por fecha, por medio del rtulo %-- Hora Fecha-- %(Nmero de las Nmero de columnas). 8 Los tipos de variables y sus caractersticas son presentados en la seccin 1.5.3.

6

GEDEM - Versin Preliminar

1.2.5. Current DirectoryTambin se encuentra en la parte inferior izquierda de la ventana principal. Para acceder a Current Directory es necesario hacer click sobre la pestaa Current Directory en la parte inferior izquierda de la pantalla, como se observa en la Figura 1.6. Esta ventana permite que el usuario observe el directorio sobre el cual est trabajando, al igual que los archivos que se encuentran dentro de ste, como se muestra en la Figura 1.6.

Figura 1.6: Current Directory El lugar especicado por defecto para guardar los archivos del usuario es la carpeta work, que se encuentra ubicada dentro de la carpeta principal del programa; si el usuario guarda un archivo en alguna ubicacin diferente (por ejemplo C:\Mis documentos), este no podr ser abierto ni ejecutado, a menos que se le especique al programa la ubicacin del mismo. Las anteriores son las ventanas bsicas de trabajo. Existen otras de uso ms especco, como por ejemplo las ventanas de grcos o las de Demos; algunas de ellas las describiremos a lo largo del libro.

1.3. M-File EditorEn algunas ocasiones, el usuario requiere utilizar varias lneas de comandos para solucionar un problema especial. En estos casos no es recomendable utilizar la ventana de Comandos, pues si algn error ocurre, es necesario volver a digitar todas las instrucciones.

CONCEPTOS BSICOS

7

La ventana M-le Editor permite digitar los comandos en un programa o M-le que recoge mltiples instrucciones, para ejecutarlas de manera secuencial (en orden de lneas). Para crear un M-File, se debe seleccionar en la parte superior de la Ventana de comandos, File New M-File. Aparece, entonces, el Editor de M-Files, Figura 1.7.

Figura 1.7: Editor de M-Files Adems de permitir digitar mltiples instrucciones simultneamente, un M-le puede complementarse con comentarios, es decir, lneas que no son ledas por MATLAB pero que sirven para construir de manera organizada estos programas colocando explicaciones luego de una o varias instrucciones. Para insertar un comentario, se digita el smbolo % y luego se escribe el comentario. Cuando se comenta una lnea, esta aparece en color verde, como se observa en la Figura 1.8

Figura 1.8: Comentarios con % En esta Figura podemos observar como, a medida que se va escribiendo el programa,

8

GEDEM - Versin Preliminar

se enumera cada rengln o lnea en la parte izquierda de la pantalla. Al generarse un error es posible ubicar donde se cometi, pues el programa indica la lnea en donde ste se encuentra. Adicionalmente, se observa que, para realizar comentarios, no es necesario colocar siempre el smbolo % al comienzo de una lnea, sino que tambin se pueden colocar comentarios luego de una instruccin, como se observa en las lneas 3 y 4 de nuestro M-File. Para comentar mltiples lneas, se deben seleccionar las lneas que se desean comentar y luego de ello presionar Ctrl+R, o seleccionar en la parte superior del editor de MFiles, Text Comment. De manera similar, cuando se necesita quitar los % de las lneas comentadas, se utiliza Ctrl+T o en el men Text se selecciona Uncomment. Todo M-File debe ser guardado en una carpeta para que pueda ser ejecutado. Por defecto, el programa utiliza la carpeta Work para almacenar los archivos, aunque se puede guardar en otra carpeta. En este caso se ha guardado el M-File en la carpeta Work con el nombre pcb, la ubicacin del archivo se observa en la parte superior de la pantalla, que en este caso es C:\MATLAB6p1\work \pcb.m.9 como se observa en la parte superior de la Figura 1.8. El comando pcb muestra como realizar la operacin ejecutada anteriormente en la ventana de comandos de otra manera:

%Para calcular (a+b)/c, tenemos que: % Valor de a a=1; % Valor de b, es decir raz cuadrada de cinco. b=sqrt(5); % Valor de c c=2; % Operamos (a+b)/cUn M-File, puede ejecutarse de cuatro formas distintas, (en todas ellas el M-File se guarda automticamente antes de ser ejecutado): primero, presionando la tecla F5; segundo, seleccionando Debug Run en la parte superior del Editor de MFiles; tercero, haciendo click sobre el cono , en la ventana del editor; y cuarto,Cuando no se ha guardado el archivo, al lado de esta ubicacin aparece el smbolo * , y una vez guardado, ste desaparece.9

CONCEPTOS BSICOS

9

escribiendo el nombre del M-le en la Ventana de Comandos y presionando Enter. Los resultados de la ejecucin del programa o M-File que se mostr en la Figura 1.8, aparecen en la Ventana de Comandos de la Figura 1.9.

Figura 1.9: Ventana de Comandos y Resultados Cuando hay un error en el M-le. El programa dice en que lnea y en que columna se presenta este error. Para corregirlo, se puede ir al M-File haciendo doble click sobre el link que aparece en la Ventana de Comandos y luego de ello realizar la correccin. Hay dos aspectos del programa que se pueden precisar a partir de la gura 1.9: Aunque en la Ventana de Comandos solo aparece el valor 1.6180, ste no es el nico clculo que el programa ha realizado. Si observamos el Workspace, vemos que las variables a, b y c han sido creados. Lo que ocurre es que el programa ejecuta todas las lneas, pero solo muestra en la Ventana de Comandos los resultados de aquellas lneas que NO terminan en ;. As, cuando se corren programas que crean matrices muy grandes o realizan clculos extensos, utilizar ; al nal de cada instruccin permite que el programa slo ejecute las instrucciones sin gastar tiempo en mostrar clculos parciales o intermedios (Siempre, mostrar los resultados parciales es computacionalmente ineciente). Despus de observar la salida es posible ejecutar el M-le varias veces y sigue apareciendo el resultado anterior en la Ventana de Comandos MATLAB dispone de tres comandos para limpiar la pantalla y cerrar ventanas. El primero es clc, que limpia la Ventana de Comandos de resultados anteriores. El segundo es clear, que limpia el Workspace, es decir, borra todas las variables y objetos creados hasta el momento. Finalmente, se tiene el comando close, que cierra las ventanas adicionales que se abren al ejecutar ciertas instrucciones, como

10

GEDEM - Versin Preliminar por ejemplo, las nuevas ventanas que contienen grcos. Se sugiere que estos tres comandos se coloquen siempre al comienzo de un M-File.

Hasta ahora hemos visto como los M-les sirven para presentar una sucesin de comandos anloga a la que se hara desde la Ventana de Comandos, este tipo de Mles se conocen como cheros de comandos o Scripts , sin embargo existen otro tipo de archivos .m que representan funciones . Una funcin, en trminos computacionales, es un programa que recibe unas entradas o inputs , y realizando clculos matemticos y lgicos genera unas salidas u outputs . Todo el cdigo bsico de MATLAB y los toolboxes estn compuestos de M-les que son utilizados como funciones. Para construir una funcin en un M-le, se debe colocar la sintaxis:

[salidas]=nombre(entradas)donde salidas representa un vector de resultados que arroja la funcin a partir de las entradas. En este caso, nombre corresponde al nombre de la funcin, y debe ser tambin el nombre con el cual se guarda el M-le donde se construye la funcin. Luego de esta primera lnea deben aparecer otras lneas con las instrucciones para realizar las operaciones matemticas y lgicas que calculan las salidas u outputs de la funcin. Para ilustrar estos conceptos veamos un ejemplo. Un problema frecuente en lgebra es el de hallar las races o valores de x de una ecuacin cuadrtica de la forma ax2 + bx + c = 0. Sabemos que las soluciones son:

x1 , x2 =

b

b2 4ac 2a

Podemos crear una funcin en un M-le de MATLAB , que calcule las races de una ecuacin cuadrtica. Esta funcin, que llamaremos raiz, recibir como input o entradas los valores de a, b y c, y generar como output o salidas las 2 races o valores de x. La sintaxis es la siguiente:

function [x1,x2]=raiz(a,b,c); x1=(-b+(sqrt(b^2-4*a*c)))/(2*a); x2=(-b-(sqrt(b^2-4*a*c)))/(2*a);Una vez guardada la funcin (con el nombre raiz.m), sta se puede invocar desde la Ventana de Comandos o desde algn otro M-le. Por ejemplo, para hallar las races de 2x2 + 4x + 1 = 0 podemos utilizar la funcin que creamos ejecutando la siguiente instruccin en la Ventana de Comandos:

CONCEPTOS BSICOS

11

[x1,x2]=raiz(2,4,1)Como resultado se obtiene:

x1 = -0.2929 x2 = -1.7071Finalmente, hay que mencionar una caracterstica adicional de la que disponen los Mles. Cuando hay lneas que son muy largas, por ejemplo en frmulas matemticas bastante complejas, MATLAB permite dividir estas lneas mediante tres puntos suspensivos ... que se deben colocar al nal de cada segmento. Por ejemplo, veamos la particin de la frmula cuadrtica mencionada en el ejemplo anterior. Para ello, coloquemos en la primera lnea el numerador y en la segunda (separada de la primera con puntos suspensivos) el denominador, as:

function [x1,x2]=raiz(a,b,c); x1=(-b+(b^2-4*a*c)^0.5)... /(2*a); x2=(-b-(b^2-4*a*c)^0.5)... /(2*a);Cuando se colocan los puntos suspensivos de la manera correcta, el programa muestra estos puntos de color azul oscuro. Los resultados que se obtienen con esta programacin son exactamente los mismos que se obtienen con la anterior.

1.4. Procesos iterativosExisten dos mtodos para resolver problemas matemticos: analticos y numricos. Los mtodos analticos aplican conceptos matemticos para hallar una solucin. En contraste, los mtodos numricos generalmente asignan valores a las variables involucradas en un problema y evalan condiciones sobre tales valores para determinar si se ha hallado la solucin. Por otro lado, existen dos formas en que se pueden realizar los clculos los clculos, tanto analticos como numricos, para solucionar un problema: manualmente y computacionalmente. Para entender cmo funciona cada mtodo, vamos a solucionar un problema muy sencillo: calcular el valor de x que satisfaga la ecuacin x + 5 = 4. Analticamente (utilizando lgebra) sabemos que para hallar x debemos colocar to-

12

GEDEM - Versin Preliminar

dos los nmeros a la derecha de la igualdad y dejar solo la variable x a la izquierda, reescribiendo la ecuacin de la forma x = 45. Luego, debemos realizar las operaciones aritmticas necesarias entre los valores que estn a la derecha de la igualdad (en este caso restar 5 a 4) para hallar el valor de la variable. Este procedimiento se puede realizar manualmente, haciendo la resta 4 5, o computacionalmente, utilizando un programa de computador que realice dicha resta. De esta manera, se puede hallar la solucin x = 1 por el mtodo analtico, y realizando las operaciones manual y/o computacionalmente. Una manera alternativa de resolver este ejercicio es numricamente. En este caso, aplicar este mtodo consiste en dar distintos valores a la variable x hasta que se cumpla la igualdad x+5 = 4. Realizar este trabajo manualmente implicara construir un Cuadro similar al 1.1.

(1) Iteracin1 2 3 4

(2) x-4 -3 -2 -1

(3) x+51 2 3 4

(4) = 4= = = =4 4 4 4

Cuadro 1.1: Mtodo Numrico para hallar x Para construir el cuadro se comenz, en la primera la, por asignar el valor de -4 a x (Columna 2); una vez se asign este valor a x se evalu el lado izquierdo de la igualdad (x + 5 4 + 5 = 1, Columna 3) y se determin si coincida con el lado derecho de la igualdad (Columna 4). Este proceso es conocido como una iteracin (Columna 1). Como en la primera iteracin no se cumpla la igualdad, fue necesario volver a realizar otra iteracin, esta vez con x = 3. En total, se realizaron 4 iteraciones para poder hallar el valor de x (x = 1). Ntese que este proceso se pudo haber realizado manual o computacionalmente. Los dos mtodos (analtico y numrico) nos permitieron llegar a la solucin. Sin embargo, el mtodo numrico, result ser poco eciente, es decir requiri de ms recursos (tiempo y programacin). Adems, fue ms fcil realizar manualmente las operaciones requeridas por el mtodo analtico. En general resulta poco eciente el clculo manual de las operaciones que requiere un metodo numrico. Una herramienta computacional como MATLAB elimina las limitaciones de clculo, resolviendo este tipo de problemas.

CONCEPTOS BSICOS

13

En el ejemplo anterior, el mtodo numrico fue un camino largo para hallar la solucin. Esto no siempre ocurre, hay algunos problemas que son imposibles de abordar analticamente y aunque podran resolverse manualmente utilizando mtodos numricos, se llevara mucho tiempo realizar todos los clculos, adems es probable que durante el proceso se cometan errores humanos. El objetivo de este libro es presentar una herramienta computacional para resolver problemas de economa matemtica analtica y numricamente. Para trabajar en MATLAB el mtodo analtico se trabaja con variables simblicas, las cuales permiten trabajar en el computador de la misma manera en que se suele trabajar en un curso de lgebra (despejando variables, cambiando signos, etc.). MATLAB dispone de un toolbox no gratuito llamado Symbolic Toolbox que permite trabajar con este tipo de variables. Este es muy til para despejar una o ms variables cuando las expresiones en las que stas se encuentran son complicadas. Trabajar el mtodo numrico requiere de expresiones conocidas como bifurcaciones y bucles, que permiten resolver computacionalemnte procesos iterativos como el del Cuadro 1.1. Las bifurcaciones permiten realizar una u otra operacin segn se cumpla o no una determinada condicin. Los bucles permiten repetir las mismas o anlogas operaciones sobre datos distintos.Garca de Jaln (2001). Algunas de estas expresiones utilizadas por MATLAB son if, for, break, while, switch, try y catch. A continuacin explicamos los tres primeros, dado que son los que vamos a trabajar en esta primera parte del libro, ms adelante se presentar el resto de las expresiones. La sentencia if es una bifurcacin, y realiza operaciones distintas dependiendo de si se cumple o no una condicin. La forma general para una condicin es:

if condicion sentencias1 else sentencias2 endEn este caso, si se cumple la condicin (if), se realizan las operaciones que componen el primer grupo de sentencias (sentencias1). Si no se cumple la condicin (else), se ejecuta el segundo grupo de sentencias (sentencias2). En caso de omitir else y sus respectivas sentencias (sentencias2) y adems no se cumple la condicion,

14

GEDEM - Versin Preliminar

no se realiza ningn clculo. Cuando existen mltiples condiciones, la forma general es:

if condicion1 sentencias1 elseif condicion2 sentencias2 elseif condicion3 sentencias3 else sentencias4 endPor otro lado, la sentencia for es un bucle, y realiza de manera repetida una secuencia de operaciones con un determinado conjunto de datos. Su forma ms sencilla es:

for i=1:n sentencias endEn este caso, el programa comienza por asignar a i el valor de 1 y realiza todas las operaciones establecidas en las sentencias (Se ha tomado arbitrariamente como contador la variable i. Sin embargo, este contador hubiera podido ser cualquier otra variable, por ejemplo, for a=1:n). A continuacin, i toma el valor de 2 y de nuevo, se realizan las operaciones. Este proceso se repite n veces, y en la solucin de un problema por medio de mtodos numricos cada repeticin del proceso se llama iteracin. Sin embargo, el contador (en este caso i) no est limitado a tomar valores enteros positivos. Un caso ms general es cuando el contador es un vector de la forma [vi , vi + a, (vi + a) + a , . . . , vf ] que contiene un conjunto de valores que comienzan en vi, terminan en vf y estn separados en intervalos de magnitud a. La forma de la sentencia for en el caso ms general es:

for i=vi:a:vf sentencias enddonde vi es el valor inicial del contador, vf es su valor nal y a es la magintud que

CONCEPTOS BSICOS

15

separa los valores del contador i. Por ejemplo, para colocar en la sentencia for un contador i que contenga los valores 0.3 0.4 0.5 . . . 3.4, la programacin debe ser de la forma:

for i=0.3:0.1:3.4 sentencias endIlustremos estos comandos con el ejemplo anterior. Vamos a construir un programa que resuelva numricamente la ecuacin x + 5 = 4. La idea es asignar valores a x entre -4 y 4, evaluar el lado izquierdo de la igualdad y vericar si este resultado coincide con el lado derecho.

for x=-4:1:4 li=x+5 % li=Lado Izquierdo ld=4 % ld=Lado Derecho if li==ld break end; end xEn la primera lnea se establece que el proceso, en caso de no cumplir la condicin, se va a repetir 9 veces (nmero de valores entre -4 y 4 con intervalos de magnitud a=1). En la primera iteracin se asigna a x el valor de -4; luego, en la segunda lnea, con este valor de x se evala el Lado Izquierdo (li) de la ecuacin, que en este caso es x+5, y se dene el Lado Derecho (ld=4). En la tercera lnea se evala, utilizando if, si el Lado Izquierdo li es igual al derecho (4). Si se cumple la condicin, la sentencia if termina o rompe el proceso for por medio de la instruccin break; si no se cumple la condicin, la sentencia if no hace nada. Luego se contina con la segunda iteracin en donde x toma el valor de -3, se repite el proceso, y as sucesivamente hasta que se cumpla la condicin o hasta que el programa haya evaluado todos los valores de x. Con este programa, MATLAB luego de cuatro iteraciones, encuentra la solucin x = 1. En procesos iterativos como el que se acaba de mostrar, no siempre se llega a una solucin, caso en el cual se dice que no hay convergencia. Por ejemplo, si x hubiera tomado valores de [-4:1:-2] o de [-3.5:0.2:3.5] no se habra llegado

16

GEDEM - Versin Preliminar

a una solucin. En el primer caso, cuando x=[-4:1:-2], a pesar de realizar todas las iteraciones, dentro de los valores asignados a x no es posible encontrar la solucin x=-1. En el segundo caso, cuando x=[-3.5:0.2:3.5], el proceso pasa cerca de la solucin asignando a x valores de -1.1 y -0.9. A pesar de que estos valores son cercanos a la solucin x=-1, no satisfacen de manera estricta la condicin x+4=5, razn por la cual el proceso los descarta como posibles soluciones y nalmente no converge. La regla de iteracin en el anterior ejercicio era trivial y arbitraria, aunque fue til para ilustrar el uso de las sentencias if y for. En realidad, las reglas que se utilizan para la solucin de problemas por medio de mtodos numricos son ms elaboradas y permiten establecer condiciones para que el problema converja hacia una solucin. Estas reglas de iteracin y mtodos numricos se mencionan ms detalladamente en captulos posteriores 10 .

1.5. Otros Conceptos Bsicos1.5.1. PathEn el momento de ejecutar algn chero (M-le), se requiere que el archivo se encuentre dentro de alguna carpeta que pueda reconocer el software. Para que una carpeta pueda ser reconocida, se necesita que sta se encuentre dentro de la ruta de bsqueda del programa. En el Path solo estn registradas las carpetas del directorio C:\MATLAB6p1, incluyendo la carpeta Work. Sin embargo, cheros en otras carpetas que no estn en el Path no sern reconocidos por MATLAB y generarn errores de ejecucin, a menos que se direccione el programa hacia la ubicacin de esos archivos. Por ejemplo, si se ejecuta el chero pcb.m ubicado en C:\GEDEM\pcb.m, el programa arroja el siguiente error de ejecucin:

??? Undefined function or variable pcb.Para aadir una carpeta al Path, se debe ir al men File Set Path, en donde aparece una Ventana similar a la Figura 1.10. Por medio de la opcin Add Folder, se puede agregar cualquier carpeta al Path. Una vez agregada la carpeta, es necesario guardar los cambios en el Path orpimiendo el botn Save. Otras opciones disponibles en este men permiten eliminar carpetas del Path, colocar el Path que el software trae por defecto o incluir todas las subcarpetas de una carpeta.10

Se sugiere consultar algunos textos como Fackler (2003), Judd (1998) y Mora (2001).

CONCEPTOS BSICOS

17

Figura 1.10: Path de Matlab

1.5.2.

Help y Doc

El comando help permite desplegar la ayuda de cada uno de los comandos y funciones. En esta ayuda, generalmente aparece la sintaxis del comando y las diferentes opciones que este tiene. En la mayora de casos, este comando se utiliza en la Ventana de Comandos y se escribe de la forma help rutina, donde rutina se reere al nombre del comando o rutina del que se desea obtener informacin. Por ejemplo, xlabel es un comando que permite colocar una etiqueta al eje x de una grca. Al escribir help xlabel en la Ventana de Comandos, se obtiene:

XLABEL X-axis label. XLABEL(text) adds text beside the X-axis on the current axis. XLABEL(text,Property1,PropertyValue1,...) sets the values of the specified properties of the xlabel. H = XLABEL(...) returns the handle to the text object used as the label. See also YLABEL, ZLABEL, TITLE, TEXT.Las rutinas de MATLAB estn organizadas por temas en diferentes carpetas. Por ejemplo, en la carpeta C:\MATLAB6p1\toolbox\matlab\sparfun se encuentran todas las rutinas para trabajar con un tipo especial de matrices que veremos

18 ms adelante, que son las matrices dispersas.

GEDEM - Versin Preliminar

help tambin es til para ver los comandos o rutinas disponibles para trabajar un tema en particular, por ejemplo, ejecutando en la Ventana de Comandos la instruccin help C:\MATLAB6p1\toolbox\matlab\sparfun, se muestran todos los comandos o rutinas, que sirven para trabajar con matrices dispersas.

MATLAB tambin permite que el usuario pueda colocar una seccin de ayuda (ohelp) a los M-les que l construya. Si el M-le es un programa, esta opcin es til porque permite colocar un comentario que describa la utilidad del programa que se cre. Si el M-le es una funcin, con esta opcin se puede disear un help similar a los que tienen las rutinas del software, que describa tanto los inputs como los outputs de dicha funcin. Para colocar una seccin de ayuda en cualquier M-le, es necesario colocarla al inicio de ste, en lneas consecutivas comentadas. Por ejemplo, retomando el M-le pcb.m creado anteriormente, y colocando en l una seccin de ayuda, el M-le quedara de la forma:

% Programa para crear la Matriz A y el Vector B % Creado para el Captulo de Conceptos Bsicos % Ya esta corregido % Esto ya no es seccin de Ayuda A=[1 2 3; % Primera Fila 4 5 6] % Segunda Fila B=[5 8]; % Vector con ;Ejecutando en la Ventana de Comandos help pcb o help pcb.m , se obtienen las tres primeras lneas, que tienen el signo % al comienzo de la lnea, y que no estn separadas por espacios. Esto quiere decir que la expresin

% Esto ya no es seccin de Ayudano aparece en la salida porque se encuentra separada por un espacio del bloque de lneas consecutivas que tienen el smbolo %. Las salida de MATLAB al ejecutar help pcb se presenta en la Figura 1.11. Para no entorpecer el trabajo en la Ventana de Comandos, dado que todas las ayudas

CONCEPTOS BSICOS

19

aparecen en esta ventana, se recomienda trabajar con helpwin rutina, cuando se utiliza este comando se abre la ventana de ayuda del programa presentando la misma salida que presenta help pero en una ventana diferente, en esta ventana aparecen las ayudas de las rutinas del programa y las creadas por el usuario.

Figura 1.11: Help de pcb Por otro lado, el comando doc permite consultar la documentacin en lnea disponible en MATLAB sobre cualquier comando o rutina. Esta documentacin contiene informacin ms detallada que la especicada en el help sobre la sintaxis y mtodos numricos que utiliza cada rutina. Para poder utilizar el comando doc se requiere que el usuario, durante el proceso de instalacin, haya instalado adems del programa toda la documentacin. La sintaxis del comando es doc rutina, donde rutina corresponde al comando o rutina del cual se quiere consultar la documentacin. Por ejemplo, al ejecutar en la Ventana de Comandos doc clc, MATLAB despliega la documentacin para el comando clc en una ventana nueva, similar a la que aparece en la Figura 1.12.

1.5.3.

Objetos

MATLAB , con base en vectores y matrices, trabaja otro tipo de datos (objetos):Cadenas de caracteres. Una cadena de caracteres es un objeto que contiene caracteres (no necesariamente numricos). Estas cadenas tienen mltiples funciones, entre ellas colocar ttulos o texto en grcas o modicar propiedades de otros objetos. Las funciones para cadenas de caracteres estn en el sub-directorio:

20

GEDEM - Versin Preliminar

Figura 1.12: Documentacin de clc

C:\MATLAB6p1\toolbox\matlab\strfunLos caracteres de una cadena se almacenan en un vector, y cada caracter se almacena en una de las posiciones del vector. Para introducirlas en MATLAB , stas se deben colocar dentro de comillas simples . Por ejemplo, para crear la cadena Eje x, la sintaxis es: Eje x . Si este procedimiento se realiza de manera adecuada, el programa coloca la cadena de texto y las comillas en color rojo oscuro. Esta cadena es almacenada en un vector de tamao 15 como un objeto de tipo char array (character array) que ocupa 10 bytes en el Workspace11 . En algunas ocasiones se requiere que algn texto dentro de la cadena de caracteres vaya entre comillas. Para ello, dichas comillas se representan por un doble caracter comilla . Por ejemplo, para crear la cadena Eje `x' , se debe colocar la instruccin: Eje x . Como las cadenas de caracteres son almacenadas en vectores la, a partir de ellas se puedan crear matrices de caracteres. As, una matriz de caracteres es una matriz cuyas las son cadenas de caracteres. Todas las las de una matriz de caracteres deben tener el mismo nmero de elementos. Cuando esto no ocurre, es necesario completar con espacios las cadenas (las) ms cortas. Algunos de los comandos que nos permiten trabajar con cadenas de caracteres11

En toda cadena de caracteres, cada caracter ocupa 2 bytes de memoria.

CONCEPTOS BSICOS se presentan en el Cuadro 1.2.Comando Caractersticas

21

char(c1,c2,...)

deblank(c1) c1==c2

int2str(a) num2str(a,n)

str2double(c1) c1=cellstr(C)

Crea una matriz de caracteres a partir de las cadenas c1, c2,..., completando con espacios las cadenas ms cortas. Elimina los espacios al nal de una cadena de caracteres c1. Compara dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y ceros, dependiendo de si el elemento es igual o diferente, respectivamente. Convierte un nmero entero a en cadena de caracteres. Convierte un nmero real a en cadena de caracteres. Cuando el nmero tiene decimales, por defecto, se almacenan en la cadena solo cuatro cifras decimales. (el nmero de decimales puede ampliarse o reducirse a n). Convierte una cadena de caracteres representando un nmero real en el nmero real correspondiente. Convierte una matriz de caracteres C en un vector de celdas c1, eliminando los espacios al nal de cada cadena.

Cuadro 1.2: Algunos Comandos sobre Cadenas de caracteres

Estructuras. Una estructura (struct) es una agrupacin de datos de diferente tipo bajo un mismo nombre. Estos datos se llaman miembros (members) o campos (elds)12 . Una estructura se dene en MATLAB separando sus campos por puntos, e introduciendo un valor o cadena de caracteres que dena el campo. Veamos un ejemplo que ilustre estos conceptos. Podemos crear una estructura que contenga el PIB per cpita y la participacin del consumo dentro del PIB del ao 2000 para algunos pases latinomaericanos (Colombia, Argentina, Brasil y Paraguay). Para ello, necesitamos crear el12

Garca de Jaln (2001)

22

GEDEM - Versin Preliminar campo Variable (PIB per cpita o participacin del consumo), y dentro de este campo, denir otro para Pas. Para introducir los datos, se debe escribir en MATLAB lo siguiente:

% Primer Campo: Variable pibp=PIB Percapita pibp.col=5795.55 % col=Colombia pibp.arg=11729.08 % arg=Argentina pibp.bra=7744.71 % bra=Brasil pibp.pry=4801.30 % pry=Paraguay % Segundo Campo: pcon.col=67.93 pcon.arg=69.06 pcon.bra=65.75 pcon.pry=77.14 Variable pcon=Partic. Consumo en PIB % col=Colombia % arg=Argentina % bra=Brasil % pry=Paraguay

De esta manera se han creado dos estructuras: la primera contiene datos de pib percpita para cuatro pases de Latinoamrica y la segunda contiene datos de participacin en el consumo para el mismo grupo de pases13 . Los campos (variable y pas) estn separados por . . Al invocar en la Ventana de Comandos estas dos estructuras, es decir, al ejecutar pibp,pcon, la salida de MATLAB debera ser similar a la que se presenta en la Figura 1.13.

Figura 1.13: Estructuras pibp, pcon Se observa en el Workspace que se han creado dos objetos tipo estructuraLos datos se han tomado de Alan Heston, Robert Summers and Bettina Aten, Penn World Table, Version 6.1, Center for International Comparisons at the University of Pennsylvania (CICUP), Octubre 2002.13

CONCEPTOS BSICOS

23

(structure array), y cada uno de ellos contiene campos relacionados con pases de Latinoamrica. Se puede acceder a la informacin que tiene cualquiera de estos campos escribiendo su ubicacin. Por ejemplo, para acceder a la participacin que tiene el consumo en el PIB de Colombia, basta con escribir en la Ventana de Comandos pcon.col, que arroja como resultado 67.93. el software dispone de comandos que sirven para manipular estructuras. Algunos de ellos se presentan en el Cuadro 1.3.Comando e=struct( campo1 ,valor1,...)rmfield(ES,e)

Caractersticas Permite crear la estructura e en una sola lnea Elimina el campo e de la estructura ES

Cuadro 1.3: Algunos Comandos sobre Estructuras Anteriormente creamos la estructura pibp mediante cuatro instrucciones. Podemos utilizar el comando struct para crear esta estructura en una sola instruccin, as:

pibp=struct( col ,5795.55, arg ,11729.08,... bra ,7744.71, pry ,4801.30)Como las estructuras son objetos que permiten almacenar datos, es de esperar que stas se puedan almacenar en matrices y vectores. Para ello, basta con especicar la posicin que debe ocupar la estructura dentro de una matriz o un vector. Por ejemplo, para crear las dos estructuras del ejemplo anterior (PIB percpita y participacin del consumo para algunos pases de Latinoamrica, ao 2000) y colocar estas estructuras en un vector lat, que contega la informacin de estas variables para algunos pases de Latinoamrica:

% Pib Percapita pibp=struct( col ,5795.55, arg ,11729.08,... bra ,7744.71, pry ,4801.30) % Participacion Consumo en PIB pcon=struct( col ,67.93, arg ,69.06,... bra ,65.75, pry ,77.14) lat(1)=pibp;

24

GEDEM - Versin Preliminar

lat(2)=pcon;Con estas instrucciones, se crea un vector lat con dos columnas que contiene campos (12 struct array with fields). En su primera columna (lat(1)), este vector contiene el PIB percpita:

ans = col: arg: bra: pry: 5795.55 11729.08 7744.71 4801.30

mientras que en la segunda columna (lat(2)), contiene informacin sobre la participacin del consumo:

ans = col: arg: bra: pry: 67.93 69.06 65.75 77.14

Vectores o matrices de celdas (cell arrays). Un cell array es un objeto de tipo ms general, ya que permite combinar diferentes tipos de datos (numricos, cadenas de caracteres, estructuras) en uno solo. Esto implica que un cell array puede admitir, por ejemplo, en su primera posicin, una estructura, en su segunda posicin una matriz y en la tercera una cadena de caracteres14 . Un cell array se crea especicando la posicin en que se desea colocar el objeto dentro del cell array y colocando el objeto dentro de llaves { }. Veamos un ejemplo:

ca(1)={[3 5 4]}; % Vector en la posicion 1 ca(4)={(conceptos basicos)} % Cadena de Caracteres en la posicion 4En este ejemplo hemos creado un cell array que contiene cuatro objetos: en su primera posicin, contiene un vector de 31, en la segunda y tercera contiene matrices vacas, y en la cuarta una cadena de caracteres. Ntese que no es14

Contrario a los otros objetos, que solo permiten un mismo tipo de datos en todas sus posiciones.

CONCEPTOS BSICOS

25

necesario introducir los elementos de un cell array en orden consecutivo: se pueden introducir en cualquier posicin y MATLAB automticamente crea objetos vacos en las posiciones en las que no se introdujo ningn elemento. Algunos de los comandos para trabajar con cell arrays se observan en el Cuadro .Comando cell(m,n) celldisp(ca) cellplot(ca) iscell(ca) num2cell() cell2struct() struct2cell() Caractersticas crea un cell array vaco de m las y n columnas. muestra el contenido de todas las celdas de ca muestra una representacin grca de las distintas celdas indica si ca es un vector de celdas convierte un array numrico en un cell array convierte un cell array en una estructura. convierte una estructura en un cell array.

Cuadro 1.4: Algunos Comandos para objetos Cell Array Matrices dispersas. Una matriz dispersa se caracteriza porque la mayora de los elementos que la componen son ceros. Computacionalmente resulta ineciente almacenar en la memoria tantos valores de ceros cuando la matriz es de gran tamao. MATLAB dispone de rutinas que permiten tratar de manera especial estas matrices, con el proposito de tener mayor eciencia computacional en los clculos. Estas rutinas y algunos ejemplos se presentan en detalle en el captulo 2. Para terminar este captulo, debemos mencionar dos comandos que son fundamentales para la presentacin de resultados numricos y grcos en MATLAB . El primero es el comando pause, cuya sintaxis es pause(n). Este comando permite detener una secuencia de operaciones o procesos por n segundos. cuando se utiliza de la forma pause, cualquier clculo posterior a esta instruccin se detiene indenidamente, hasta que el usuario oprima alguna tecla. El segundo comando es el comando format, cuya sintaxis es format opcion. Este comando permite que el usuario de MATLAB disponga de varias opciones de formatos en los que desea ver los resultados numricos. Algunos de ellos son formato short (5 dgitos), long (15 dgitos) y bank (2 decimales)15 . El programa utiliza por defecto el formato short. Algunas veces este ltimo formato utilizaLas totalidad de opciones se pueden ver utilizando el help de format o consultando la documentacin.15

26

GEDEM - Versin Preliminar

notacin cientca para satisfacer el requerimiento de colocar 5 dgitos Por ejemplo, cuando se digita en la Ventana de Comandos el nmero 0.000015:

ans =

1.5000e-005

Para efectos prcticos, la mayora de los resultados numricos del libro sern presentados en formato bank. A partir de estos conceptos bsicos, es posible presentar la estructura del libro que se divide en tres secciones: Algebra Lineal, Clculo y Optimizacin y Dinmica. En la primera seccin se trabaja con los conceptos de Matrices y Vectores (captulo 2) y Sistemas de Ecuaciones (captulo 3). En la segunda seccin se analiza el comportamiento de una funcin a partir de herramientas grcas (captulo 4) y de clculo diferencial (captulo 5) e integral (captulo 6). En la tercera seccin se estudian las condiciones sucientes (o de segundo orden) de un problema de optimizacin (captulo 7) y los algoritmos para hallar puntos ptimos (captulo 8). Finalmente, se presenta una introduccin a la solucin numrica de sistemas dinmicos (captulo ??).

Parte I

LGEBRA LINEAL

27

Captulo 2

Matrices y VectoresLida Quintero, Mario Gonzlez, Eduardo SnchezExisten ciencias en donde el anlisis de diferentes situaciones hace necesario encontrar una manera ptima de organizar grandes volmenes de informacin. Las matemticas, a travs del lgebra lineal, ofrecen una forma de representar de manera organizada estas relaciones utilizando matrices. Es as como, en modelos econmicos como el de Leontie, las matrices expresan las relaciones entre los insumos y los productos nales de las diferentes industrias, buscando establecer el nivel de produccin que satisface una demanda determinada. El estudio del lgebra lineal es til en reas importantes para las ciencias econmicas tales como teora de la optimizacin, teora de las ecuaciones diferenciales y en diferencia, estadstica y econometra. El objetivo de este captulo es estudiar las caractersticas bsicas del lgebra lineal, utilizando MATLAB . En la primera seccin examinaremos el manejo bsico de las matrices y sus distintas operaciones; en la segunda, abordaremos los vectores junto a sus particularidades y operaciones; y en la tercera, veremos algunas herramientas que facilitan el clculo de valores y vectores propios.

2.1. MatricesUna matriz es un arreglo rectangular de elementos dispuestos en renglones (las) y columnas. a11 a12 ... a1n a21 a22 ... a2n . . . .. . . . . . . .

am1 am229

...

amn

30

GEDEM - Versin Preliminar

El orden o tamao de una matriz se dene como el nmero de las y de columnas que la componen. En este caso, tenemos una matriz de orden m n, porque dispone de m las y n columnas. Tambin podemos especicar un elemento de la matriz indicando la la y la columna en la que se encuentra. As, el elemento aij es aquel que est en la la i y la columna j . Por ejemplo, el elemento de la la 1 y columna 2 lo podemos especicar como a12 . Las matrices deben recibir un nombre en MATLAB para que sean almacenadas durante la sesin. Este nombre puede ser una o varias letras, no obstante, se recomienda que las matrices se denoten con letras maysculas, sin nmeros o caracteres especiales 1 . Las matrices deben estar contenidas entre parntesis angulares [ ] y ser denidas por las, es decir, se separan las componentes de una misma la mediante espacios o comas (,), mientras que las las se diferencian entre s con punto y coma (;) o presionando enter. Para referenciar elementos especcos de una matriz, utilizamos parntesis circulares ( ) y, para introducir elementos tipo cell array 2 , se hace uso de los corchetes o llaves {}.

Ejemplo 2.1. Generemos computacionalmente la matriz:A23 = 1 3 9 7 5 4

Para introducir la matriz A debemos introducir los elementos as:

A=[1,3,9;7,5,4]O tambin de la forma:

A=[1 3 9;7 5 4]

MATLAB nos muestra entonces la matriz A:A = 1 3 9 7 5 4Cuando a la matriz no se le ha asignado un nombre, MATLAB utiliza un nombre de variable por defecto (ans de answer) que contiene la respuesta de la ltima operacin. 2 Una matriz de celdas o cell array es un arreglo cuyos elementos son cualquier tipo de variable, por ejemplo, otras matrices, cadenas de caracteres, nmeros, etc.1

MATRICES Y VECTORES

31

Para efectos prcticos, utilizaremos a lo largo de la mayora del libro la forma de introducir matrices, en la cual separamos las las por ; y sus elementos por espacios.

2.1.1.

Hipermatrices

Una extensin del concepto de matriz es el concepto de hipermatriz, denida como una matriz de ms de dos dimensiones. Por ejemplo, una hipermatriz de 3 dimensiones3 es una hipermatriz de tamao m n xk donde k es el nmero de matrices del arreglo (es decir, la tercera dimensin: la profundidad de la hipermatriz), cada una con m las y n columnas, visible en la Figura 2.1.

m K NFigura 2.1: Hipermatriz de 3 dimensiones Para introducir hipermatrices en MATLAB se sigue un procedimiento similar a aquel para introducir una matriz. La idea bsica es introducir cada una de las matrices necesarias para conformar la hipermatriz y, simultneamente, introducir la posicin que cada una de ellas ocupar dentro de la hipermatriz. Por ejemplo, generemos una matriz de tamao (3 3 2):

C(:,:,1)=[2 5 6;4 1 0;6 6 9]; C(:,:,2)=[-4 6 0;0 1 1;8 3 5];En la primera lnea se crea una hipermatriz C de 3 dimensiones, y la informacin3

MATLAB

permite trabajar hipermatrices de cualquier dimensin.

32

GEDEM - Versin Preliminar

que se introduce corresponde a la primera de las dos matrices que conformarn la hipermatriz C. De manera similar, en la segunda lnea se introduce la informacin correspondiente a la segunda matriz que compone la hipermatriz C. Como resultado, MATLAB crea una matriz de 3 dimensiones as:

C(:,:,1) = 2 5 6 4 1 0 6 6 9

C(:,:,2) = -4 6 0 0 1 1 8 3 5Otra manera en que se pueden denir hipermatrices es por medio del comando cat, cuya sintaxis es cat(dim,A,B). Este comando concatena las matrices A y B a lo largo de la dimensin dim. Por ejemplo deniendo las matrices:

A=[2 5 6;4 1 0;6 6 9]; B=[-4 6 0;0 1 1;8 3 5];Podemos invocar el comando cat para construir la hipermatriz C que anteriormente habamos construido. Para ello, debemos tener presente que esta concatenacin se realiza en la tercera dimensin (DIM=3), ya que queremos crear una hipermatriz que contenga 2 matrices de 3 3:

C=cat(3,A,B)Obteniendo la hipermatriz C de (3 3 2) dimensiones. Los comandos relacionados en el Cuadro 2.1 se pueden utilizar con hipermatrices. Para ilustrar el uso de estos comandos, veamos un ejemplo.

Ejemplo 2.2. Supongamos que un analista desea organizar una serie de informacincompuesta por los indicadores macroeconmicos de tres pases (P1 , P2 , P3 ) durante los ltimos dos aos (A1 , A2 ). Es as como l obtiene los datos para el crecimiento del PIB, la variacin en la Tasa de cambio respecto al EURO, la inacin y la variacin en el nivel de desempleo:

MATRICES Y VECTORESComando Accin

33

size(A) ndims(A) squeeze(A) reshape(A,m,n) permute(A) ipermute(A)

Tamao de la hipermatriz A Nmero de dimensines de la hipermatriz A Elimina dimensiones iguales a uno Distribuye los elementos de la hipermatriz A en una matriz de tamao m n Permuta las dimensiones de la matriz A segn los ndices del vector v Permutacin inversa

Cuadro 2.1: Comandos para hipermatrices

clear A(:,:,1)=[5 7 6;5.5 6 5] % PIB A(:,:,2)=[6 8 10; 7 9 11] % TRM A(:,:,3)=[4 7 10; 4 6 9] % Inflacion () A(:,:,4)=[10 11 7; 8 11 10] % DesempleoEsta matriz es almacenada y en el Command Window aparece de la siguiente forma:

A(:,:,1) =

5 7 6 5.5 6 5

A(:,:,2) = 6 8 10 7 9 11

A(:,:,3) = 4 7 10 4 6 9

A(:,:,4) = 10 11 7 8 11 10El tamao de la matriz A es (2 3 4). Este tamao se puede obtener utilizando el comando size con la sintaxis size(A), con el cual obtenemos:

ans = 2 3 4

34

GEDEM - Versin Preliminar

Sabemos tambin que la matriz A es una matriz de tres dimensiones (2 3 4). Utilizando el comando ndims de la forma ndims(A) obtenemos:

ans = 3Para ilustrar el uso del comando squeeze utilicemos la matriz B denida por:

B(:,:,1)=[-3;0] B(:,:,2)=[5;3] B(:,:,3)=[0;2] B(:,:,4)=[7;2]La matriz B es de tres dimensiones, y tiene cuatro matrices dos las por una columna (214). Ntese que en este caso la segunda dimensin de la matriz no es necesaria, ya que eliminando sta dimensin no se modica el contenido de la matriz B. As, la matriz B que inicialmente es de tres dimensiones la podemos escribir como una de dos dimensiones asi:

B24 =

3 5 0 7 0 3 2 2

MATLAB dispone del comando squeeze para eliminar dimensiones que son iguales a uno, simplicando las dimensiones de una matriz. Aplicando este comando a la matriz B que creamos anteriormente, de la forma squeeze(B), obtenemos:

ans = -3 5 0 7 0 3 2 2Otro comando til en hipermatrices es el comando reshape que distribuye los elementos de la hipermatriz A que contiene m n k elementos en una matriz (de dos dimensiones) de tamao m n. Sabemos, del tamao de la matriz A, que sta tiene 24 elementos (2 3 4). Podemos utilizar el comando reshape para crear, a partir de la hipermatriz, una matriz A de tamao 6 4 4 . Esto lo podemos hacer por medio de la sintaxis reshape(A,6,4), que reordena las columnas de la hipermatriz A y crea una matriz de tamao (6 4), as:Es posible crear cualquier matriz de tamao m n que cumpla la condicin m n = 24. Por ejemplo, una matriz de (12 2).4

MATRICES Y VECTORES

35

ans =

5 6 4 10 5.5 7 4 8 7 8 7 11 6 9 6 11 6 10 10 7 5 11 9 10

En esta matriz encontramos, en las columnas, cada uno de los indicadores macroeconmicos y en cada par de las, los datos correspondientes a cada uno de los tres pases, vemos como las dos primeras las corresponden al pais P1 , las dos las siguientes al pas P2 y las ltimas dos las a P3 . Finalmente, tenemos los comandos permute e ipermute. La sintaxis del primero de estos comandos es permute(A,v). Este comando reordena las dimensiones de una matriz A en el orden dado en el vector v. Siguiendo nuestro ejemplo, sabemos que la matriz A tiene tres dimensiones y es de tamao (2 3 4). Podemos utilizar el comando permute para crear una matriz que contenga los mismos elementos de A pero que sea de tamao (4 2 3), es decir, una matriz que ordene de manera distinta las dimensiones de la matriz A. La sintaxis:

v=[3 1 2] C=permute(A,v)indica a MATLAB que coloque en la primera dimensin de la matriz C la dimensin 3 de la matriz A, en la segunda dimensin de la matriz C la primera dimensin de la matriz A, y en la tercera dimensin de la matriz C la segunda dimensin de la matriz A. Como resultado, tenemos una matriz C de tamao 4 2 3, as:

C(:,:,1) =

5 5.5 6 7 4 4 10 8

C(:,:,2) =

7 6 8 9 7 6 11 11

36

GEDEM - Versin Preliminar

C(:,:,3) =

6 5 10 11 10 9 7 10

Cada una de estas matrices nos dejan analizar los datos de forma distinta, cada una de ellas tiene, en las columnas, los aos y las las corresponden a los indicadores, cada una de estas expresiones podra entenderse como la informacin organizada por pas. Por su parte, el comando ipermute realiza la operacin inversa del comando permute, y su sintaxis es ipermute(A,v). En este ejemplo, al aplicar ipermute a la matriz C volvemos a la matriz inicial A. En esta seccin hemos observado como las hipermatrices sirven para manejar informacin, sin embargo esta no es su nica funcin, mas adelante veremos el papel que juegan en la construccin del producto cartesiano y de grcas.

2.1.2. Tipos de MatricesMATLAB ofrece comandos que generan matrices sin necesidad de especicar cada uno de sus elementos, porque se trata de matrices con alguna caracterstica especial. En general, para crear una de estas matrices se introduce el comando especco del tipo de matriz que queremos, seguido por su tamao entre parntesis circular ()5 con cada una de sus dimensiones separadas por comas6 , de la forma A=comando(m,n). Asimismo, para una hipermatriz de tamao m n k , la sintaxis es A=comando(m,n,k). Cuando se especica de la manera A=comando(n), el programa crea una matriz cuadrada de dos dimensiones (n n), mientras que con la sintaxis A=comando, se genera un escalar. En el Cuadro 2.2 presentamos los principales comandos para crear diversos tipos de matrices:

Matrices DispersasUn concepto de inters computacional son las matrices dispersas, matrices en las que la mayora de sus componentes son cero. Cuando se trabaja con matrices de gran ta5 6

Aunque tambin es posible con ([ ]) Si se utiliza "([ ])", las dimensiones tambin se pueden separar por espacios.

MATRICES Y VECTORESComando Forma una matriz

37

eye(m,n,...) zeros(m,n,...) ones(m,n,...) rand(m,n,...) randn(m,n,...) magic(n)

Identidad*. Nula o de Ceros. Unitaria o de Unos. De nmeros aleatorios entre 0 y 1, con distribucin uniforme. De nmeros aleatorios con distribucin normal, de valor medio 0 y varianza 1. Con los nmeros 1,2,3,4,...,nn, con la propiedad de que todas las las y columnas suman lo mismo**.

* Este comando no genera hipermatrices; slo matrices cuadradas ** Slo para matrices cuadradas

Cuadro 2.2: Matrices generadas automticamente

mao, resulta computacionalmente ineciente almacenar una gran cantidad de entradas de ceros, no solo por lo dispendioso que puede resultar digitarlos, sino tambin por el espacio en memoria que estos datos ocupan. Por esta razn, MATLAB dispone de los comandos relacionados en el Cuadro 2.3 para tratar este tipo de matrices.

Ejemplo 2.3. Consideremos la matriz:D=[0 5 -6 0;3 0 0 0;9 0 -7 0;0 0 0 4]Esta matriz es almacenada en MATLAB de la siguiente forma:

D = 0 3 9 0

5 -6 0 0 0 0 0 -7 0 0 0 4

Generemos la matriz dispersa correspondiente a D. El comando sparse nos permite hacer esta conversin utilizando la sintaxis sparse(D), de la cual obtenemos:

38Comando sparse(D)sparse(i,j) sparse(i,j,s,m,n)

GEDEM - Versin PreliminarCaractersticas Convierte una matriz D a su forma dispersa, eliminando todos los elementos en los que haya cero. Crea una matriz de ceros de tamao i j . Crea una matriz dispersa a partir de: i y j , que indican la posicin de los elemetos diferentes de cero en la nueva matriz; s, que es el vector de elementos y m y n, que implican que es de tamao m n. Forma una matriz dispersa de tamao i j con unos en la diagonal principal. Genera una matriz con la misma estructura de dispersin de D, pero reemplaza los elementos diferentes de cero por unos. Extrae todas las diagonales con elementos diferentes de cero de la matriz D de tamao (i,j). La nueva matriz tiene i las y tantas columnas como diagonales diferentes de cero tenga D. Extrae las diagonales especicadas por d (donde d=0 corresponde a la diagonal principal) de la matriz D. Vector columna con los elementos diferentes de cero de D. Indica las posiciones (en las y columnas) de los elementos diferentes de cero de D. Nmero de elementos diferentes de cero en la matriz D. Si el resultado de esta rutina es uno, indica que la matriz ha sido guardada de tipo dispersa y, si es cero, de cualquier otra forma.

speye(i,j) spones(D) spdiags(D)

spdiags(D,d) nonzeros(D) [i,j]=find(D) nnz(D) issparse(A)

Cuadro 2.3: Algunos Comandos para Matrices Dispersas

ans = (2,1) 3 (3,1) 9 (1,2) 5 (1,3) -6 (3,3) -7 (4,4) 4

MATLAB , en un empleo eciente de la memoria, sabe ahora que en las posiciones(2,1), (3,1), (1,2), (1,3), (3,3) y (4,4) hay elementos diferentes de cero, conoce su valor y sabe que, en el resto de posiciones, hay ceros. Veamos otra forma de generar la matriz dispersa de D:

[i,j,s]=find(D)

MATRICES Y VECTORES

39

i = 2 3 1 1 3 4

j = 1 1 2 3 3 4

s =

3 9 5 -6 -7 4

Estos tres vectores nos dicen la posicin y el valor del elemento en esa posicin. As, por ejemplo, en la la 2 (primer elemento del vector i) columna 1 (primer elemento del vector j), est el elemento 3 (primera entrada vector s) y as sucesivamente. Para generar la matriz dispersa, hacemos que corresponda al tamao de D: [m,n]=size(D) y, entonces, construimos la matriz dispersa:

S = sparse(i,j,s,m,n)La matriz dispersa S es igual a aquella que encontramos anteriormente. Evaluamos la cantidad de elementos de S diferentes de cero: a=nnz(S) y b=nonzeros(S). El resultado de a es el nmero de elementos diferentes de cero en S, en total, seis. b es un vector columna con aquellos elementos diferentes de cero: en otras palabras, es igual al vector s que ya habamos hallado. Otro comando, spones, genera la misma estructura de dispersin de spones(D), pero cambia los elementos diferentes de cero (el vector b o el vector s) por unos, es decir, spones(D):

40

GEDEM - Versin Preliminar

ans = (2,1) (3,1) (1,2) (1,3) (3,3) (4,4)

1 1 1 1 1 1

Ahora bien, spdiags permite la construccin de una matriz donde las diagonales con elementos diferentes de cero constituyan las columnas y la cantidad de las equivale a la cantidad de la matriz original. As, C=spdiags(S) es:

C = 9 0 0 0

3 0 0 0 0 0 5 0 0 -7 0 -6 0 4 0 0

Este resultado no es sorprendente: si observamos la matriz D y la comparamos con C vemos que la tercera columna de C es la diagonal principal de D y que las dems columnas de C se corresponden con las diagonales de D. Si en este ejemplo a la sintaxis del comando le agregamos un nmero entero entre -2 y 2, obtenemos cada columna de C o, en otras palabras, cada diagonal de D, teniendo en cuenta que 0 es la diagonal principal: C=spdiags(S,0). Concluimos el anlisis de dispersin de D con issparse: si introducimos la sintaxis issparse(S) y el resultado es 1 entonces S es una matriz dispersa. Por otra parte, si introducimos en MATLAB la rutina sparse(3,2) generamos una matriz de ceros de tamao 3 2. El programa no muestra la matriz, pero s nos indica que ya existe:

All zero sparse: 3-by-2Por ltimo speye genera una matriz dispersa a partir de la matriz identidad, es decir, en los lugares donde i = j hay unos, por ejemplo speye(3) genera la siguiente matriz dispersa:

MATRICES Y VECTORES

41

ans = (1,1) 1 (2,2) 1 (3,3) 1

2.1.3.

Operaciones Bsicas entre Matrices

Para realizar operaciones bsicas entre dos matrices previamente denidas A y B y un escalar n, es necesario indicar la operacin que queremos, ya sea mediante operadores o por medio de funciones o comandos. En el Cuadro 2.4 encontramos las distintas formas de hacer las operaciones bsicas.Operacin Comando o Funcin Operador

Suma Resta Multiplicacin Multiplicacin elemento a elemento* Potenciacin Potenciacin elemento a elemento* Divisin izquierda Divisin izquierda elemento a elemento* Divisin derecha Divisin derecha elemento a elemento*de la matriz

plus(A,B) minus(A,B) mtimes(A,B) times(A,B) mpower(A,n) power(A,B) mldivide(A,B) ldivide(A,B) mrdivide(A,B) rdivide(A,B)

A+B A-B A*B A.*B A^n A.^n A\B A.\B A/B A./B

*Las operaciones elemento a elemento aplican los operadores a cada componente

Cuadro 2.4: Operaciones bsicas entre matrices

Ejemplo 2.4. Dadas las matrices A y B y el escalar 2, determinemos el valor deA + B , A B , A. B , A2 , A.2 , A/B y A./B 2 3 9 A = 7 5 3 8 5 8 5 4 9 B= 6 2 3 1 5 7

Paso 1. Introducimos las matrices en MATLAB :A=[2 3 -9;7 -5 3;8 -5 8]

42

GEDEM - Versin Preliminar

B=[-5 4 -9;6 2 3;-1 -5 7]

Paso 2. Realizamos las operaciones invocando las rutinas pertinentes:C=A+B C = -3 7 -18 13 -3 6 7 -10 15 D=A*B D = 17 59 -72 -68 3 -57 -78 -18 -31

E=A.*B E = -10 12 81 42 -10 9 -8 25 56 F=A^2 F = -47 36 -81 3 31 -54 45 9 -23 G=A.^2 G = 4 9 81 49 25 9 64 25 64

H=A/B H = -2.3973 -2.2329 -3.4110 -4.7123 -3.4521 -4.1507 -3.1918 -1.6986 -2.2329

MATRICES Y VECTORES

43

I=A./B I = -0.4000 0.7500 1.0000 1.6667 -2.5000 1.0000 -8.0000 1.0000 1.1429Cul es la diferencia entre D y E, F y G y H e I? En D, le pedimos a MATLAB que multiplicara ambas matrices, mientras que en E buscbamos que multiplicara cada elemento de A por el correspondiente en B . En el caso de F, el programa multiplic A por A, mientras que en G elev cada uno de sus elementos al cuadrado. En H, el programa hizo la siguiente operacin: A B 1 , y en I dividi cada componente de A por su correspondiente en B .

2.1.4.

Anlisis de una Matriz

Existen otros comandos en MATLAB que nos permiten extraer informacin que revela caractersticas importantes de las matrices. En el Cuadro 2.5 se resumen los comandos que proveen las propiedades esenciales de una matriz A:Propiedad Operador o Sintaxis del Comando

Traspuesta Inversa Determinante Norma Rango Traza Tamao Dimensiones Nmero de elementos Elementos de la diagonal Triangular Inferior Triangular Superior

A inv(A) det(A) norm(A) rank(A) trace(A) size(A) o length(A) ndims(A) numel(A) diag(A) tril(A) triu(A)

Cuadro 2.5: Comandos para analizar una matriz

Ejemplo 2.5. A partir del Cuadro 2.5, analicemos las caractersiticas de la matrizA:

44

GEDEM - Versin Preliminar

A23

1 3 2 = 7 5 4 3 6 4

Paso 1. Introducimos la matriz A en MATLABA=[1 3 -2;7 -5 4;3 6 4]

Paso 2. Analizamos la matriz A de acuerdo al Cuadro 2.5:C=A C = 1 7 3 3 -5 6 -2 4 4

D=inv(A) D = 0.2136 0.1165 -0.0097 0.0777 -0.0485 0.0874 -0.2767 -0.0146 0.1262

e=det(A) e = -206

f=norm(A) f = 9.6869

g=rank(A) g = 3

h=trace(A)

MATRICES Y VECTORES

45

h =

0

i=size(A) i = 3 3

j=ndims(A) j = 2

k=numel(A) k = 9

m=diag(A) m = 1 -5 4

N=tril(A) N = 1 0 0 7 -5 0 3 6 4 P=triu(A) P = 1 3 -2 0 -5 4 0 0 4

46

GEDEM - Versin Preliminar

De esta forma, C es la transpuesta de A, D es la inversa, e es el determinante y f es la norma de la matriz. De acuerdo a g, A tiene 3 las y columnas linealmente independientes, la traza de la matriz es h y, segn i, A es de tamao 3 3. Por otra parte, j nos muestra el nmero de dimensiones de la matriz y k el nmero de elementos contenidos en el arreglo. N es una matriz triangular inferior a partir del fragmento triangular inferior de A, mientras que P es una matriz triangular superior partiendo de la fraccin triangular superior de A.

2.1.5. Matrices FactorizablesUna matriz cuadrada es factorizable cuando puede reescribirse como el producto de dos o ms matrices. El objeto de estudio de esta seccin son tres de las formas de factorizar matrices: la factorizacin LU, Cholesky y descomposicin en valores singulares.

Factorizacin LU: PA=LUDada una matriz cuadrada A, esta es factorizable si existe una matriz L triangular inferior, una matriz U triangular superior y una matriz de permutacin P de manera que P A = LU . En MATLAB es posible calcular las matrices L,U y P que generan la matriz A a partir del comando lu. Por ejemplo, para conocer la matriz L y U a partir de una matriz cuadrada, primero denimos la matriz:

A=[1 -2 1;-3 1 -1;2 6 4]Ahora bien, para encontrar los elementos que componen las matrices L, U y P , utilizamos la rutina lu:

[L,U,P]=lu(A) L = 1.0000 0 0 -0.6667 1.0000 0 -0.3333 -0.2500 1.0000

U = -3.0000 1.0000 -1.0000 0 6.6667 3.3333 0 0 1.5000

MATRICES Y VECTORES

47

P = 0 1 0 0 0 1 1 0 0Si operamos los resultados, tenemos entonces que LU = P A. Debemos aclarar que no todas las matrices son factorizables: slo aquellas cuyo determinante es diferente de cero.

CholeskyLa descomposicin de Cholesky factoriza una matriz A, simtrica y denida positiva, de tal forma que A = U T U , donde U es una matriz triangular inferior con elementos positivos en su diagonal. Es posible calcular la matriz U a travs de la descomposicin de Cholesky con el cdigo chol. Veamos, por ejemplo, la descomposicin de Cholesky para la siguiente matriz:

A=[2 -1 0;-1 2 -1;0 -1 2]Utilizamos entonces el comando chol:

U=chol(A) U = 1.4142 -0.70711 0 0 1.2247 -0.8165 0 0 1.1547As, MATLAB nos muestra la matriz U , que cumple con la propiedad de que U T U = A.

Descomposicin en valores singularesOtra factorizacin de matrices es la denominada descomposicin por valores singulares y es til a la hora de analizar si un proceso iterativo est convergiendo a una solucin. Al igual que las otras formas de factorizacin, la idea bsica consiste en reexpresar una matriz Amn como el producto de otras; en este caso de la siguiente manera: