Anda di halaman 1dari 282

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

ndice general
1. Conceptos Bsicos
1.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

LGEBRA LINEAL
2.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

27
29
29 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 Ecuaciones
3.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 . . . . . . . . . . . . . . . . . . . . . .

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

II CLCULO
4. Funciones
4.1. Funciones de una Variable . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Visualizacin de funciones de una variable . . . . . . . . . . . 4.1.2. Opciones adicionales para los grcos . . . . . . . . . . . . .

91
93
94 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

181
183

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

217
217 217 233 251 255

ndice de guras
1.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

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

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 3
1 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
2 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 cuadros
1.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

Introduccin
En 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 ensea
xi

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, entre
Rutherford, 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 grupogedem@yahoo.com.

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

Captulo 1

Conceptos Bsicos
Diego 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 toolboxes
Favor enviar correcciones, comentarios o sugerencias a grupogedem@yahoo.com Los toolboxes son paquetes de herramientas adicionales que el usuario tiene la posibilidad de adquirir individualmente segn sus necesidades particulares.
2 1

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 Matlab


Comenzamos 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 Window


Esta 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

Figura 1.1: Conjunto Inicial de Ventanas

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

ans = 1.6180
Si 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

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. Workspace
Esta 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 nmero
7

Dado que

MATLAB

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

CONCEPTOS BSICOS

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.

GEDEM - Versin Preliminar

1.2.5. Current Directory


Tambin 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 Editor


En 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

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,

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)/c
Un 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

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 =

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.7071
Finalmente, 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 iterativos


Existen 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) Iteracin
1 2 3 4

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

(3) x+5
1 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 end


En 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 end
Por 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 end


En 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 end


donde 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 end


Ilustremos 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 x
En 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 Bsicos


1.5.1. Path
En 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 (o
help) 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 Ayuda


no 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\strfun
Los 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 caracteres
11

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 el
12

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 estructura
Los 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 4


En 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 es
14

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 utiliza
Las 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 Vectores
Lida Quintero, Mario Gonzlez, Eduardo Snchez
Existen 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. Matrices
Una matriz es un arreglo rectangular de elementos dispuestos en renglones (las) y columnas. a11 a12 ... a1n a21 a22 ... a2n . . . .. . . . . . . .

am1 am2
29

...

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 4
Cuando 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 N
Figura 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 informacin
3

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 5
Otra 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 informacin
compuesta 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 VECTORES
Comando 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] % Desempleo
Esta 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 10
El 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 = 3
Para 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 2
Otro 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 Matrices


MATLAB 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 Dispersas
Un 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 VECTORES
Comando 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:

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

GEDEM - Versin Preliminar


Caractersticas 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-2


Por 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 de


A + 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.1429
Cul 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 matriz
A:

44

GEDEM - Versin Preliminar

A23

1 3 2 = 7 5 4 3 6 4

Paso 1. Introducimos la matriz A en MATLAB


A=[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 =

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 Factorizables


Una 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=LU


Dada 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 0
Si 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.

Cholesky
La 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.1547


As, MATLAB nos muestra la matriz U , que cumple con la propiedad de que U T U = A.

Descomposicin en valores singulares


Otra 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:

48

GEDEM - Versin Preliminar

T Amn = Umm Smn Vnn

(2.1)

Donde U y V son matrices unitarias y S es una matriz diagonal. Los elementos aij pertenecientes a la diagonal de la matriz S son denominados valores singulares de A. Dada la naturaleza de la factorizacin una matriz A siempre tendr muchas descomposiciones en valores singulares, sin embargo los valores singulares siempre son los mismos aunque aparezcan en diferente orden. Aunque existen otros mtodos para descomponer matrices, hacemos nfasis en las factorizaciones P A = LU y Cholesky debido a la utilidad que tienen para el anlisis y las soluciones de sistemas de ecuaciones.

2.2. Vectores
Los vectores son tipos especiales de matrices de tamao n 1 (vector columna) 1 n (vector la) en el espacio n . Geomtricamente, pueden ser denidos como el segmento de recta entre el origen y un punto que se caracterza por poseer direccin, magnitud y sentido.

2.2.1. Anlisis de un vector


Magnitud de un vector
La magnitud o norma de un vector v se denota por v y se reere a la longitud del vector. Su clculo est basado en el teorema de Pitgoras, por ejemplo para un vector en 2 :

v =

2 2 v1 + v2

(2.2)

donde v1 y v2 son los componentes del vector v en el espacio bidimensional. En general, para un vector en n , a = (a1 , a2 , ..., an ), la norma est dada por:

a =

a2 + a2 + ... + a2 n 1 2

(2.3)

Si la norma de un vector es igual a 1, el vector es llamado unitario. El concepto de norma es til en el clculo de distancias: por ejemplo, para encontrar la distancia d entre dos puntos en 3 , P1 = (a1 , a2 , a3 ) y P2 = (b1 , b2 , b3 ), la norma del vector P1 P2 , nos proporciona el valor de la distancia, donde P1 P2 = P2 P1 , es decir,

MATRICES Y VECTORES

49

d=

(b1 a1 )2 + (b2 a2 )2 + (b3 a3 )2

(2.4)

En general, la distancia entre dos puntos P1 = (a1 , a2 , . . . an ) y P2 = (b1 , b2 , . . . bn ) en n se dene como:


n

d=
i=1

(bi ai )2

(2.5)

MATLAB calcula la magnitud de un vector a por medio del comando norm, cuya
sintaxis es norm(a). Por ejemplo para hallar la norma del vector c = (8 1 6 5) En primer lugar, creamos el vector cy y luego, utilizamos el comando norm:

c=[8 1 6 5]; d=norm(c)


As, la magnitud o norma del vector c es d=11.2250.

Ejemplo 2.6. Hallar la distancia entre los puntos P1 = (15, 23, 4) y P2 = (9, 10, 1) Paso 1. Comenzamos por introducir los vectores P1 y P2 y calcular P = P1 P2 , donde
P1 P2 = P2 P1 :

p1=[15 23 4] p2=[-9 10 -1] p=p2-p1

Paso 2. Luego, utilizamos el comando norm para hallar la distancia entre P1 y P2 :


d=norm(p)

La distancia entre los puntos P1 y P2 es, entonces, d=27.7489. Grcamente se puede representar como la norma del vector p tal como se muestra en la Figura 2.2 La norma de una matriz A, es el mximo de sus valores singulares. Ahora bien, los valores singulares de una matriz son los elementos de la diagonal de la matriz S que resulta de descomponer la matriz original en un producto de tres matrices tal que:

50

GEDEM - Versin Preliminar

P1

Por medio de la siguiente sintaxis se obtienen las tres matrices:

El comando svd calcula la descomposicin por valores singulares de la matriz A. Es decir que es equivalente calcular la norma de la matriz o calcular el mximo de la descomposicin de A.7

Direccin de un vector
La direccin de un vector est determinada por el ngulo entre el segmento de recta que parte del origen (vector) y un eje del espacio en el que ste se encuentra. En 2 , la direccin es el ngulo entre el segmento de recta y el eje x positivo8 . De esta manera, para un vector l = [a, b] con a = 0, la direccin se calcula de la forma9 :
En otras palabras se cumple que: norm(A)=max(svd(A)) No obstante, para vectores en 3 y n con n > 3, surge el problema de especicar con respecto a qu eje est determinado el ngulo. Por esta razn, generalmente se calcula la direccin slo para vectores en 2 9 Si a = 0,la direccin del vector depende del signo de b; cuando b > 0, la direccin es de 90o y cuando b < 0 es de 270o
8 7

z
1

P2
0 10 1 30 25 0 20 15 10 5 5 10 0 5 15

P x

Figura 2.2: Distancia entre P1 y P2

A=U SVT

[U,S,V]=svd(A)

MATRICES Y VECTORES

51

tan =

b a

= tan1

b a

(2.6)

Es posible calcular la direccin utilizando la funcin atan que corresponde a la inversa de la tangente, es as como para determinar la direccin del vector l se utiliza la sintaxis atan( a ), cuyo resultado es un ngulo denido en radianes. b Veamos, por ejemplo, la direccin que corresponde al vector u = (7, 5). As, introducimos en MATLAB la sintaxis para encontrar la magnitud del ngulo:

c=atan(-5/7)
La direccin del vector u es, c=-0.6202 radianes lo que corresponde a: 324.46 grados,como se observa en la Figura 2.3.
90 10 120 8 6 150 4 2 30 60

180

210

324.46

330

240 270

300

Figura 2.3: La direccin del vector u = (7, 5)

2.2.2.

Operaciones entre Vectores

Como los vectores son tipos particulares de matrices, a ellos aplican tambin sus operaciones (ver Cuadro 2.4), siempre y cuando su tamao lo permita. A continuacin veremos aquellas operaciones propias de los vectores: el producto escalar y el producto cruz, as como algunas relaciones entre vectores que utilizan estas operaciones como son el ngulo entre dos vectores, la proyeccin de un vector, el calculo de la matriz ortogonal y las matrices creadas a partir de vectores.

52

GEDEM - Versin Preliminar

Producto Escalar
Dados dos vectores a = (a1 , a2 , ..., an ) y b = (b1 , b2 , ..., bn ) en lar10 a b es igual a:
n,

el producto esca-

a b = a1 b1 + a2 b2 + .... + an bn

(2.7)

Para calcular el producto escalar entre dos vectores en MATLAB , existe la rutina dot, cuya sintaxis es c=dot(a,b) (donde a y b son vectores del mismo tamao). El resultado del comando, si los vectores son vectores la, es equivalente a a*b, y es igual a b*a si ambos son vectores columna.

Producto Cruz
Dados dos vectores a = (a1 , a2 , a3 ) y b = (b1 , b2 , b3 ) en 3 , el producto cruz o producto vectorial entre a y b es el vector a b perpendicular a ambos vectores que esta denido por:

a b = (a2 b3 a3 b2 , a3 b1 a1 b3 , a1 b2 a2 b1 )

(2.8)

Para calcular el producto cruz, MATLAB dispone del comando cross, cuya sintaxis es c=cross(a,b) (donde a y b son vectores en tercera dimensin11 ).

Ejemplo 2.7. Determinemos el Producto Cruz de los vectores a y b en


a = (6 8 9.7) b = (4 1.2 5)

3:

Paso 1. Introducimos los vectores a y b:


a=[6;8;9.7], b=[4;1.2;5]

Paso 2. Invocamos el comando cross:


c=cross(a,b)
Slo es aplicable para dos vectores en la misma dimensin, es decir, con el mismo nmero de componentes.
11 10

MATLAB

slo calcula el producto cruz de vectores en

MATRICES Y VECTORES

53

El resultado que muestra MATLAB es el producto cruz entre los vectores a y b, que est contenido en el vector c:

c =

28.3600 8.8000 -24.8000

10

b a c

z
11

18

25 0 20 10 0 8 6 2 4

y x

Figura 2.4: Producto cruz entre a y b En la Figura 2.4 observamos los vectores a, b y vemos como el producto cruz que calculamos, c, es perpendicular tanto a a como a b.

ngulo entre dos vectores


Dados dos vectores no nulos e y l, el ngulo entre ellos esta determinado por:

cos =

l e l e

= cos1

l e l e

(2.9)

Para calcular el ngulo en MATLAB , invocamos los comandos relacionados con la norma y el producto escalar, junto con la funcin trigonomtrica inversa del coseno (acos) de la forma:

acos(dot(l,e)/((norm(l)*norm(e))))

54

GEDEM - Versin Preliminar

Recordemos que podemos clasicar los vectores de acuerdo al ngulo entre ellos: es as como, dos vectores a y b son paralelos si el ngulo entre ellos es 0 o 180 grados 12 ; y, segundo, dos vectores a y b son perpendiculares u ortogonales si el ngulo entre ellos es de 90o , es decir, cuando a b = 0. Si alguno de los vectores es nulo el ngulo entre ellos es radianes. 2

Proyeccin
Dados dos vectores a y b, la proyeccin de a sobre b est determinada por:

proyb a =

a b b b 2

(2.10)

de tal forma que proyb a es un vector paralelo a b y el vector a proyb a es ortogonal a b. Veamos en el siguiente ejemplo el clculo de una proyeccin.

Ejemplo 2.8. Dados los vectores v = (1, 1) y u = (1, 2), encontrar proyb a Paso 1. Introducimos los vectores en MATLAB :
v=[1;1], u=[1;2]

Paso 2. Invocamos los comandos de producto escalar y norma:


proy=(dot(u,v)/((norm(v))^2))*v
La salida de MATLAB muestra la proyeccin de v sobre u,

proy= 1.5000 1.5000

Esta respuesta es grcamente visible en la Figura 2.5 en la cual vemos como se cumplen las dos condiciones entre los vectores y la proyeccin.

2.2.3. Matrices y Vectores


Utilizando los conceptos y herramientas computacionales que hemos trabajado hasta el momento es posible presentar dos conceptos que se constituyen como corolarios del anlisis de matrices y vectores como son los de Matrices Ortogonales y Producto Cartesiano.
12

Es decir, si a = 0 entonces b = a para alguna constante

MATRICES Y VECTORES
Proyeccin de (u) en (v)

55

Ortogonalidad entre v y u menos la proyeccion

1.5

1 Diferencia entre u y la proyeccion 0.5


Y

0.5 0.5 0 0.5 X 1 1.5

Vector v Vector u Proyeccin 2

Figura 2.5: Proyeccin de a sobre b

Matrices Ortogonales
Una matriz A se dice ortogonal si es invertible y AT = A1 (es decir, AT A = I , donde I es la matriz identidad). Las matrices ortogonales tienen una caracterstica muy particular, sus columnas son vectores que constituyen una base ortonormal. En otras palabras, dada la matriz Qnn = [aij ] y la matriz QT = [aji ], el producto escalar bij = a1i a1j +a2i a2j +...+ani anj cumple con dos condiciones: primero, bij = 0 si y slo si i = j ; y, segundo, bij = 1 nicamente si i = j .

MATLAB contiene una rutina que, mediante el proceso de Gram-Schmidt13 , construye matrices ortogonales a partir de otras matrices del mismo tamao. En general, Q=orth(A) recibe como input una matriz cuadrada A y entrega como resultado Q, matriz cuyas columnas son vectores que forman una base ortonormal para A, el nmero de sus columnas es igual al rango de A tal que QT Q = I .

Ejemplo 2.9. Encontremos cul es la matriz ortogonal de A:


5 7 4 A = 8 6 3 9 0 1
Introducimos la matriz A y luego invocamos el cdigo orth:
13

Ver (Grossman 1996).

56

GEDEM - Versin Preliminar

A=[-5 7 4;8 6 -3;9 0 -1] M=orth(A) M es, entonces, la matriz ortogonal a A: M = -0.3884 0.6588 0.6443 0.8375 0.5441 -0.0515 -0.3844 0.5196 -0.7631

Veamos si M es una matriz ortogonal. Extraigamos sus vectores columna:

s=M(:,1) d=M(:,2) f=M(:,3)


Ahora, veamos si los productos escalares cumplen con las caractersticas de una base ortogonal:

y=dot(s,s) y= 1.0000 u=dot(s,d) u= 1.3878e-016 i=dot(d,d) i= 1.0000 p=dot(d,f) p= 2.4286e-016

MATRICES Y VECTORES

57

Recordemos que los nmeros u=1.3878e-016 y p=2.4286e-016 estn expresados en notacin cientca y son muy cercanos a cero, comprobndose que el producto escalar entre las columnas de A es cero y el producto escalar de cada una de las columnas por ellas mismas es igual a uno: M es, por tanto, una matriz ortogonal. Los dems resultados deben vericarse.

Matrices creadas a partir de Vectores


El producto cartesiano es una operacin que sirve para obtener todas las combinaciones posibles entre todos los elementos de dos o ms vectores. En MATLAB , para obtener el producto cartesiano entre vectores o matrices utilizamos el cdigo meshgrid14 . La sintaxis general del comando es:

[X,Y]=meshgrid(x,y)
donde x y y son dos vectores o matrices previamente denidos. As, meshgrid replica el vector x n veces, donde n es el nmero de componentes del vector x, construyendo una matriz cuadrada X. De manera similar (pero con el vector y traspuesto) se construye la matriz Y. Consideremos por ejemplo los vectores x = (1, 2, 3) y y = (4, 5, 6). Aplicando meshgrid de la forma [X,Y]=meshgrid(x,y) obtenemos:

X = 1 2 3 1 2 3 1 2 3

Y = 4 4 4 5 5 5 6 6 6
Ntese que meshgrid requiere que los vectores x y y tengan el mismo nmero de componentes. El comando meshgrid nicamente sirve para generar matrices a partir de tres vectores (por ejemplo: [X,Y,Z]=meshgrid(x,y,z)). MATLAB permite generar
14

Este comando sirve slo para vectores en

58

GEDEM - Versin Preliminar

Figura 2.6: a) nica Solucin b) No Existe Solucin c) Innitas soluciones el producto cartesiano a partir de ms de tres vectores con el comando ndgrid, el cual utilza la misma sintaxis que el comando meshgrid, por ejemplo:

[V,W,X,Y,Z]=ngrid(v,w,x,y,z)
La operacin que realiza meshgrid es til principalmente para hallar el producto cartesiano de dos vectores, necesario al gracar funciones en 3 dimensiones. El uso del comando es extensible al clculo del producto cartesiano de tres vectores, en cuyo caso el resultado son hipermatrices. Sin embargo, el comando tiene restricciones para ms de tres dimensiones.

2.3. Rectas y Planos


Un sistema de ecuaciones como lo veremos ms adelante, puede ser solucionado de distintas formas,en esta seccin vamos a presentar la idea que yace tras el concepto de sistema de ecuaciones. En dos dimensiones (es decir, ecuaciones de dos variables), cada ecuacin representa una recta; en tres dimensiones, cada una constituye un plano y, en general, para n dimensiones, cada ecuacin es un hiperplano en n para todo n > 3. Por lo tanto, si existe solucin al sistema, diremos que las rectas o los planos se intersecan, si no existe solucin es porque no existe un punto de corte; y, cuando una de las rectas o los planos es paralelo a otro, existen innitas soluciones. Esto es evidente en la Figura 2.6 para cada uno de los casos. En esta seccin estudiaremos con detalle los mtodos computacionales usados para el anlisis de rectas y planos. Aunque no existen comandos especcos para su estudio, MATLAB facilita el clculo de algunos pasos intermedios, simplicando su mtodo

MATRICES Y VECTORES sustancialmente.

59

2.3.1.

Rectas

Una recta es una sucesin innita de puntos en un espacio. Para establecer la ecuacin de una recta en dos dimensiones necesitamos de un punto y la pendiente de la lnea o, en ausencia de la pendiente, de dos puntos. En tres dimensiones, no obstante, para hallar la ecuacin de la recta el concepto de pendiente se hace intil y precisamos de un vector que describa una direccin denida de la recta. Consideremos la Figura 2.7. Supongamos una recta r en n dimensiones que pasa por los puntos P0 = (a, b, c, ..., n) y P = (x, y, z, ..., m). El vector que pasa por estos dos puntos P0 P = (x a, y b, z c, ..., m n) es paralelo al vector diferente de cero v = (d, e, f, ..., l), es decir, existe un escalar t (t ) tal que

P0 P = tv
Y, como observamos en la Figura 2.7,

(2.11)

P = P0 + P0 P

(2.12)

tv
P PP 0 P0

P P0

Figura 2.7: Una recta en tercera dimensin Introduciendo la ecuacin 2.11 en la ecuacin 2.12, obtenemos:

60

GEDEM - Versin Preliminar

P = P0 + tv
Que es, simplemente:

a b c . . . n

+ t

d e f . . . l

x y z . . . m

(2.13)

Estas son las ecuaciones paramtricas de la recta r, donde t (t ) nos indica qu tanto se necesita para pasar de P0 a P y el vector v , que muestra la direccin de la lnea, es conocido como vector director de una recta. Vale la pena resaltar que existen tantas ecuaciones de una recta como puntos hay sobre ella, dado que P0 puede tomar cualquier valor dentro de la misma recta. Ahora bien, al resolver el sistema matricial de la ecuacin 2.13, tenemos tres ecuaciones: a + td = x b + te = y c + tf = z Al despejar t de cada una de las ecuaciones, el resultado es:

yb zc xa t= t= d e f Como t es igual en cada uno de los casos, igualamos las tres ecuaciones: t= xa yb zc = = d e f
(2.14)

Esta representacin de la recta en la ecuacin 2.14 se llama ecuacin simtrica o cartesiana. Aunque cambia la forma de la ecuacin, siguen apareciendo los mismos componentes necesarios para la construccin de una recta: el vector posicin P0 = (a, b, c) y el vector director v = (d, e, f ), no obstante, ha desaparecido el parametro t de la ecuacin.

Ejemplo 2.10. Encontrar la ecuacin paramtrica de la recta que pasa por los
puntos P0 = (5, 6, 8, 7) y P1 = (9, 2, 0, 2).

Paso 1. Introducimos los puntos P0 y P1 como si fueran vectores:

MATRICES Y VECTORES

61

p0=[-5,6,8,7]; p1=[9,-2,0,-2];

Paso 2. Encontramos el vector director de la recta P0 P1


p0p1=p1-p0 p0p1= 14 -8 -8 -9

Como P0 P1 es el vector director de la recta, denimos la ecuacin de la recta de la forma: x = 5 + 14t y = 6 8t z = 8 8t w = 7 9t Dado que P0 es un punto que pertenece a la recta.

2.3.2.

Planos

Un plano es un rea en la que, si una recta pasa por dos de sus puntos, est incluida dentro de ella. Grossman (Grossman 1996) aporta una denicin ms detallada: sea P un punto en el espacio y n un vector diferente de cero. Entonces el conjunto de todos los puntos Q para los que P Q n = 0 constituye un plano en tercera dimensin. Un rasgo fundamental del plano es que debe estar en tres dimensiones: reas en ms de tres dimensiones son hiperplanos. La forma ms comn de hallar la ecuacin del plano es determinar un vector diferente de cero y perpendicular al plano, conocido como normal y correspondiente a n en la denicin de Grossman. En la Figura ?? observamos qu es grcamente el vector normal. En la Figura 2.8 vemos al punto P0 = (a, b, c) y a un punto cualquiera P = (x, y, z). El vector que une estos dos puntos P0 P = (x a, y b, z c) es perpendicular al vector normal n = (d, e, f ), es decir:

n P0 P = 0
reemplazando P0 P y n en la ecuacin 2.15, tenemos:

(2.15)

d(x a) + e(y b) + f (z c) = 0
De la ecuacin 2.16 se desprende la forma:

(2.16)

62

GEDEM - Versin Preliminar

n P P0

Figura 2.8: El vector n es perpendicular a todos los puntos del plano.

dx + ey + f z = g

(2.17)

Donde g = ad + be + cf . La ecuacin 2.17 se llama la ecuacin cartesiana de un plano.

Ejemplo 2.11. Determinar la ecuacin del plano que pasa por los puntos P0 =
(4, 1, 1), P1 = (2, 0, 1) y P2 = (1, 2, 4)

Paso 1. Introducimos los puntos en MATLAB como si fueran vectores:


p0=[-4,-1,-1] p1=[-2,0,1] p2=[-1,-2,-4]

Paso 2. Hallamos los vectores que pasan por los puntos P0 , P1 y P2 :


p0p1=p1-p0 p0p1= [2,1,2]

MATRICES Y VECTORES

63

p0p2=p2-p0 p0p2= [3,-1,-3]

Paso 3. Hallar el producto cruz entre P0 P1 y P0 P2 , cuya respuesta es el vector


normal al plano:

c=cross(p0p1,p0p2) c= -1 12 -5

Paso 4. Usando el punto P = (x, y, z) obtenemos el vector P2 P que est incluido


en el plano:

P2 P = (x + 1, y + 2, z + 4)

Paso 5. Introducimos el vector normal y el vector contenido en el plano en la ecuacin cartesiana

(x + 1, y + 2, z + 4) (1, 12, 5) = 0
La ecuacin cartesiana de este plano es x12y +5z = 3. Cabe resaltar que, si existen dos planos paralelos, entonces sus vectores normales son paralelos. En otras palabras, el producto cruz entre los dos vectores tiene como resultado cero.

2.3.3.

Distancia entre un punto y un plano

Para encontrar la distancia D entre un punto P = (a, b, c) y el plano dx+ey+f z+g = 0 tenemos la siguiente frmula:

D=

|ad + be + cf + g| d 2 + e2 + f 2

(2.18)

Veamos en el siguiente ejemplo cmo hallar computacionalmente la distancia entre un punto y un plano.

64

GEDEM - Versin Preliminar

Ejemplo 2.12. Hallemos la distancia entre el punto (-8,1,3) y el plano


3x 7y + 4z + 1 = 0

Paso 1. Hallamos primero cul es el valor de ad + be + cf + g y su valor absoluto:


j=(-8*3)+(1*-7)+(3*4)+1 k=abs(j)

Paso 2. Ahora, determinamos el valor del denominador de la ecuacin 2.18:


m=sqrt(3^2+(-7)^2+4^2)

Paso 3. Finalmente, dividimos el numerador entre el denominador:


d=k/m

As, llegamos a que el valor de la distancia entre el punto y el plano corresponde a d: 2.0925.

2.4. Valores y Vectores Propios


Cuando solucionamos un sistema de ecuaciones de la forma Ax = b con nica solucin la transformacin lineal de un vector x asigna una imagen a cada uno de sus componentes. Sin embargo, algunas veces slo conocemos la matriz y, para entender el comportamiento de las variables que sta representa, es necesario encontrar el vector que la gener o uno paralelo a l. Para hallarlo, establecemos una operacin que, a partir de una matriz A de n n, nos permite determinar el vector m mediante un escalar , tal que es real o complejo que cumpla con la siguiente caracterstica:

Am = m

(2.19)

Para garantizar que m = 0, la solucin de15 A I nunca debe ser trivial (es decir, m = 0). Por tanto, la matriz generada al operar (A I) debe ser singular o, en otras palabras, su determinante debe ser igual a cero. Esta condicin es conocida como la ecuacin caracterstica, y el polinomio que se genera a partir de ella es el polinomio caracterstico, denotado p().
15

La ecuacin (A I), donde I es la matriz identidad, resulta de despejar m de la ecuacin.

MATRICES Y VECTORES

65

p() = det(A I) = 0

(2.20)

Las races de p() son los valores propios asociados a A. Es a partir de ellos que encontramos el vector m, conocido tambin como el vector propio relativo a .

MATLAB calcula valores propios y un vector propio asociado a cada valor por
medio del comando eig, cuya sintaxis es [V,L]=eig(A). Este comando recibe la matriz cuadrada con las transformaciones lineales y calculalas matrices L (una matriz diagonal con los valores propios) y V (una matriz cuyas columnas son los vectores propios correspondientes), tal que A*V=V*L. Observemos cmo trabaja la rutina con el siguiente ejemplo:

Ejemplo 2.13. Calculemos los vectores propios de la matriz


1 1 4 A = 3 2 1 2 1 1

Paso 1. Introducimos el input del comando: la matriz A:


A=[1 -1 4;3 2 -1;2 1 -1];

Paso 2. Teniendo ya el input, invocamos eig para hallar los valores y vectores
propios:

[V,L]=eig(A)
As, el resultado de MATLAB es claro: L es la matriz de valores propios y las columnas de V son sus correspondientes vectores propios, tal que V y L cumplen, en efecto, la propiedad que A*V=V*L.

V = 0.4082 0.5774 0.2357 0.8165 -0.5774 -0.9428 0.4082 -0.5774 -0.2357

L = 3 0 0 0 -2 0 0 0 1
Cabe resaltar que si se especica slo una nica salida (B=eig(A)), esta corresponde a un vector que contiene nicamente los valores propios de la matriz (matriz L).

66

GEDEM - Versin Preliminar

Ejercicios
1. Una empresa se especializa en la produccin de cinco artculos. La informacin que describe las unidades vendidas en diferentes meses del ao, la utilidad por unidad vendida y el valor del impuesto por cada uno de los productos son los siguientes:

P roducto 1 P roducto 2 P roducto 3 P roducto 4 P roducto 5 U tilidad 22 28 15 20 12 Impuestos 2 8 1 0.5 2 Enero 4 5 8 3 9 F ebrero 9 8 2 2 6 M arzo 1 2 2 1 9 Abril 8 4 1 8 2 M ayo 8 8 9 5 2 Junio 10 21 9 11 6
Usando multiplicacin de matrices, encuentre una matriz 6 2 que contenga en su primera columna la utilidad total y en la segunda columna los impuestos totales durante cada uno de los meses. 2. Analice las propiedades de la matriz B (Ver cuadro 2.5) y con cada par de matrices aplique las operaciones de suma, resta, multiplicacin, divisin izquierda, derecha y potenciacin. 2 6 5 4 5 6 9 0 3 a) A = 1 2 3 B= 8 4 2 0 1 2 6 12 7 1 2 3 10 3 9 5 b) A = B= 4 5 6 2 6 4 3 2 6 7 16 16 5 15 20 3 3 3 4 c) A = 18 1 27 27 20 11 B= 0 1 1 5 18 20 1 1 27 4 3 4 3. A partir de la hipermatriz A del ejemplo 2.2, genere en MATLAB todas las posibles matrices de tamao 2 2.

MATRICES Y VECTORES

67

4. Halle la norma y dena las caractersticas de cada par de vectores; halle el ngulo entre ellos y calcule proyv u y proyu v a) u = (3, 2) v = ( 3 , 2 ) 5 5 b) u = (3, 5, 6) v = (4, 3, 2) c) u = ( 2, 3, 5) v = ( 3 2, 55 , 0) 5. Con la matriz L =

2 8 5 4

y el vector m = (2, 2)

a) Halle la inversa de L b) Multiplique el vector m por la inversa de L c) Ahora aplique divisin derecha y divisin izquierda entre L y m. Trasponga si es necesario. d) Qu se puede deducir de los puntos anteriores? 6. Sean u = (3, 1, 2) y v = (4, 2, x). Para qu valor de x Z + se cumple que u y v sean ortogonales?. 7. Encuentre la distancia entre el punto (2, 3, 1) y el plano x + y + z = 5. 8. Encuentre la ecuacin paramtrica de la recta que pasa por los puntos P (1, 2, 3) y Q = (0, 2, 8). 9. Halle los valores y vectores propios de la matriz 3 2 2 C = 3 1 3 1 2 0 A partir del resultado determine si sta matriz es Denida Positiva, Negativa o Indenida. (Ver Mora (2001, pg. 38)). 10. Genere una matriz aleatoria de distribucin uniforme y una matriz cuyas las y columnas sumen todas lo mismo, y con cada una: a) Halle su polinomio caracterstico a travs de operaciones con matrices y vectores en MATLAB . b) Halle tambin los valores y vectores propios a travs de operaciones y contrstelos luego con los resultados que da eig.

68

GEDEM - Versin Preliminar

Captulo 3

Sistemas de Ecuaciones
Norma Gmez, Eduardo Snchez
Las relaciones entre diferentes variables que interactan en un problema pueden representarse en forma de ecuaciones y, en muchos casos para estas ecuaciones, es necesario encontrar valores de x1 , x2 , ..., xn tales que resuelvan:

a11 x1 + a12 x2 + ... + a1n xn = b1 a21 x1 + a22 x2 + ... + a2n xn = b2 . . . . . . . . . . = . . am1 x1 + am2 x2 + ... + amn xn = bm
Este conjunto de ecuaciones, llamado sistema de ecuaciones lineales, se puede expresar de forma matricial as: (3.1)

a11 a21 . . .

a12 a22 . . .

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

a1n a2n . . . amn

x1 x2 . . . xn

b1 b2 . . . bm


(3.2)

am1 am2
o, de manera equivalente:

Ax = b

(3.3)

donde A es la matriz de coecientes (las constantes que acompaan a las incgnitas del sistema), x es el vector de variables, y b el vector de resultados. La solucin al sistema, conocida como vector solucin, es un vector columna que contiene los valores de las incgnitas que satisfacen todas las ecuaciones1 .
1

En el Captulo 2 seccin 2.3, vimos grcamente que, cada una de las ecuaciones del sistema

69

70

GEDEM - Versin Preliminar

Al resolver un sistema de ecuaciones lineales existen dos casos: primero, los sistemas de ecuaciones denidos, en donde existe slo un punto de corte, es decir, una nica solucin; y segundo, los sistemas singulares, que pueden tener innitos puntos de interseccin, es decir innitas soluciones, o pueden no tener ningn punto de interseccin, caso en el que no existe solucin. Por otra parte, los sistemas normales denidos cuyo punto de interseccin es el origen, se conocen como sistemas homogneos. El objetivo de este captulo es presentar las herramientas computacionales que provee MATLAB , para solucionar problemas econmicos expresados en forma de sistemas de ecuaciones lineales, basados en los principios del algebra lineal. Estudiaremos dos criterios de solucin: de un lado, los mtodos directos o analticos, fundamentados en las operaciones bsicas con matrices, que brindan resultados exactos con calculos nitos y que pueden ser utilizados slo si la matriz de coecientes es invertible. Por otro lado, estn los mtodos indirectos (tambin llamados iterativos o numricos), que generan una secuencia de aproximaciones a la respuesta del sistema 3.1, despus de repetir cierto tipo de operaciones previamente establecidas.

3.1. Mtodos Directos o Analticos


3.1.1. Eliminacin Gauss-Jordan
Este mtodo, soluciona el sistema 3.1 utilizando la matriz ampliada, denida como M = [A b]:

M =

a11 a21 . . .

a12 a22 . . .

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

a1n a2n . . .

b1 b2 . . .


(3.4)

am1 am2

amn bm

Al llevar la matriz ampliada M a una forma escalonada reducida 2 , es posible encontrar la solucin al sistema 3.2 por medio de un procedimiento de operaciones aritmticas ordenadas entre las. MATLAB aplica este mtodo con el comando rref, cuya sintaxis es rref(M), donde M es la matriz ampliada. Adems, existe el
3.1 representa una recta si x 2 , un plano si x 3 o un hiperplano si x n , y su solucin, si existe, es la interseccin entre ellos (segn el caso). 2 Llevar una matriz a la forma escalonada reducida signica, transformar una matriz no cuadrada en una aproximacin de la matriz identidad

SISTEMAS DE ECUACIONES

71

comando rrefmovie que muestra paso a paso la reduccin de la matriz ampliada a su forma reducida. La sintaxis de este comando es rrefmovie(M).

Ejemplo 3.1. Solucionemos el siguiente sistema de ecuaciones:


x + 2y = 8 2x + y = 1

Paso 1. Introducimos la matriz de coecientes A1 y el vector de resultados b1 del


sistema y, luego, construimos la matriz ampliada M1.

A1=[1 2;2 1] b1=[8;1] M1=[A1 b1]

Paso 2. Utilizamos rref:


S1=rref(M1)
De acuerdo a la respuesta de MATLAB , la nica solucin al sistema es S1, es decir, x = 2 y y = 5.

S1 = 1 0 0 1 -2 5

Ejemplo 3.2. Solucionemos el siguiente sistema de ecuaciones singulares:


2x + y z = 2 3x + 2y + 4z = 8 5x + 4y + 14z = 20

Paso 1. Introducimos la matriz de coecientes A2 y el vector de resultados b2 del


sistema y, luego, construimos la matriz ampliada M2.

A2=[2 1 -1;3 2 4;5 4 14] b2=[2;8;20] M2=[A2 b2]

72

GEDEM - Versin Preliminar

Paso 2. Utilizamos rref:


S2=rref(M2)
Con el resultado de MATLAB , podemos armar que el sistema tiene innitas soluciones denidas por x 6z = 4 y y + 11z = 10:

S2 = 1 0 0 0 1 0 -6 11 0 -4 10 0

Ejemplo 3.3. Resolvamos el siguiente sistema de ecuaciones singulares:


x + y + 2z = 9 3x 2y + 7z = 20 2x + 7y + 3z = 27

Paso 1. Introducimos la matriz de coecientes A3 y el vector de resultados b3 del


sistema y, luego, construimos la matriz ampliada M3.

A3=[1 1 2;3 -2 7;2 7 3] b3=[9;20;27] M3=[A3 b3]

Paso 2. Utilizamos rref:


S3=rref(M3)
El resultado de MATLAB no es coherente dado que la ltima la indica que la suma de todas las variables multiplicadas por cero es 1; por esta razsn, podemos concluir que este sistema no tiene solucin:

S3 = 1 0 0 0 1 0 2.2 -0.2 0 0 0 1

SISTEMAS DE ECUACIONES

73

Ejemplo 3.4. Solucionemos el siguiente sistema homogneo:


x + 3y z = 0 y 8z = 0 4z = 0

Paso 1. Introducimos la matriz de coecientes A4 y el vector de resultados b4 del


sistema, y luego construimos la matriz ampliada M4:

A4=[1 3 -1;0 1 -8;0 0 4] b4=[0;0;0] M4=[A4 b4]

Paso 2. Utilizamos rref:


S4=rref(M4)

La solucin al sistema es x = y = z = 0, recordemos que en los sistemas homogneos solo hay dos posibles alternativas: la solucin trivial, en la cual todas las variables son cero, o existen innitas soluciones:

S4 = 1 0 0 0 1 0 0 0 1 0 0 0

3.1.2.

Mtodo de la Inversa

Este mtodo utiliza la inversa de la matriz de coecientes A y el vector de resultados b de un sistema Ax = b, equivalente al sistema 3.2, con el objetivo de encontrar el vector solucin x que satisface el sistema, resolviendo la operacin:

x = A1 b

(3.5)

No obstante, si la matriz es muy grande o dispersa, encontrar su inversa de forma analtica puede llegar a ser un proceso muy complejo. MATLAB permite calcular la inversa mediante el comando inv, cuya sintaxis es C=inv(A).

74

GEDEM - Versin Preliminar

Conociendo entonces la inversa de la matriz, la solucin del sistema Ax = b est dada por:

x = Cb

(3.6)

Ejemplo 3.5. Solucionemos el siguiente sistema de ecuaciones por el mtodo de la


inversa:

x + y + 2z = 6 3x + 2y + z = 3 4x + 2y + z = 2

Paso 1. Introducimos la matriz de coecientes y el vector de resultados correspondiente al sistema:

A1=[1 1 2;3 2 1;4 2 1 ] b=[6;3;2]

Paso 2. Hallamos la inversa de la matriz de coecientes:


C=inv(A1)

Paso 3. Establecemos la sintaxis para solucionar el sistema a partir de la inversa:


x=C*b
La solucin al sistema de ecuaciones es:

x = -1 1.6667 2.6667

3.1.3. Regla de Cramer


La regla de Cramer usa el determinante de la matriz de coecientes para llegar a la solucin del sistema 3.1. MATLAB calcula el determinante a travs del comando det. La sintaxis del comando es a=det(A). El desarrollo de la regla de Cramer parte de la matriz de coecientes y el vector de resultados: el procedimiento consiste en reemplazar el vector de resultados en las

SISTEMAS DE ECUACIONES

75

columnas de la matriz de coecientes formando matrices transformadas y calculando los determinantes de cada una de ellas. La solucin al problema se obtiene al dividir los determinantes de las matrices transformadas sobre el determinnte de la matriz de coecientes as:

x=

b1 a12 b2 a22 . . bm am2 a11 a12 a21 a22 . . am1 am2

... a1n ... a2n ... . ... amn ... a1n ... a2n ... . ... amn

,y=

a11 b1 a21 b2 . . am1 bm a11 a12 a21 a22 . . am1 am2

... a1n ... a2n ... . ... amn ... a1n ... a2n ... . ... amn

,..., n =

a11 a12 a21 a22 . . am1 am2 a11 a12 a21 a22 . . am1 am2

... b1 ... b2 ... . ... bm ... a1n ... a2n ... . ... amn

Ejemplo 3.6. Solucionemos el Ejemplo 3.5, ahora por la Regla de Cramer. Paso 1. Introducimos la matriz de coecientes, calculamos su determinante y luego,
introducimos el vector de resultados:

A=[1 1 2;3 2 1;4 2 1]; a=det(A) b=[6;3;2];

Paso 2. Construimos las matrices trasformadas y calculamos su determinante:


A1=[b,A(:,2:3)]; dA1=det(A1) A2=[A(:,1),b,A(:,3)]; dA2=det(A2) A3=[A(:,1:2),b]; dA3=det(A3)

Paso 3. Calculamos el valor de x, y y z :


x=dA1/a y=dA2/a z=dA3/a
El programa muestra as los valores de cada variable que soluciona el sistema: la nica solucin de este sistema de ecuaciones.

76

GEDEM - Versin Preliminar

x= -1 y= 1.6667 z= 2.6667

3.1.4. Factorizacin de Crout o LU


Existen mtodos directos que descomponen la matriz de coecientes en otras matrices buscando que, para llegar a la solucin del sistema 3.2, slo se hagan operaciones bsicas entre ellas. Existen dos procesos para llegar a estas matrices: el primero de ellos es un mtodo que permite descomponer una matriz de coecientes A de tamao nm, en dos matrices invertibles: L (triangular inferior) y U (triangular superior) de la forma A = LU , conocido como factorizacin LU, donde L y U tienen las mismas dimensiones de A. De esta forma, para resolver el sistema 3.2 Ax = b, lo replanteamos como:

LU x = b
Asimismo, denimos un vector y = U x de forma que:

(3.7)

Ly = b

(3.8)

Solucionar el sistema 3.8, dado que la matriz L es triangular inferior, equivale a realizar un proceso de sustitucin hacia atrs, si reemplazamos la ecuacin 3.8 en la ecuacin 3.7 obtenemos el sistema:

Ux = y

(3.9)

cuya solucin, por sustitucin hacia atrs o mediante el mtodo de la inversa, es:

x = U 1 y

(3.10)

MATLAB proporciona un comando que encuentra las matrices pertinentes a la


factorizacin LU. La sintaxis de esta rutina es [L,U]=lu(A), cuyo input es la

SISTEMAS DE ECUACIONES

77

matriz de coecientes (A) y los resultados son una matriz triangular inferior y una matriz triangular superior. Las matrices L y U sern tiles para hallar los valores de los vectores x e y de las ecuaciones 3.7 a 3.10. Veamos en el siguiente ejemplo cmo trabajar con la factorizacin LU.

Ejemplo 3.7. Solucionemos el sistema del Ejemplo 3.5 por factorizacin LU: Paso 1. Introducimos la matriz A y el vector b:
A=[1 1 2;3 2 1;4 2 1] b=[6;3;2]

Paso 2. Introducimos la sintaxis del comando para la matriz A:


[L,U]=lu(A)

Paso 3. Hallamos el valor de y :


y=inv(L)*b

Paso 4. Hallamos el valor de x:


x=inv(U)*y
La respuesta de MATLAB es L,U,y,x, siendo el vector x la nica solucin al sistema de ecuaciones:

L= 0.2500 0.7500 1.0000 1.0000 1.0000 0 1.0000 0 0

U= 4.0000 0 0 y= 2.0000 1.5000 2.0000 0.5000 0 1.0000 0.2500 1.5000

78

GEDEM - Versin Preliminar

4.0000 x= -1.0000 1.6667 2.6667

3.1.5. Factorizacin de Cholesky


El segundo proceso para descomponer la matriz de coecientes corresponde a la factorizacin de Cholesky, que soluciona un sistema de ecuaciones lineales al encontrar una matriz triangular superior U tal que U U T = A 3 . Esta matriz es conocida como el factor de Cholesky o como la raz cuadrada de A. As, la factorizacin de Cholesky permite reexpresar el sistema Ax = b de la forma:

U T U x = U T (U x) = b
Al resolver este sistema por sustitucin hacia atrs, obtenemos:

(3.11)

UT y = b
luego, por sustitucin hacia atrs:

(3.12)

Ux = b

(3.13)

Para solucionar un sistema de ecuaciones mediante la factorizacin de Cholesky, usamos el comando chol, cuya sintaxis es U=chol(A), similar a la factorizacin LU porque, a partir de la matriz de coecientes, obtenemos la matriz U y resolvemos las ecuaciomes 3.12 y 3.13.

Ejemplo 3.8. Solucionemos el siguiente sistema por Factorizacin de Cholesky


9x + 2y + 4z = 0 6x + 3y + 3z = 0 5x + 4z = 0
Esta matriz debe ser simtrica y denida positiva para que el sistema tenga solucin. En caso que la matriz no tenga esta caracterstica recomendamos solucionar el sistema a travs de la factorizacin LU.
3

SISTEMAS DE ECUACIONES

79

Paso 1. Introducimos la matriz A y el vector b que componen el sistema.


A=[9 2 4;6 3 3;5 0 4]; b=[0;0;0];

Paso 2. Calculamos el factor de Cholesky utilizando el comando chol:


U=chol(A)

Paso 3. Calculamos el vector y despejando de la ecuacisn 3.12:


y=inv(U)*b

Paso 4. Reemplazamos el vector y en la ecuacin 3.13 y despejamos el vector x:


x=inv(U)*y
El programa nos mostrar la matriz U, el vector y y x, el vector solucin del sistema:

U= 3.0000 0 0 y= 0 0 0 x= 0 0 0 0.6667 1.5986 0 1.3333 1.3206 0.6916

3.2. Mtodos Indirectos o Numricos


Los mtodos indirectos o numricos estan diseados como una secuencia de operaciones que busca encontrar resultados aproximados a la solucin de un sistema de ecuaciones lineales. Estos mtodos son especialmente buenos cuando los sistemas tienen un gran nmero de incgnitas y son difciles de resolver, es decir, si la matriz de coecientes y el vector de resultados presentan caractersticas particulares.

80

GEDEM - Versin Preliminar

En general, en todos los procesos iterativos que se utilizan para resolver sistemas de ecuaciones lineales de la forma Ax = b se utiliza una matriz Q, llamada matriz de descomposicin, escogida de tal forma que el problema original se pueda reescribir como4 :

Qx = (Q A)x + b

(3.14)

La ecuacin 3.14 sugiere un proceso iterativo o regla de iteracin que se expresa como:

Qxk (Q A)x(k1) ; k > 1


En esta regla de iteracin, queremos encontrar una sucesin de vectores xk que solucionen el sistema 3.14, a travs de un proceso iterativo. En este proceso, es necesario establecer un vector inicial de valores para x0 , que puede ser arbitrario pero, por lo general, se toma como aproximacin inicial la nula o, en otras palabras, aquella en la que x01 = x02 = ... = x0n = 0. Nuestro objetivo es escoger una matriz Q de manera que se calcule fcilmente la sucesin xk y que, adems, converja rpidamente a la solucin. En todo mtodo iterativo es importante especicar un criterio de convergencia , que permita llegar a la solucin ms rapidamente, y un nmero mximo de iteraciones M . En este caso, dado que x es un vector, estableceremos dos criterios de convergencia que se debern satisfacer simultneamente: 1. 2.
x(k) x(k1) xk xm xm (k) xm
(k) (k1)

, donde xm = M ax{xi } y es un nmero determinado por el investigador que, comnmente, es mayor o igual a 10. La precisin es mayor en cuanto tenga valores ms altos.

Nuestro objetivo es presentar dos mtodos iterativos para solucionar sistemas de ecuaciones lineales: Gauss-Jacobi y Gauss-Seidel.

3.2.1. Matrices Dbilmente Condicionadas


En los procesos que veremos adelante existe un riesgo, relacionado con la existencia de sistemas de ecuaciones que presentan matrices de coecientes en las cuales una
4

Este resultado se obtiene al sumar el trmino Qx a ambos lados de la expresin Ax = b.

SISTEMAS DE ECUACIONES

81

pequea variacin de alguno de sus componentes, genera grandes cambios en el vector solucin, aunque tanto los ejercicios propuestos, como los ejercicios planteados parten de matrices que no tienen esta caracterstica, es de esperar que haya casos en los cuales la existencia de matrices dbilmente condicionadas hagan que la utilizacin de mtodos numricos sea ineciente, en tales casos recomendamos utilizar el mximo nivel de precisin del computador, o plantear transformaciones sobre la matriz original.

3.2.2.

Gauss-Jacobi

El mtodo de Gauss-Jacobi5 , muy til cuando A es dispersa, resuelve el sistema de ecuaciones de la forma Ax = b, slo si la matriz de coecientes A es diagonal dominante6 . Para hacerlo, utiliza una matriz de descomposicin Q que debe ser diagonal7 y cuyos elementos corresponden a los de la diagonal principal de A. La regla de iteracin para este mtodo es:

Qxk (Q A)x(k1) + b
Esta ecuacin es una transformacin de la regla de iteracin general denida por la ecuacin 3.14. MATLAB dene un valor inicial arbitrario para el vector x, que se encuentra a una distancia x del vector de variables que solucionan el sistema. Como la regla de iteracin esta determinada por la matriz de descomposicin, la distancia es entonces el cociente entre la ecuacin lineal igualada a cero y la matriz de descomposicin. Despus, denimos el valor de x como la suma entre el valor inicial y la distancia encontrada, es decir, el programa va acercando el valor inicial de x a la solucin del problema, utilizando una serie de operaciones repetidas que se valen de la matriz de descomposicin como parmetro de convergencia. El nmero de operaciones est limitado por la rapidez a la que la norma del vector x se acerque
Para observar la deduccin matemtica del mtodo y su regla de iteracin, recomendamos ver el apndice de este captulo. 6 Una matriz diagonal dominante es aquella en la cual todos los elementos de la diagonal son mayores al resto de los elementos de la matriz, es decir cumple:
n

|Aii | >
i=1 i=j

|Aij |i

Las matrices diagonales son aquellas que slo tienen elementos diferentes de cero en su diagonal principal.

82 a un nmero positivo, muy cercano a cero8 .

GEDEM - Versin Preliminar

El nmero de repeticiones puede ser establecido por el usuario y existen casos en donde el nmero de iteraciones propuestas no son sucientes. Por ende, recomendamos utilizar un nmero de iteraciones alto, se recomiendan ms de 1510.

Ejemplo 3.9. Solucionemos el siguiente sistema de ecuaciones normales, haciendo


la programacin del mtodo de Gauss-Jacobi:

2x + z = 5 x + 2y = 1.345 0.5y + 8z = 8.76

Paso 1. Denimos la matriz de coecientes A, el vector respuesta b, y un vector


solucin inicial para que el programa empiece a iterar a partir de l. En este caso, utilizamos el vector nulo:

A=[2 0 1;1 2 0;0 0.5 8]; b=[5;1.345;8.76]; x=[0;0;0];

Paso 2. Creamos la matriz Q, a partir de la diagonal de la matriz de coecientes:


Q=diag(A)

Paso 3. Establecemos la programacin de las operaciones que realizar el programa


para llegar a una solucin. A partir del comando for, determinamos el nmero de veces que debe repetirse el procedimiento, presentamos las operaciones a repetir y la condicin para que MATLAB se detenga al llegar a una solucin:

for it=1:1600 dx=(b-A*x)./Q x=x+dx if norm(dx)<tol,break,end end


Aqu it=1:n determina el nmero de veces que se repite esta operacin, que va de 1 hasta n. En este ejemplo tomamos n = 1600, para saber cul es el nmero de veces que iter el programa, digitamos it y luego enter.
Que la norma del vector sea cero implica que todos los valores de x son positivos y se aproximan a cero, esto sugiere que se ha llegado a una solucin en la cual b Ax = 0.
8

SISTEMAS DE ECUACIONES

83

tol es un nmero muy pequeo, cercano a cero, que sirve para establecer el nivel de tolerancia de la solucin o, en otras palabras, el valor mximo que puede tomar la norma de x. A tol se le puede asignar el valor que deseemos, no obstante, el ms pequeo que el software reconoce es sqrt(eps), que equivale a la raz cuadrada del valor de punto otante del programa (es decir, el nmero ms grande que sumado a uno da uno).
En esta salida aparecen todas las operaciones que hace el programa antes de llegar a una solucin. Si MATLAB no entrega la respuesta, bien puede necesitar un mayor nmero de iteraciones o bien, quiz, menos iteraciones de las ya establecidas. Para este ejemplo, la solucin del sistema es entonces:

1.9432 -0.2991 1.1137

3.2.3.

Gauss-Seidel

La iteracin de Gauss-Seidel9 establece la matriz de descomposicin Q como la parte triangular inferior de A incluyendo los elementos de la diagonal. La regla de iteracin para este mtodo es:

Qxk (Q A)x(k1) + b
Aunque la regla de iteracin es idntica a la del mtodo Gauss-Jacobi, la matriz de descomposicin no es la misma. Veamos en el siguiente ejemplo la diferencia entre este y el mtodo anterior:

Ejemplo 3.10. Solucionemos un sistema de ecuaciones cuya matriz de coecientes


es diagonal dominante y dispersa:

x+z =7 5x + 2y = 4 8z = 2
Para observar la deduccin matemtica del mtodo y su regla de iteracin vea el apndice matemtico de este captulo.
9

84

GEDEM - Versin Preliminar

Paso 1. Denimos la matriz de coecientes A y el vector de resultados b:


A=[1 0 0;5 2 0;0 0 8]; b=[7;4;2]; x=[0;0;0];

Paso 2. Creamos la matriz Q a partir de A, recordemos que Q debe ser triangular


inferior:

Q=tril(A);

Paso 3. Especicamos el lmite de tolerancia, el nmero de iteraciones y programamos las funciones del mtodo, la regla de iteracin y la condicin para que el programa se detenga y entregue una solucin:

tol=sqrt(eps); n=1600; for it=1:1600; dx=Q\(b-A*x); x=x+dx if norm(dx)<tol, break, end end
El resultado de la operacin, es decir la solucin, es el vector x:

7.0000 -15.5000 0.2500

Ejercicios
1. Resuelva los Ejemplos 3.2 a 3.7 utilizando: a) Factorizacin LU b) Es posible solucionar estos problemas utilizando Cholesky? 2. Solucione Ax = b donde:

SISTEMAS DE ECUACIONES

85

A=

27 7 5.5 1 7 25 2 17.5 5.5 2 27.5 11 1 17.5 11 47.5

b=

1 1 1 1

a) Utilizando descomposicin LU b) Gauss-Seidel c) Gauss-Jacobi Cul procedimiento realiza ms iteraciones? 3. La demanda por cierto producto est representada por medio de una funcin lineal de la forma:

Qd = 200 5p

(3.15)

De la misma forma es posible representar la oferta de este producto por medio de una funcin de la forma:

Qo = 100 + 5p

(3.16)

Utilice un mtodo directo y un mtodo numrico para hallar el precio y la cantidad de equilibrio de mercado de este producto. 4. Considere el caso de una economa cuya oferta esta compuesta por cuatro rmas que ofrecen cantidades diferentes de cada mercanca y son precio-aceptantes. La rma 1 ofrece 83 unidades de la mercanca 3 y 19 unidades de la mercanca 4. La rma 2 ofrece 58 unidades de la mercanca 2, 30 unidades de la mercanca 3 y 42 unidades de la mercanca 4. La rma 3 ofrece 43 unidades de la mercanca 1 y 12 unidades de la mercanca 4. Por ltimo, la rma 4 ofrece 48 unidades de la mercanca 3 y 67 unidades de la mercanca 4. Cada rma debe alcanzar una meta de ingresos especca: 943, 786, 554, y 624 unidades monetarias, respectivamente. Cules son los precios ptimos para que todas las rmas alcancen su meta de ingresos? 5. La economa de una ciudad posee dos sectores; el sector Z produce zanahoria y el sector A, acero. Para producir una unidad de zanahoria se necesita 30 % de una unidad de zanahoria y 40 % de una unidad de acero. Para producir

86

GEDEM - Versin Preliminar una unidad de acero, se necesita 50 % de una unidad de zanahoria y 30 % de una unidad de acero. Las demandas nales son 50 unidades de zanahoria y 80 de acero. Represente esta situacin como un ejemplo del Modelo de Leontief y resuelva la ecuacin de este modelo. Cules son las cantidades de acero y zanahoria que hay que producir para satisfacer las demandas nales? 6. Considere el sistema de ecuaciones del ejemplo 3.3 y replantee el problema de la forma AT Ax = AT b. A qu resultado llega?.Explique. 7. Una empresa desea ubicar uno de sus puntos de venta en una manzana ubicada en una zona exclusiva de la ciudad, sin embargo, para ellos, sera mucho mejor si escogen el local en la calle con mayor ujo vehicular. El modelo de vas con sus direcciones est indicado en la siguiente gura, en la cual se seala el nmero de vehculos que circulan en una hora y pasan por las intersecciones A, B, C, y D.

Figura 3.1: Modelo de vas Determine el ujo vehicular por hora sobre cada calle, es decir sobre x1 , x2 , x3 y x4 , expresado como un sistema de ecuaciones lineales. a) Cuntas soluciones existen?, Cuntas tienen sentido?. b) Usted que calle escogera para ubicar el local? Explique. 8. Una empresa de alimentos elabora varios productos, los ms importantes son: Helados, Ponqus, Pasteles de Pollo, Pasteles de Carne, Emparedados de Cordero y Emparedados de Pavo. Cada uno de estos productos debe pasar por

SISTEMAS DE ECUACIONES

87

cada una de las seis etapas de produccin de alimentos Compra a Proveedores, Almacenamiento, Elaboracin, Prueba de Calidad, Empaque y Distribucin. Una unidad de Helado requiere de 3, 5, 4, 3, 3 y 2 horas en cada etapa del proceso, una unidad de Ponqu requiere 4, 2, 4, 3, 4 y 5, una Unidad de Pastel de Pollo 4, 8, 2, 4, 2 y 4, una unidad de Pastel de Carne de 5, 4, 3, 2, 4 y 3, un Emparedado de Cordero 3, 2, 5, 2, 3 y 4 y un Emparedado de Pavo 2, 4, 1, 2, 4, 8. Cuntas unidades se pueden producir si, dadas las caractersticas de las empresa, se disponen de 2970 horas en Compra a Proveedores, 2950 en Almacenamiento, 2990 en Elaboracin, 2380 en Prueba de Calidad, 2350 en Empaque y 2350 en Distribucin.? 9. Los mtodos iterativos presentados en este captulo parten de una matriz de descomposicin. Siguiendo la presentacin del mtodo de Richardson en el apndice: a) Solucione uno de los sistemas de ecuaciones presentados en este captulo describiendo la programacin de este mtodo en un M-le. b) Cuntas iteraciones realiz su programa?

3.3. Apndice
El uso de mtodos iterativos para la solucin de un sistema de ecuaciones lineales parte de la regla de iteracin denida mediante la transformacin del sistema Ax = b, evidente en la ecuacin 3.14:

Qx = (Q A)x + b
Esta regla cambia segn la propiedad de cada mtodo iterativo.

3.3.1.

Gauss-Jacobi

En el mtodo de iteracin de Gauss-Jacobi, la ecuacin 3.14 puede escribirse como:

Qxk = (Q A)x(k1) + b
si denimos una matriz R = (Q A), la ecuacin 3.17 se reexpresa como:

(3.17)

Qxk = Rx(k1) + b

(3.18)

88

GEDEM - Versin Preliminar

El producto de la matriz Q por el vector columna x(k) es un vector columna, asimismo, el producto de la matriz R por el vector columna x(k1) es tambin un vector columna. La ecuacin vectorial 3.18 se puede expresar mediante n ecuaciones escalares (una para cada componente del vector), de modo que, para un elemento i cualquiera, se cumple la siguiente expresin:
n j=1

qij xj

(k)

=
j=1

rij xj

(k1)

+ bi

(3.19)

Si tenemos en cuenta que en la matriz Q todos los elementos fuera de la diagonal son cero, en el primer miembro el nico trmino no nulo de la sumatoria es aquel que contiene el elemento diagonal qii, que es precisamente aii. Mas an, debido a que los elementos de la diagonal de R son cero, podemos eliminar el trmino i = j de la sumatoria del segundo miembro, lo que dejara la ecuacin 3.19 de la forma:
(k) aii xi n

=
j=1 j=i

aij xj

(k1)

+ bi

(3.20)

de donde, despejando xi k , obtenemos:


n

xi (k) = (bi
j=1 j=i

aij xj

(k1)

)/aii

(3.21)

que es la expresin que nos proporciona las nuevas componentes del vector xk en funcin del vector anterior x(k1) en la iteracin de Jacobi. En resumen, el mtodo de Gauss-Jacobi se basa en reescribir el sistema de ecuaciones de la forma:

x1 = (b1 a21 x2 a31 x3 ... an1 xn )/a11 x2 = (b2 a12 x1 a32 x3 ... an2 xn )/a22 . . . = . . . xn = (bn a1n x1 a2n x2 ... ann xn )/ann
Partimos entonces de una aproximacin inicial para las soluciones al sistema de ecuaciones y sustituimos estos valores en la ecuacin 3.19 para generar una nueva aproximacin a la solucin del sistema que, bajo ciertas condiciones, es mejor que la aproximacin inicial. Esta nueva aproximacin se puede sustituir de nuevo en la parte derecha de la ecuacin 3.19 y, de esta misma forma, reemplazar sucesivamente hasta que la solucin converja.

SISTEMAS DE ECUACIONES

89

3.3.2.

Gauss-Seidel

Tal como en el caso anterior, denimos la matriz R = Q A, de manera que la ecuacin 3.14 se reescribe de la forma:

Qxk = Rx(k1) + b

(3.22)

Donde un elemento cualquiera, i, del vector Qxk esta determinado por la ecuacin:
n j=1 (k) aij xj n

=
j=1

aij xj

(k1)

+ bi

(3.23)

Si tenemos en cuenta la composicin de las matrices Q y R, todos los sumandos para los que j > i en la parte izquierda de 3.23 son nulos, mientras que en la parte derecha son nulos todos los sumandos para los que j < i. Planteamos entonces:
i j=1 (k) aii xi i1 (k) aij xj n

=
j=i+1

aij xj
n

(k1)

+ bi

(3.24)

+
j=1

(k) aij xj

=
j=i+1

aij xj

(k1)

+ bi

(3.25)

de donde, despejando xi k , obtenemos:

xi

(k)

i1

= (bi
j=1

aij xj
j=i+1

(k)

aij xj

(k1)

)/aii

(3.26)

Observemos que en el mtodo de Gauss-Seidel los valores actualizados de xi sustituyen de inmediato a los valores anteriores, mientras que en el mtodo de Jacobi todas las componentes nuevas del vector se calculan antes de llevar a cabo la sustitucin. En el mtodo de Gauss-Seidel los clculos deben llevarse a cabo en orden porque el nuevo valor xi depende de los valores actualizados de x1 , x2 , ..., xi1 .

3.3.3.

Mtodo de Richardson

Este procedimiento toma como matriz Q a la matriz identidad (I), de modo que la ecuacin 3.19 es ahora:

Ixk = (I A)x(k1) + b = x(k1) + r(k1)

(3.27)

donde r(k1) es el vector residual denido mediante r(k1) = b Ax(k1) . Replanteemos la ecuacin 3.27:

90

GEDEM - Versin Preliminar

xk = x(k1) Ax(k1) + b = x(k1) + r(k1)

(3.28)

en esta ecuacin, un elemento cualquiera del vector r(k1) vendra dado por la expresin:
(k1) ri xi n

= bi
i=1

aij xj

(k1)

(3.29)

Parte II

CLCULO

91

Captulo 4

Funciones
Norma Gmez, Norman Maldonado
En la primera parte del libro abarcamos los conceptos bsicos de lgebra lineal y el planteamiento computacional de estos en MATLAB , con el objetivo de aplicarlos a la solucin de problemas econmicos. El lgebra lineal permite construir espacios vectoriales que cumplen con ciertas propiedades (cerradura bajo la suma y bajo la multiplicacin por escalar). Una vez denido el espacio, sobre ste se pueden construir relaciones, que pueden ser funciones o correspondencias. Este captulo junto con los dos siguientes tienen como objetivo utilizar herramientas computacionales para el anlisis de funciones denidas en espacios vectoriales. En particular, en este captulo se muestra la manera en que podemos utilizar MATLAB para analizar grcamente las propiedades de una funcin, as como los cambios que se generan en ella cuando se modican parmetros. Sin embargo, no es posible realizar un anlisis grco cuando las funciones tienen ms de tres variables, por lo que es necesario utilizar el clculo diferencial e integral para estudiar las propiedades de cualquier funcin. Este ltimo es el propsito de los captulos 5 y 6. En general, algunas variables econmicas pueden afectar el comportamiento de otras, y este tipo de relaciones se pueden representar mediante funciones, como por ejemplo, la relacin que tiene la acumulacin de factores con el crecimiento econmico. Por tanto, conocer los mtodos para analizar una funcin y su planteamiento computacional, es til para abordar problemas econmicos. En la primera seccin de este captulo se estudia el concepto de funcin univariada, y la manera en que podemos gracarla en MATLAB para analizar sus propiedades. 93

94

GEDEM - Versin Preliminar

Adems, establecemos las herramientas que ofrece MATLAB para aadir algunas caractersticas adicionales al grco de la funcin, tales como ttulos, nombres de los ejes, colores, entre otros. En la segunda seccin, realizamos el mismo anlisis para funciones con dos variables, es decir, presentamos el concepto matemtico, visualizamos la funcin y aadimos caractersticas a los grcos. Tambin, utilizamos el concepto de curva de nivel para visualizar grcamente los conjuntos contorno de una funcin de dos variables. La tercera y cuarta seccin explican cmo visualizar el cambio de funciones de una y dos variables, respectivamente, cuando cambia el valor de alguno de sus parmetros (simulaciones). Finalmente, la ltima seccin estudia con estos mtodos algunas funciones econmicas importantes.

4.1. Funciones de una Variable


Una funcin f de un conjunto X R en otro Y R (f : X Y ), es una relacin que asigna a cada elemento x X exactamente un elemento y Y . Se dice que y es la imagen de x y se notar como f (x). El dominio (o conjunto de salida) de f es el conjunto X y su recorrido (rango o conjunto de llegada) consta de todas las imgenes f (x) de los elementos x X . En particular, una funcin de una variable se caracteriza porque cada elemento x X es un escalar. As, estas funciones tienen como conjunto de salida a R y como conjunto de llegada a R (f : R R).

4.1.1. Visualizacin de funciones de una variable


Para visualizar una funcin univariada f (x) en MATLAB , se siguen tres pasos:

Paso 1. Crear la funcin. Una funcin en MATLAB se puede denir de dos maneras
distintas. Por un lado, se puede crear un m-file en donde se dene la forma de la funcin. Por otro lado, se puede utilizar el comando inline, que permite crear cadenas de caracteres con las que se puede representar la forma funcional.

Paso 2. Crear los datos. Por la naturaleza numrica del mtodo grco, no podemos
visualizar la funcin a lo largo de todos los reales, ya que este es un conjunto no acotado. Por esto, establecemos los valores de la variable de salida en

FUNCIONES

95

los que se quiere visualizar la imagen de la funcin. Adems, utilizando la funcin que creamos en el Paso 1, generamos numricamente las imgenes de la funcin en el dominio.

Paso 3. Utilizar el comando plot de MATLAB para gracar. Este comando tiene
la sintaxis plot(x,y), donde x es un vector que contiene los valores del dominio denido en el Paso 2, e y es un vector que contiene las imgenes de la funcin para cada valor de x. As, plot une con una lnea los puntos generados por cada par de elementos (xi , yi ), donde xi es el elemento i del vector x, y yi es el elemento i del vector y. Esta rutina slo es til para funciones univariadas. El comando plot permite especicar el color y tipo de la lnea que se va a usar, y los marcadores que se colocarn en cada punto. Por ejemplo, la sintaxis plot(x,y,r+:) graca los vectores x e y con una lnea de color rojo (r) punteada (:) y coloca marcadores (+) en cada uno de los puntos (xi , yi ). En general, la sintaxis de este comando es plot(x,y,s), donde s es una cadena de caracteres que especica el color, el tipo de lnea y el marcador a utilizar. Es importante aclarar que los Pasos 2 y 3 se deben programar en un m-file diferente al m-file en donde se cre la funcin. Para los ejemplos del libro, los m-files que contienen la funcin (Paso 1) se nombrarn de la forma fejc#, donde f indica que es una funcin, ej ejemplo, c el captulo correspondiente y # el nmero del ejemplo. Similarmente, la programacin de los pasos 2 y 3 se colocar en m-files nombrados de la forma pejc#. As, fmej3 indica una funcin (f) utilizada en el capitulo de matrices y vectores (m) en el tercer ejemplo (3), y pejc es su programacin o script. Para ilustrar estos pasos veamos la funcin f : [2, 5] R, donde f (x) = x3 4x2 + 6. En primer lugar, debemos crear la funcin. Para ello, abrimos un m-file en MATLAB y escribimos la funcin de la siguiente forma:

function f=ffej0(x); f=x.^3-4*x.^2+6;


En la primera lnea se dene la funcin ffej0 que tiene como entrada el vector x y como salida el vector f. En la segunda lnea se especica la forma funcional. Este m-file debe ser guardado con el nombre que se asign a la funcin, que en este caso es ffej0. Por ltimo, recordemos del captulo 2 que el operador punto que se

96

GEDEM - Versin Preliminar

utiliza en la segunda lnea sirve para realizar operaciones elemento a elemento; por ejemplo, en x.^3 toma cada elemento del vector x y lo eleva a la potencia 3. El comando inline tambin permite especicar una funcin, expresndola como una cadena de caracteres. Esta funcin, a diferencia de la que acabamos de crear, no debe ser programada en un m-file independiente, sino en el mismo en donde se colocar la programacin de los otros pasos. En MATLAB podemos crearla de la siguiente forma:

f=inline(x.^3-4*x.^2+6);
En este caso, la instruccin crea un objeto f que contiene la cadena de caracteres x.^3-4*x.^2+6 y que por su estructura recibe los valores de un vector x. El siguiente paso, una vez creada la funcin, es crear los datos. Para ello, en un nuevo chero que llamaremos pej0, creamos los valores de la variable de salida x, y luego utilizamos alguna de las funciones creadas en el paso 1 para generar los valores de las imgenes f(x). Ya que el ejemplo nos indica que la funcin va de los nmeros reales en el intervalo [-2,5], a los nmeros reales, debemos denir estos valores para x y f(x). En MATLAB , abrimos un nuevo m-file, en donde creamos los valores de x e y utilizando la funcin ffej0 as:

x=[-2:0.1:5]; y=ffej0(x);
o, utilizando f creada con inline:

x=[-2:0.1:5]; y=f(x);
El vector x contiene valores entre -2 y 5, separados entre s en 0.1 unidades (-2, -1.9, -1.8,..., 4.9, 5), y el vector y contiene las imgenes de la funcin en este intervalo1 . Luego de crear los datos, MATLAB nos permite dibujar la funcin por medio de la sintaxis plot(x,y). Como resultado, y aadiendo algunas caractersticas adicionales que explicaremos ms adelante, MATLAB muestra el grco de la Figura 4.1 en una nueva ventana de guras (Figure Window). Veamos a continuacin otro ejemplo, en el cual la funcin
Para crear las imgenes con un m-file de la forma function f=ffej0(x,a); f=a*x, se introducen los inputs en el orden especicado en el m-file, es decir, y=ffej0(x,a). Utilizando una funcin de la forma f=inline(a*x), en el momento de utilizarla para crear las imgenes es necesario introducir los inputs en orden alfabtico, es decir y=f(a,x).
1

FUNCIONES
f(x) = x3 4x2 + 6
40

97

30

20

f(x)

10

10

20 2

Figura 4.1: Funcin Cbica presenta discontinuidades.

Ejemplo 4.1. Gracar f (x) =

4 (x1)2

en el conjunto de salida X = [0.8, 1.25].

Paso 1. Crear la funcin. En un m-file llamado ffej1:


function f=ffej1(x); f=4./((x-1).^2);
o, utilizando inline

f=inline(4./((x-1).^2));
Recordemos que en el caso de utilizar inline la funcin debe ser creada en el mismo m-file de los pasos 2 y 3.

Paso 2. Crear los datos. En un m-file, que llamaremos pej3:


x=[0.8:0.01:1.25]; y=ffej1(x); % Conjunto de Salida o Dominio % Conjunto de Llegada o Rango

En caso de utilizar la funcin inline f, slo se debe modicar la segunda lnea de la forma y=f(x). Por simplicidad, de aqu en adelante todas las funciones se crearn en m-files en vez de utilizar la instruccin inline.

Paso 3. Gracar la funcin.


plot(x,y,r+-)

98

GEDEM - Versin Preliminar

Como resultado se obtiene una grca de la funcin de color rojo (r), con lnea segmentada (-) y con marcadores (+) en cada punto. Aadiendo algunas caractersticas al grco, obtenemos la Figura 4.2. Observemos que esta funcin presenta 4 una discontinuidad cuando x = 1. En este valor de x, la funcin f es igual a 0 = . MATLAB permite trabajar con valores iguales a , y los representa como inf. En nuestro ejemplo, podemos ver que en la posicin 21 del vector y, la funcin toma el valor de inf.
x 10 4
4

f(x) = 4/(x1)2

3.5

2.5

f(x)

1.5

0.5

0 0.8

0.85

0.9

0.95

1.05

1.1

1.15

1.2

1.25

Figura 4.2: Funcin Discontinua en x=1

Para que esto se observe en la grca fue necesario denir los elementos del dominio separados por 0.01 unidades, de tal forma que 1 x y y. Cuando las funciones son discontinuas para ciertos valores del dominio, y este es denido en MATLAB de tal forma que la funcin nunca toma esos valores, la gura cambia considerablemente. Veamos qu ocurre con nuestra funcin cuando 1 no pertenece al dominio, por lo que no hace parte del rango o conjunto de llegada.

Ejemplo 4.2. Gracar f (x) =

4 (x1)2

con x=[0.8:0.013:1.25], y. /

Paso 1. Crear la funcin. Usamos la funcin creada en el m-file ffej1: Paso 2. Crear los datos. Cambiamos el espaciamiento entre los valores del conjunto
de salida:

FUNCIONES

99

x=[0.8:0.013:1.25]; % Conjunto de Salida o Dominio y=ffej1(x); % Conjunto de Llegada, Imagenes

Paso 3. Gracar la funcin.


plot(x,y, o-)

x 10

f(x) = 4/(x1)2

16

14

12

10

f(x)
8 6 4 2 0 0.8

0.85

0.9

0.95

1.05

1.1

1.15

1.2

1.25

Figura 4.3: Ejemplo 4.2 El resultado es la Figura 4.3, en donde la funcin se graca con color azul2 , con lnea continua (-) y con marcadores (o) en cada punto. En esta gura, la funcin parece ser continua. Esto se debe a que la variable x no tom el valor de 1, para el cual la imagen era , sino que tom valores muy cercanos a 1 (0.9950 y 1.0080), cuya imagen es diferente a . El comando plot une con una linea, en la zona de la discontinuidad, las imgenes de los dos puntos ms cercanos a 1 generando la grca de una funcin aparentemente continua. Por eso se recomienda siempre asegurarse de incluir en el vector x los valores del dominio donde la funcin es discontinua.

4.1.2.

Opciones adicionales para los grcos

Hemos observado que las diferentes grcas que han aparecido a lo largo del captulo tienen ciertas caractersticas en los ejes, ciertas fuentes para los ttulos, determinados
Cuando no se especica un color, como ocurre en esta gura ( ), el programa utiliza por defecto el color azul (b). Las otras opciones que utiliza por defecto son lnea continua (-) y ningn marcador.
2

100

GEDEM - Versin Preliminar

colores de lnea, o posiciones de las guras. Todos estos aspectos pueden ser programados en MATLAB , y a continuacin se explicar la manera de modicarlos.

text(x,y,Texto): ubica la cadena de caracteres Texto en las coordenadas (x,y). Cuando x e y son vectores, el texto se repite en cada par de elementos (xi , yi ). Con grcos en tres dimensiones, es necesario especicar coordenadas (x,y,z).
Para colocar valores de una variable en algn texto se necesita convertirlos primero en cadenas de caracteres. La instruccin num2str(a) convierte el valor numrico a en una cadena de caracteres3 .

title(Titulo): aade la cadena de caracteres Titulo en la parte superior del grco. En la instruccin, la cadena de caracteres debe aparecer en color rojo oscuro. xlabel(X): coloca la cadena de caracteres X como etiqueta del eje x. ylabel(Y): coloca la cadena de caracteres Y como etiqueta del eje y. zlabel(Z): coloca la cadena de caracteres Z como etiqueta del eje z, en grcos de tres dimensiones. xlabel off, ylabel off, zlabel off: quita la etiqueta de los ejes x,y,z, respectivamente. legend(Leyenda): coloca la cadena de caracteres Leyenda como etiqueta o rtulo de los elementos de un grco, ya sean lneas, barras u objetos. Con mltiples elementos, la sintaxis es legend(leyenda1,leyenda2,...). texlabel: crea texto en formato TEX. Tambin se puede colocar texto en formato TEX colocndolo seguido de  \. grid: crea una malla o cuadrcula en los grcos. Puede introducirse escribiendo grid on, y desaparece con grid off. line: crea lneas. Su sintaxis es line(x,y), donde x e y son vectores de la misma longitud y los puntos de la linea son las coordenadas que forman estos vectores componente a componente. Cuando estos no son vectores sino matrices de igual tamao, MATLAB dibuja una lnea por columna. Para grcos en 3 dimensiones, se deben especicar vectores (o matrices) x,y,z.
3

Ver Cuadro 1.2.

FUNCIONES

101

axis: controla la escala de los ejes que se introducen en el grco. Para grcos de dos dimensiones, recibe como entrada un vector de cuatro componentes: el valor mnimo del dominio sobre el eje x (xmin), el valor mximo sobre el eje x (xmax); el valor mnimo de las imgenes de la funcin en el eje y (ymin), y su valor mximo (ymax). La sintaxis es axis([xmin xmax ymin ymax]).
Cuando el grco es de tres dimensiones, es necesario incluir las coordenadas de los valores mnimo y mximo que tomar el eje z (zmin y zmax), extendiendo la sintaxis a axis([xmin xmax ymin ymax zmin zmax]). Algunos comandos colocan rangos predeterminados para los ejes. Por ejemplo, axis auto ja los ejes automticamente segn el dominio de la funcin; axis xy, crea un par de ejes cuyo origen est en la esquina inferior izquierda (sistema cartesiano tradicional); axis ij, coloca el origen en la esquina superior izquierda y crea dos ejes i y j, vertical y horizontal respectivamente. Los valores de i van de arriba a abajo y los de j de izquierda a derecha. Con la instruccin axis equal, el programa coloca la misma escala a todos los ejes. Con el comando axis square los ejes forman un cuadrado (o un cubo). Para restaurar los valores predeterminados de los ejes, se usa el comando axis normal. La instruccin axis on activa los ejes en un grco, y axis off los oculta.

view(az,el): especica la rotacin de un grco en tres dimensiones para observar la gura desde un ngulo distinto. En su sintaxis, az representa el acimut (azimuth en ingls) o ngulo horizontal de rotacin, y el es el ngulo de elevacin vertical (medidos en grados).
El comando view(2), genera la vista de la gura en dos dimensiones sobre el plano cartesiano, con un acimut de 0, y una elevacin de 90 , mientras que view(3) genera una vista con un acimut de -37.5 y una elevacin de 30. Para observar el ngulo en el cual se est viendo una gura se utiliza la sintaxis [az,el]=view, y MATLAB mostrar los valores de az y el de la gura que est abierta en ese momento.

subplot: divide la ventana de guras en las y columnas. La sintaxis es subplot (r,c,i), donde r es el nmero de las en que se divide la ventana, c el nmero de columnas e i es el nmero de la subventana que quedar activa,

102

GEDEM - Versin Preliminar es decir, la subventana en donde se gracarn las instrucciones inmediatamente posteriores.

Cada objeto en una gura tiene caractersticas o propiedades que se pueden modicar slo si el objeto recibe un nombre. Por ejemplo, el ttulo de un grco es un objeto que tiene como caractersticas, entre otras, el tamao, tipo, grosor e inclinacin de la letra. Al colocar la instruccin ts=title(Titulo), MATLAB almacena el objeto Titulo con el nombre ts, y con este nombre se pueden modicar sus propiedades. A continuacin explicaremos algunas propiedades de los objetos.

font: las opciones que comienzan con font, hacen modicaciones sobre el texto. fontangle cambia el grado de inclinacin de las letras del texto, entre las opciones normal, italic, y oblique, que generan tipos de letra normal, itlica y oblicua respectivamente. fontname, cambia la fuente del texto. fontunits especica la unidad en la que se mide el tamao de la letra (pulgadas - inches, centimetros - centimeters, puntos - points o pixeles pixels). fontsize cambia el tamao de la letra. Por ltimo, fontweight permite cambiar el grosor en el tipo de letra (light, normal, demi, bold). alignment: existen dos comandos que modican la alineacin de los objetos; la alineacin horizontal (horizontalalignment) que tiene como opciones alinear a la derecha (right), a la izquierda (left) o en el centro (center); y la alineacin vertical (verticalalignment) que puede ser arriba (top), en el medio (middle) y abajo (bottom). color: permite realizar cambios en el color de un objeto. MATLAB identica la mayora de los colores con su inicial en ingls: b para azul, g para verde, r para rojo, c para azul verdoso, m para magenta, y para amarillo, y k para negro. line: las opciones que comienzan con line, hacen modicaciones sobre las lneas del objeto. linestyle modica el estilo de la lnea de un objeto. Tiene como opciones lnea continua -, lnea punteada :, lnea segmentada - y lnea con punto -.. linewidth modica la amplitud o grosor de la lnea del objeto (por defecto es 0.5). marker: las opciones que comienzan con marker, hacen modicaciones sobre los marcadores del objeto. marker especica algn tipo de marcador (+ o * . x square diamond v ^ > < pentagram hexagram none). markersize

FUNCIONES

103

indica el tamao del marcador. markeredgecolor asigna el color del borde del marcador, mientras que markerfacecolor asigna el color de relleno (en marcadores que son poligonos cerrados, como por ejemplo o). Para observar o modicar las caractersticas de algn objeto ob, se utilizan los comandos get y set. El primero muestra las propiedades del objeto, mientras que el segundo las modica. La instruccin get(ob) el programa muestra la conguracin actual de las propiedades del objeto ob, mientras que con la instruccin set(ob) muestra las opciones disponibles para cada propiedad del objeto. Con la instruccin set(ob,p,v) MATLAB asigna el valor v a la propiedad p del objeto ob. Para ilustrar estos comandos, en cada uno de los siguientes ejemplos se modicarn las opciones de algunos objetos.

4.2. Funciones de dos variables


A diferencia de una funcin de una variable, una funcin de dos variables se caracteriza porque el conjunto de salida es el producto cartesiano de los vectores x e y (x y , x, y R), por lo que estas funciones tienen como conjunto de salida a R2 y como conjunto de llegada a R (f : R2 R). As, cada elemento del conjunto de salida es una pareja ordenada de la forma (xi , yi ),

4.2.1.

Visualizacin de Funciones de dos variables

Comencemos por retomar los pasos necesarios para visualizar una funcin en MATLAB y adaptarlos al caso de funciones con dos variables:

Paso 1. Crear la funcin fej(X,Y). Paso 2. Crear los datos. En funciones de dos variables se crean tres conjuntos de
datos: las dos variables de salida (x e y ) y la variable de llegada (z ). Estos tres conjuntos de datos pueden ser vectores o matrices4 de igual dimensin. Dados los conjuntos x = (x1 , x2 , . . . , xn ), y = (y1 , y2 , . . . , yn ), el dominio sobre el cual se dene la funcin f (x, y) es el producto cartesiano x y . Este producto genera como resultado una serie de parejas ordenadas de la forma (xi , yi ) denida por la matriz:
Como se estableci en el Captulo 2, los vectores los denotamos con minsculas mientras que las matrices con maysculas.
4

104

GEDEM - Versin Preliminar

(x1 , y1 ) (x2 , y1 ) ... (xn , y1 ) (x1 , y2 ) (x2 , y2 ) ... (xn , y2 ) . . . .. . . . . . . . (x1 , yn ) (x2 , yn ) ... (xn , yn )

Grcamente, los puntos generados por esta matriz se pueden ver como una malla en la parte izquierda de la Figura 4.4. Cada interseccin de las lneas punteadas corresponde a una de las posiciones de la matriz anterior, generando el producto cartesiano necesario para denir el dominio o conjunto de salida de la funcin. En la parte derecha de esta gura, se muestra el espacio en donde se visualiza la funcin de dos variables f (x, y). La base de este espacio es el producto cartesiano x y , y el eje vertical corresponde al rango de la funcin f (x, y).

0.9

0.8 1 0.7 0.8

0.6

0.6

f(x,y)

0.4

0.5

0.2 0.4 0 1 0.3 0.9 0.8 0.7 0.2 0.6 0.5 0.4 0.1 0.3 0.2 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0.1 0.2 0.1 0 0 0.3 0.4 0.6 0.5 0.7 0.8 0.9 1

Figura 4.4: Malla Podemos reescribir la matriz anterior en dos matrices que contengan los elementos xi e yi respectivamente, as: x1 x2 ... xn y1 y1 ... y1 x1 x2 ... xn y2 y2 ... y2 . . X= Y = . .. . . .. . . . . . . . . . . . . . . . x1 x2 ... xn yn yn ... yn Las matrices X e Y se pueden crear a partir de dos vectores x e y . En MATLAB esto se hace por medio de la instruccin meshgrid5 cuya sintaxis es:
5

Ver Captulo 2

FUNCIONES

105

[X,Y]=meshgrid(x,y)
Las parejas ordenadas de elementos X(i,j),Y(i,j) conforman la malla de la parte izquierda de la Figura 4.4. Para crear el conjunto de llegada o imgenes de f (x, y), se dene la matriz Z as:

Z=fej(X,Y)

Paso 3. Utilizar un comando para gracar. MATLAB dispone de los siguientes


comandos para gracar una funcin de dos variables:

plot3: Este comando es equivalente a plot utilizado para gracar funciones de una variable, y tiene la sintaxis plot3(X,Y,Z). Cuando los elementos a gracar son vectores (x, y, z ), este comando traza en el espacio R3 una lnea que une los puntos generados por las columnas de cada uno de los vectores. As, siendo x, y, z vectores de tamao 1 n, el comando traza una lnea que une los puntos (x1 , y1 , z1 ), (x2 , y2 , z2 ), . . . , (xn , yn , zn ).
Cuando los elementos a gracar son matrices (X, Y, Z ), el comando dibuja las lneas generadas por las columnas de las matrices X, Y, Z . Siendo X, Y, Z matrices de tamao m n, la instruccin plot3(X,Y,Z) dibuja simultneamente la lnea generada por la primera columna

(X11 , Y11 , Z11 ), (X21 , Y21 , Z21 ), . . . , (Xm1 , Ym1 , Zm1 ),


la lnea generada por la segunda columna

(X12 , Y12 , Z12 ), (X22 , Y22 , Z22 ), . . . , (Xm2 , Ym2 , Zm2 ),


y as sucesivamente hasta la lnea generada por la columna n

(X1n , Y1n , Z1n ), (X2n , Y2n , Z2n ), . . . , (Xmn , Ymn , Zmn ). mesh: Dibuja una malla en el espacio R3 que reeja la forma de la funcin (matriz Z ) a lo largo del dominio denido por las matrices X e Y . Las lneas que conforman la malla son dibujadas en colores previamente denidos en el colormap. El rea que encierra cada cuadrado de la malla es blanca. La sintaxis de este comando es: mesh(X,Y,Z) surf: Al igual que mesh, este comando dibuja una malla en el espacio R3 que reeja la forma de la funcin (matriz Z ) a lo largo del dominio

106

GEDEM - Versin Preliminar denido por las matrices X e Y . Las lneas que conforman la malla son de color negro y el rea que encierra cada cuadrado de la malla se dibuja a partir de la escala de colores denida por el colormap. Su sintaxis es:

surf(X,Y,Z) contour3: Dibuja un nmero n de curvas de nivel de la funcin en el espacio R3 . Una curva de nivel corresponde a gracar f (x, y) = , donde es una constante. El conjunto de curvas de nivel est dado por los n distintos valores que puede tomar . Su sintaxis es: [CS,H]=contour3(X,Y,Z,n)
donde CS tiene los clculos de cada una de las curvas de nivel o contornos (valores de ), y H tiene los valores que permiten modicar las propiedades de cada curva de nivel. Cuando n es un vector, cada componente de n es un diferente valor de especicado por el usuario.

contour: Dibuja un nmero n de curvas de nivel en el espacio R2 (conjunto de salida x y ). Su sintaxis es: [CS,H]=contour(X,Y,Z,n) clabel: Coloca etiquetas que indican el valor de en cada una de las curvas de nivel obtenidas con los comandos contour 3 o contour. Su sintaxis es: clabel(CS,H)
La secuencia de pasos y la utilizacin de cada comando se ilustran con el siguiente ejemplo.

Ejemplo 4.3. Gracar la funcin f (x, y) = x + y en el dominio f : [5,20] [5,20]


R.

Paso 1. Crear la funcin. La creamos en un m-file llamado ffej3, as:


function f=ffej3(x,y); f=x+y;

Paso 2. Crear los datos. En el chero pej3, comenzamos por denir los valores para
los vectores x e y:

x=[5:1:20];y=[5:1:20];
Luego, necesitamos crear la malla (o dominio) sobre la cual est denida la funcin, por medio del comando meshgrid, as:

FUNCIONES

107

[X,Y]=meshgrid(x,y);
Ahora, hallamos los valores de las imgenes de la funcin sobre este conjunto, que se guardan en la matriz Z:

Z=ffej3(X,Y);

Paso 3. Gracar. Utilicemos los diferentes comandos que ofrece MATLAB para
visualizar la funcin f (x, y) = x + y :

subplot(2,2,1) plot3(X,Y,Z); grid on; title(Plot3); subplot(2,2,2); mesh(X,Y,Z); title(Mesh); subplot(2,2,3); surf(X,Y,Z); title(Surf); n=20; subplot(2,2,4); contour3(X,Y,Z,n); title([Contour3 (n=,num2str(n),)]); grid off
Como resultado de esta programacin MATLAB nos muestra la Figura 4.5. A partir de esta gura podemos ver que el comando plot solo dibuja lneas mientras que mesh y surf dibujan una malla. En el grco de las curvas de nivel, observamos que cada una de ellas tiene un color diferente dependiendo del valor () al que se iguala la funcin. Para los grcos en R3 tambin es posible utilizar el comando grid. En este ejemplo activamos la cuadrcula con grid on despus de plot3, ya que este desactiva la cuadrcula por defecto, y luego la desactivamos al utilizar la instruccin contour3.

108
Plot3
40 40

GEDEM - Versin Preliminar


Mesh

30

30

f(x,y)

20

f(x,y)
20 10 15 10 5 5

20

10 20 15

10 20 15 10 15 10 5 5 20

Surf
40 40

Contour3 (n=20)

30

30

f(x,y)

20

f(x,y)
20 10 15 10 5 5

20

10 20 15

10 20 15 10 15 10 5 5 20

Figura 4.5: Comandos para gracar funciones de dos variables

4.2.2. Opciones adicionales para los grcos


Las caractersticas de la seccin 4.1.2 pueden aplicarse a grcos en tres dimensiones. Una caracterstica adicional de grcos en R3 es el mapa de colores con el que se gracan las supercies, que se modica con el comando colormap. Este comando matiza entre un conjunto de colores para cada gura. Los colormaps mas utilizados6 son:

hot: Blanco, negro, amarillo y rojo flag: Rojo, blanco, azul y negro. cool: Ail y magenta. autumn: Rojo y amarillo summer: Verde y amarillo. winter: Azul y verde.
Es posible construr numricamente colormaps personalizados. Esto se puede consultar en la documentacin o en la ayuda de este comando.
6

FUNCIONES

109

Adems, colorbar introduce una barra de colores que permite ver, segn el mapa de colores que se aplique, el color correspondiente a cada valor de la funcin, es decir, a cada valor del eje z o eje vertical. Con los siguientes ejemplos se ilustrarn estas opciones.
3 Ejemplo 4.4. Gracar la funcin f (x, y) = 1 (x + y)3 + 2 (x + y)2 500(x + y) + 6

10x2 + 10y 2 + 50x, sobre el dominio f : [90,90] [90,90]

R.

Paso 1. Crear la funcin en un m-file llamado ffej4.


function f=ffej4(x,y); f=(1/6)*(x+y).^3+ (3/2)*(x+y).^2-500*(x+y)+... 10*x.^2+10*y.^2+50*x;

Paso 2. Crear los datos en otro m-file llamado pfej4.


x=[-90:2:90];y=x; [X,Y]=meshgrid(x,y); Z=ffej4(X,Y);

Paso 3. Gracar la funcin.


mesh(X,Y,Z) title([ x,y \in [,num2str(min(x)),,,num2str(max(x))]]); colorbar; xlabel(x);ylabel(y);zlabel(f(x,y)); view(50,34)
Como resultado, tenemos la Figura 4.6. Para este grco se utilizaron las instrucciones xlabel, ylabel y zlabel para colocar nombres en cada A uno de los ejes. Adems, en el ttulo se colocaron smbolos L TEX7 utilizando \: la instruccin \in gener el smbolo . La funcin de la Figura 4.6 aparentemente es creciente a lo largo de todo su dominio8 . Sin embargo, debido a la escala que se est manejando (valores entre -90 y 90) se pueden estar obviando detalles sobre el comportamiento de la funcin. Por esta razn es necesario examinar en detalle el comportamiento de la funcin en varios dominios. Para ello, las siguientes instrucciones gracan la misma funcin en cuatro conjuntos de salida diferentes.
Para una mayor explicacin de estos smbolos, consultar ?). Recordemos que una funcin f (x, y) es creciente en su dominio S si para todo (x, y) S , los elementos del gradiente (pendiente) son positivos.
8 7

110
x,y [90,90]

GEDEM - Versin Preliminar


x 10 10
5

x 10

10 6 8 6 4 4

f(x,y)

2 2 0 2 0 4 6 2 80 60 40 20 0 20 40 60 80 80 60 20 40 6 0 20 40 60 80 4

Figura 4.6: Ejemplo 4.4

% Crear los cuatro conjuntos de datos x1=[-90:9:90];y1=x1; [X1,Y1]=meshgrid(x1,y1); n=length(x1); Z1=ffej4(X1,Y1); x2=linspace(-70,70,n);y2=x2; [X2,Y2]=meshgrid(x2,y2); Z2=ffej4(X2,Y2); x3=linspace(-50,50,n);y3=x3; [X3,Y3]=meshgrid(x3,y3); Z3=ffej4(X3,Y3); x4=linspace(-30,30,n);y4=x4; [X4,Y4]=meshgrid(x4,y4); Z4=ffej4(X4,Y4); % Graficar

subplot(2,2,1) mesh(X1,Y1,Z1);view(50,34); xlabel(x);ylabel(y);zlabel(f(x,y)); title([(x,y) \in [,num2str(min(x1)), ,,num2str(max(x1)),]]);

FUNCIONES

111

subplot(2,2,2) mesh(X2,Y2,Z2);view(50,34); xlabel(x);ylabel(y);zlabel(f(x,y)); title([(x,y) \in [,num2str(min(x2)),,,num2str(max(x2)),]]); subplot(2,2,3) mesh(X3,Y3,Z3);view(50,34); xlabel(x);ylabel(y);zlabel(f(x,y)); title([(x,y) \in [,num2str(min(x3)), ,num2str(max(x3)),]]); subplot(2,2,4) mesh(X4,Y4,Z4);view(50,34); xlabel(x);ylabel(y);zlabel(f(x,y)); title([(x,y) \in [,num2str(min(x4)), ,,num2str(max(x4)),]]);
x,y [90,90]
x 10
5

x,y [70,70]
x 10
5

10 4 5

f(x,y)

0 5

f(x,y)
50 0 50 50 0

2 0 2 50

50

50 0 50 50 0

x,y [50,50]
x 10
4

x,y [30,30]
x 10
4

3 15 10 2 1 0

f(x,y)

5 0 5 50 50 0 50 50 0

20 0 20 20 0

20

Figura 4.7: Distintos conjuntos de salida En la Figura 4.7, se presenta la misma funcin sobre los dominios [90,90][90,90], [70,70][70,70], [50,50][50,50], [30,30][30,30]. A medida que se utilizan

112

GEDEM - Versin Preliminar

dominios con menor escala (intervalos de x e y ms pequeos) se observa que la funcin tiene una zona decreciente alrededor del punto (x, y) = (10, 10).

Ejemplo 4.5. Gracar la funcin f (x, y) = x2 y 2 , sobre el dominio f : [30,30]


[30,30] R.

Paso 1. Crear la funcin en un m-le llamado ffej5.


function f=ffej5(x,y); f=(x.^2)-(y.^2);

Paso 2. Crear los datos.


x=[-30:1:30];y=x; [X,Y]=meshgrid(x,y); Z=ffej5(X,Y);

Paso 3. Gracar la funcin.


colormap(winter); subplot(2,2,1) contour3(X,Y,Z,30) title(Contour3, n = 30); xlabel(x);ylabel(y);zlabel(f(x,y)); subplot(2,2,2) [c1,h1]=contour(X,Y,Z,8); clabel(c1,h1); title([Contour, Clabel, n=8]); xlabel(x);ylabel(y);zlabel(f(x,y)); subplot(2,2,3) [c2,h2]=contour(X,Y,Z,[-800 -600 -400 -200 200 400 600 800]); clabel(c2,h2); title([Contour, Clabel]); xlabel(x);ylabel(y);zlabel(f(x,y)); subplot(2,2,4) cn = [-800 -150 0 150 800]; contourf(X,Y,Z,cn)

FUNCIONES

113

title([Contourf]); xlabel(x);ylabel(y);zlabel(f(x,y));

Contour3, n = 30
30 1000 500 20

Contour, Clabel, n=8


3 38
20 20

1 2
43

10

f(x,y)

500 10 1000 20 0 20 20 20 0 30 30 20

642.85

71

12 8.

57 1

14 .57 28 1 385.7143 642


10 0

.8571
10 30

20

Contour, Clabel
30

Contourf
30

00

800 600

20

0 40 2

00
20

20 0

10

10

400

800 600

800

10

20

10

20

30 30

00 2
20

600 800
10 0

40 2 0 00
10 20 30

20

30 30

20

10

10

5.7
642.8571
30

Figura 4.8: Punto de Silla

El resultado es la Figura 4.8. Para este grco denimos un nuevo mapa de colores con el comando colormap(winter). Se utiliz contour junto con clabel para gracar 8 curvas de nivel calculadas por MATLAB , con su respectiva etiqueta (indicando el valor de ). Estos comandos tambin se utilizaron para gracar curvas de nivel predeterminadas (-800 -600 -400 -200 200 400 600 800). La instruccin contourf grac otras curvas de nivel diferentes (-800 -150 0 150 800), sin etiquetas, pero rellenando sus contornos del mismo color de las curvas9 .

En el captulo 7 se estudiar ms a fondo el concepto de conjuntos contorno.

14

8.5

642.8571 .7143 385 71 4


7 128.5

5 38 .71

14

400

600

114

GEDEM - Versin Preliminar

4.3. Simulaciones en funciones de una variable


Una simulacin es un ejercicio numrico que modica el valor de uno o varios parmetros de los que depende una funcin. Esto se hace para observar el cambio en el comportamiento de la funcin al modicar (simular) los parmetros. El procedimiento para realizar la simulacin parte de los mismos pasos para dibujar una funcin que hemos trabajado hasta ahora: crear la funcin, crear los datos y gracar. Sin embargo hay dos modicaciones. La primera consiste en que al crear la funcin, sta debe recibir como entradas, adems de las variables, los parmetros. La segunda requiere que los pasos de crear los datos (especcamente, el rango o conjunto de llegada) y gracar se repitan n veces (que pueden separarse por una pausa), donde n es el nmero de valores del parmetro que se van a simular. Para ilustrar este procedimiento veamos el siguiente ejemplo.
f(x) = x0.3
0.7 0.35

f(x) = x0.7

0.6

0.3

0.5

0.25

0.4

0.2

f(x)

0.3

f(x)
0.15 0.2 0.1 0.1 0.05 0 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2

Figura 4.9: Simulacin de una funcin de una variable En la parte izquierda de la Figura 4.9 se muestra la imagen de f (x) = x0.3 , que tiene una fuerte curvatura. En la parte derecha se visualiza la funcin f (x) = x0.7 , resultado de un cambio en el exponente de la variable (parmetro); ahora la funcin presenta una curvatura mas suave, y tiende a ser lineal. Estos cambios pueden ser observados estableciendo al interior de las funciones parmetros que puedan tomar diferentes valores. En el caso anterior, la forma general de la funcin es f (x) = xa con a (0, 1), y se simul el parmetro a para los valores de a = 0.3 y a = 0.7. A continuacin extendemos el anterior ejemplo, simulando el parmetro a (el exponente de la variable x) para los valores de 0.1, 0.4, 0.6 y 0.9.

FUNCIONES

115

Ejemplo 4.6. Simular el parmetro a en f (x) = xa , para a = {0.1, 0.4, 0.6, 0.9}. Paso 1. Crear la funcin. En un m-file:
function f=ffej6(x,a); % Parametro como entrada f=x.^a; % Forma funcional

Paso 2. Crear los datos. Denimos los valores de x, a e y.


x=[0:0.0025:0.2]; a=[0.1 0.4 0.6 0.9]; n=length(a); for i=1:n; y(i,:)=ffej6(x,a(i)); end % Conjunto de salida % Valores del Parmetro % Numero de valores del parametro

% Crear n conjuntos de llegada

Se crearon n conjuntos de llegada o rangos, donde n es el nmero de valores que toma el parmetro (length(a)).

Paso 3. Gracar la funcin (repetir n veces):


for i=1:n; subplot(2,2,i) plot(x,y(i,:)); xs=xlabel(x);ys=ylabel(f(x)); ts=title([f(x) = x^a, a = ,num2str(a(i))]); set(ts,Fontsize,18,Fontweight,Bold,color,b) set(xs,FontSize,14,Fontweight,Bold) set(ys,FontSize,14,Fontweight,Bold) end
El comando for repite el proceso 4 veces, que es el nmero de valores que toma el parmetro a (n=length(a)). La instruccin y(i,:)=ffej6(x,a(i)) crea un conjunto de imgenes de la funcin ffej6 para cada valor del parmetro a, y lo guarda en la la i de la matriz y. Una vez creados los datos, se utiliza la instruccin subplot(2,2,i), para hacer un grco que tenga dos las y dos columnas. En cada posicin i del subplot, se utiliza plot(x,y(i,:)) para gracar la imagen de la funcin cuando el parmetro a toma el valor a(i). La salida de MATLAB se muestra en la Figura 4.10.

116

GEDEM - Versin Preliminar

f(x) = xa, a = 0.1


0.9 0.8 0.7 0.5 0.6 0.7 0.6

f(x) = xa, a = 0.4

f(x)

0.4 0.3

f(x)
0 0.05 0.1 0.15 0.2

0.5

0.4 0.3 0.2

0.2 0.1 0 0.1 0 0 0.05 0.1 0.15 0.2

f(x) = xa, a = 0.6


0.4 0.35 0.2 0.3 0.25 0.15 0.25

f(x) = xa, a = 0.9

f(x)

0.2 0.15 0.1

f(x)
0 0.05 0.1 0.15 0.2

0.1

0.05 0.05 0 0 0 0.05 0.1 0.15 0.2

Figura 4.10: Ejemplo 4.6 Con los comandos xlabel y ylabel se colocaron las etiquetas x y f(x) para los ejes. La instruccin num2str(a(i)) convierte el valor numrico a(i) en una cadena de caracteres, por lo que el ttulo cambia para cada valor de a. Al crear la gura se coloca nombre al ttulo (ts) y a los ejes (xs,ys), para poder modicar sus propiedades. Con el comando set se dene para el ttulo un tamao de letra 18, grosor bold y color azul, y para los ejes un tamao de letra 14 y grosor bold. En este ejemplo se observa que el bucle for repite el proceso n veces, tanto al crear las imgenes como al gracar. Aunque este bucle se segment para seguir los mismos pasos, en una sintaxis mas sencilla se pueden unir estos dos bucles en uno solo. Veamos un ejemplo con la funcin seno.

Ejemplo 4.7. Simular el parmetro a en f (x) = asen(x) Paso 1. Crear la funcin. En un m-file:
function f=ffej7(x,a); f=a.^(sin(x));

FUNCIONES

117

Paso 2. Crear los datos. Denimos los valores de x y a.


x=[1:0.01:25]; a=[0.3:0.2:1.7]; v=[min(x) max(x) -10 10];

% Eje vertical

En este caso a toma valores entre 0.3 y 1.7, espaciados entre si por 0.2 unidades.

Paso 3. Simular el parmetro a:


for i=1:length(a); y=ffej7(x,a(i)); plot(x,y); ls=line([min(x) max(x)],[0 0]); xs=xlabel(x);ys=ylabel(f(x)); ts=title([f(x) = a^{sin(x)} a = ,num2str(a(i))]); axis(v); % Escala de los ejes set(ts,Fontsize,16,Fontweight,Bold,color,r) set([xs ys],FontSize,10,Fontweight,Bold) set(ls,linestyle,:) pause(2) end
Se utiliza un mismo bucle for para crear los rangos y para gracar.

Como resultado MATLAB graca secuencialmente la simulacin de la funcin para ocho valores del parmetro a. En la Figura 4.11 se muestra simultneamente el comportamiento de la funcin para cuatro valores de a (0.3 0.7 1.3 1.7). A partir de la lnea 7 se modican las propiedades de algunos objetos. Para el ttulo se establece tamao de letra 16, grosor bold y color rojo. Las etiquetas de los ejes tienen tamao de letra 10, grosor bold, y por defecto el color de la letra es negro. A diferencia del ejemplo anterior, la conguracin de las caractersticas de los ejes se hizo en una sola linea (y no en dos lneas diferentes), utilizando el vector [xs,ys] en la instruccin set. Con line se coloc una lnea horizontal punteada para representar el eje de las x, por lo que va del punto (x, y) = (min(x),0) al punto (x, y) = (max(x),0), y con la instruccin axis(v) se coloc una escala ja al eje vertical de la grca (entre -10 y 10).

118
f(x) = asin(x) a = 0.3
10 8 6 4 2 10 8 6 4 2

GEDEM - Versin Preliminar


f(x) = asin(x) a = 0.7

f(x)

0 2 4 6 8 10 5 10 15 20 25

f(x)

0 2 4 6 8 10 5 10 15 20 25

f(x) = asin(x) a = 1.3


10 8 6 4 2 10 8 6 4 2

f(x) = asin(x) a = 1.7

f(x)

0 2 4 6 8 10 5 10 15 20 25

f(x)

0 2 4 6 8 10 5 10 15 20 25

Figura 4.11: Ejemplo 4.7 En MATLAB podemos simular una funcin de una variable para un gran nmero de valores de su parmetro, con grcos de tres dimensiones, en donde los valores del parmetro se colocan en el eje z o eje vertical. Veamos un ejemplo.

Ejemplo 4.8. Simular el parmetro a en la funcin f (x) = asen(x) , con a = [0, 0.2] Paso 1. Crear la funcin. Podemos utilizar la funcin ffej7. Paso 2. Crear los datos.
x=[-10:0.1:6]; a=[0:0.1:4]; [X,A] = meshgrid(x,a); Y=ffej7(X,A); % Valores de x % Valores del parametro % Dominio % Rango, Imagenes

Paso 3. Gracar. En el eje z se gracan los valores del parametro (matriz A).
mesh(X,Y,A); t=texlabel(a^{sin(x)}); xs=xlabel(x);ys=ylabel(f(x));zs=zlabel(a);

FUNCIONES

119

ts=title([f(x) = ,t, a \in [,num2str(min(a)),... ,,num2str(max(a)),]]); set(ts,Fontsize,18,Fontweight,Bold); set([xs ys zs],FontSize,14,Fontweight,Bold);


f(x) = asin(x) a [0,4]

3.5

2.5

1.5

0.5

0 10 8 6 4 2 8 0 10 4 6 0 2 4 2 6

f(x)

Figura 4.12: Ejemplo 4.8 La salida de MATLAB se presenta en la Figura 4.12. Utilizamos la instruccin A texlabel para colocar la funcin como una expresin de L TEX y la incluimos dentro del ttulo. La instruccin title se segment en dos renglones con puntos suspensivos (...) debido a su extensin. Adems, se conguraron las caractersticas de los ejes en una sola lnea, utilizando el vector [xs ys zs] en la instruccin set. Se observa que para valores de a cercanos a 1 la funcin tiende a ser lineal, pero a medida que se aleja de este valor, las oscilaciones caracterstricas de la funcin seno se hacen ms pronunciadas. Con la instruccin contour(X,Y,A,40) obtenemos curvas de nivel que muestran el mismo resultado en el plano en donde est denida la funcin (Figura 4.13). Cuando se simulan pocos valores del parmetro de una funcin, no es necesario utilizar bucles con subplots para gracar la simulacin. Veamos un ejemplo en donde la funcin que vamos a simular es de forma exponencial.

Ejemplo 4.9. Simular el parmetro a en la funcin exponencial f (x) = e(ax) , con


a = {0.1, 0.4, 0.7, 1}

120
f(x) = asin(x)
9 8

GEDEM - Versin Preliminar


a [0,4]

f(x)
4 3 2 1 0 10

Figura 4.13: Ejemplo 4.8

Paso 1. Crear la funcin. En un m-file:


function f=ffej9(x,a); f=exp(-a*x);

Paso 2. Crear los datos. Denimos los valores de x y a.


x=[0:0.01:20]; a=[0.1 0.4 0.7 1]; for i=1:length(a); y(i,:)=ffej9(x,a(i)); end

% Conjuntos de llegada

Paso 3. Gracar la simulacin.


p = plot(x,y(1,:),r :,x,y(2,:),b -.,... x,y(3,:),k -,x,y(4,:),m -); ls = legend([a = ,num2str(a(1))],[a = ,num2str(a(2))],... [a = ,num2str(a(3))],[a = ,num2str(a(4))]); % Caracteristicas adicionales grid on; xs=xlabel(x);ys=ylabel(f(x));

FUNCIONES

121

ts=title([f(x) = e^-ax a = [0.1 0.4 0.7 1]]); set(ts,Fontsize,16,Fontweight,Bold,... horizontalalignment,left,... verticalalignment,baseline); set([xs ys],FontSize,12,Fontweight,Bold); set(ls,fontsize,12,fontname,times,location,north);

f(x) = eax
a = 0.1 a = 0.4 a = 0.7 a=1

a = [0.1 0.4 0.7 1]

0.9

0.8

0.7

0.6

f(x)

0.5

0.4

0.3

0.2

0.1

0 0 2 4 6 8 10 12 14 16 18 20

Figura 4.14: Ejemplo 4.9 En la Figura 4.14 se observa el comportamiento de la funcin. Se utiliz plot para colocar en una sola gura las cuatro simulaciones. Cada simulacin se coloc con un tipo de lnea y color diferente. Se utiliz legend para colocar una leyenda con las etiquetas de cada simulacin, segn sus colores y tipos de lnea. Con set, el ttulo se aline horizontalmente a la izquierda (derecha del usuario) y verticalmente sobre la lnea del grco. Tambin se utiliz para modicar tamao y tipo de letra de la leyenda y ubicarla en la parte superior central (north) del grco.

4.4. Simulaciones en funciones de dos variables


En esta seccin estudiaremos la forma de analizar el comportamiento de funciones de dos variables cuando cambia alguno de sus parmetros. Para estas simulaciones, se sigue el mismo procedimiento que con funciones univariadas, es decir, para simular n valores de un parmetro debemos crear la funcin (incluyendo en las entradas al

122

GEDEM - Versin Preliminar

parmetro), crear los datos (con n conjuntos de salida) y gracar n veces. En algunos casos, para hacer la sintaxis mas sencilla, se crearn en un solo bucle los n conjuntos de datos y los n gracos.

Ejemplo 4.10. Simular el comportamiento de la funcin f (x, y) = acos(xy) , para


a = {0.1, 0.9, 2, 10}.

Paso 1. Crear la funcin con el parmetro a.


function f=ffej10(x,y,a); f=a.^(cos(x.*y));

Paso 2. Crear los datos.


x=[-2:0.1:2];y=x; [X,Y]=meshgrid(x,y); a=[0.1 0.9 2 10]; n=length(a); for i = 1:n Z{i} = ffej10(X,Y,a(i)); end % Conjunto de Salida % Valores del parametro

% n Conjuntos de Llegada

Para guardar las n matrices Z se utilizaron cell-arrays. Debido a que todos los conjuntos de llegada son del mismo tamao, tambin era posible utilizar hipermatrices (Z(:,:,i)).

Paso 3. Gracar la funcin


% Parametros fst=14; % fsej=12; % fw=demi; % fn=Times; % de fuente Tamao de fuente para el titulo Tamao de fuente para ejes Grosor de letra Tipo de letra

for i=1:n; subplot(2,2,i); mesh(X,Y,Z{i}); ts=title([f(x,y) = a^{cos(xy)}, a = ,num2str(a(i))]); xs=xlabel(x);ys=ylabel(y);zs=zlabel(f(x,y)); set(ts,Fontsize,fst,Fontweight,fw,Fontname,fn);

FUNCIONES

123

set([xs ys zs],FontSize,fsej,Fontweight,fw); end


A diferencia de los ejemplos anteriores, en este ejemplo se denieron previamente los Parametros de fuente (tamao, grosor y tipo) con nmeros y cadenas de caracteres. Algunas veces esto permite simplicar la programacin, ya que basta slo con cambiar el valor del parmetro una sola vez para modicar la propiedad de varios objetos. Como resultado obtenemos la Figura 4.15. Se observa que con valores de a cercanos a 1 la funcin oscila en rangos muy pequeos, tendiendo a ser una funcin constante. En la medida en que a se aleja de 1, aumenta el rango de las oscilaciones. La Figura tambin muestra como MATLAB ajusta la escala del eje z en cada subplot, segn el rango de cada conjunto de llegada.
f(x,y) = acos(xy), a = 0.1
10 8 1.15 1.1

f(x,y) = acos(xy), a = 0.9

f(x,y)

6 4 2 0 2 2 0 1 1 0 2 2

f(x,y)

1.05 1 0.95 0.9 2 2 0 1 1 0 2 2

f(x,y) = acos(xy), a = 2
2 10 8

f(x,y) = acos(xy), a = 10

f(x,y)

f(x,y)
2 0 1 0 2 1 2

1.5

6 4 2

0.5 2

0 2 2 0 1 0 2 1 2

Figura 4.15: Simulacin del parmetro a en f (x, y) = acos(xy)

Ejemplo 4.11. Simular el comportamiento de la funcin f (x, y) = x3 ax2 y +


6xy 2 y 3 , para a [6, 6].

Paso 1. Crear la funcin con parmetros. Usamos la funcin ffej11.

124

GEDEM - Versin Preliminar

function f=ffej11(x,y,a); f=x.^3-a*x.^2.*y+6*x.*y.^2-y.^3;

Paso 2. Crear los datos.


x=[-5:0.3:5]; y=x; [X,Y]=meshgrid(x,y); a=[-6:0.5:6]; n=length(a);

Paso 3. Gracar la funcin


for i = 1:n Z(:,:,i) = ffej11(X,Y,a(i)); mesh(X,Y,Z(:,:,i)); ts=title({f(x,y) = x^3-ax^2y+6xy^2-y^3;... [a = ,num2str(a(i))]}); set(ts,Fontsize,12,Fontweight,bold); xs=xlabel(x);ys=ylabel(y);zs=zlabel(f(x,y)); set([xs ys zs],FontSize,12); pause(0.5) end
Como resultado se obtiene una secuencia de grcos que muestran el cambio de la funcin ante el cambio del parmetro a. Algunas de ellas se presentan en la Figura 4.18. En la programacin, se utilizaron hipermatrices para guardar los conjuntos de salida (Z). Adems, utilizando cell-arrays se coloc un ttulo con dos lneas, separadas entre si con ;.

4.5. Anlisis de Funciones econmicas


Generalmente los problemas econmicos formulados matemticamente requieren una solucin. El comportamiento de esta solucin depende del comportamiento de las funciones que componen el problema (funciones econmicas). El objetivo de esta seccin es utilizar la herramienta grca de MATLAB para visualizar algunas funciones econmicas. Un problema analizado en microeconoma es la eleccin de un consumidor entre

FUNCIONES
f(x,y) = x ax y+6xy y a = 6
2000 1000

125
3 2 2 3

f(x,y) = x ax y+6xy y a = 2
1000 500

f(x,y)

0 1000 2000 5 5 0 0 5 5

f(x,y)

0 500 1000 5 5 0 0 5 5

f(x,y) = x3ax2y+6xy2y3 a=2


2000 1000 2000 1000

f(x,y) = x3ax2y+6xy2y3 a=6

f(x,y)

0 1000 2000 5 5 0 0 5 5

f(x,y)

0 1000 2000 5 5 0 0 5 5

Figura 4.16: Simulacin del parmetro a en f (x, y) = x3 ax2 y + 6xy 2 y 3 diferentes canastas de bienes, para lo cualse asume que sus preferencias estn representadas por una funcin de utilidad. Una de ellas es la funcin Cobb-Douglas, que modela el consumo de un agente sobre bienes que son sustitutos imperfectos, de manera que el consumidor preere gastar su presupuesto comprando combinaciones de los bienes que tiene a su alcance, que gastarlo consumiendo slo uno de ellos. Cuando el agente consume dos bienes x e y , la funcin es de la forma U (x, y) = xa y 1a ; donde a (0, 1) representa la ponderacin que da el agente a cada bien. Para hacer la simulacin del parmetro a, seguimos el mismo procedimiento que para cualquier otra funcin: creamos la funcin, y en otro m-file creamos los datos, programamos la simulacin para diferentes valores de a y gracamos.

Ejemplo 4.12. Simular el comportamiento de la funcin Cobb-Douglas ante cambios


en el parmetro a.

Paso 1. Crear la funcin Cobb-Douglas con el parmetro a.


function f=ffej12(x,y,a); f=(x.^a).*(y.^a);

126

GEDEM - Versin Preliminar

Paso 2. Crear los datos. Para representar cantidades de bienes no negativas, x e y


toman valores no negativos.

x=[0:0.5:10];y=x; a=[0.1:0.1:0.9]; [X,Y]=meshgrid(x,y);

Paso 3. Simular el parmetro a y gracar la funcin


for i=1:length(a); Z=ffej12(X,Y,a(i)); mesh(X,Y,Z); xs=xlabel(x);ys=ylabel(y);zs=zlabel(f(x,y)); ts=title([Funcion Cobb-Douglas a = ,num2str(a(i))]); set(ts,Fontsize,12,Fontname,helvetica); set([xs ys zs],FontSize,9,Fontname,helvetica); pause(0.5) end

MATLAB modica el grco en intervalos de 0.5 segundos, a medida que


va cambiando el valor del parmetro a. En la Figura 4.17 se presentan algunas de las simulaciones. Otra funcin utilizada en microeconoma (teora del productor) es la funcin de Elasticidad de Sustitucin Constante (CES, por su sigla en ingls). La produccin en esta funcin depende de dos insumos capital (k) y trabajo (t), y un parmetro . 1 La forma de la funcin es (k + t ) donde < 1. Al crear los datos de la funcin, tenemos en cuenta que el capital y el trabajo no toman valores negativos, y la condicin < 1. Luego, simularemos el parmetro de la funcin, representndolo con la letra p.

Ejemplo 4.13. Simulacin de la Funcin CES Paso 1. Crear la funcin CES con parmetros.
function f=ffej13(k,t,p); f=((k.^p)+(t.^p)).^(1./p);
El parmetro p es una entrada o input de la funcin.

FUNCIONES
CobbDouglas, a = 0.2
10 8 10 8

127
CobbDouglas, a = 0.4

f(x,y)

6 4 2 0 10 10 5 5 0 0

f(x,y)

6 4 2 0 10 10 5 5 0 0

CobbDouglas, a = 0.6
10 8 10 8

CobbDouglas, a = 0.8

f(x,y)

6 4 2 0 10 10 5 5 0 0

f(x,y)

6 4 2 0 10 10 5 5 0 0

Figura 4.17: Funcin Cobb-Douglas

Paso 2. Crear los datos. Le damos valores positivos a los vectores de capital y trabajo. Denimos los valores de entre -15 y 1.

k=[0:1:30];t=k; p=[-15:0.1:1]; [K,T]=meshgrid(k,t);

Paso 3. Simular el parmetro p y gracar la funcin


% Parametros de fuentes tfs=10 fs=9 fw=demi fn=times for i=1:length(p); Z=ffej13(K,T,p(i)); mesh(K,T,Z);

128

GEDEM - Versin Preliminar

xs=xlabel(k);ys=ylabel(t);zs=zlabel(f(k,t)); ts=title([Funcion CES \rho = ,num2str(p(i))]); set(ts,Fontsize,10,Fontname,times); set([xs ys zs],FontSize,8,Fontweight,bold); pause(0.1) end
Como resultado, se tiene una secuencia de grcos que cambian de acurdo a los cambios en el parmetro . Se observa en esta secuencia que la funcin de produccin es de la forma Leontief, o Funcin mnimo cuando el valor de ; cuando 0, la funcin de produccin es Cobb-Douglas; y cuando 1, la funcin de produccin es Lineal. Entonces la CES generaliza diferentes comportamientos de las funciones de produccin al cambiar el valor de su parmetro, modelando bienes complementarios, sustitutos imperfectos y sustitutos perfectos, respectivamente 10 . La simulacin para estos valores lmite de , junto sus curvas de nivel, se muestra en las guras 4.18 y 4.19. En captulos posteriores se utiliza la herramienta grca para representar algunas funciones y algunos resultados numricos. Los grcos que se presentan contienen ttulos, etiquetas de los ejes y otras caractersticas que se explicaron en este captulo. Como estas caractersticas se crean con el mismo procedimiento que se mostr en este captulo, no se colocar explcitamente su programacin. Los captulos, 5, y 6 analizan funciones utilizando clculo (diferencial e integral) y mtodos numricos. Estos mtodos sirven para estudiar funciones que no pueden representarse grcamente, o cuando se requieren clculos precisos en un punto determinado. Esto ser til, ya que algunas funciones econmicas presentan estas caractersticas.

Ejercicios
En los grcos que debe realizar a continuacin recuerde crear para todas las guras un ttulo, nombre para los ejes, lneas segemtadas en las asntotas y caractersticas especiales para cada objeto, diferentes en cada ejercicio.
10

Ver Nicholson (1997, pg. 214).

FUNCIONES
Funcion CES = 100
9 10 8 8 7 6

129

Minimo

f(x,y)

6 4 2 0 10 10 5

y
5 0 0

5 4 3 2 1 0 0 2 4 6 8

x CobbDouglas
9

Funcion CES = 0.01


x 10 15
30

8 7

f(x,y)

10

5 4 0 10 10 5 1 5 0 0 0 0 2 4 6 8 3 2

Figura 4.18: Funcin CES 1. Graque en MATLAB las siguientes funciones denidas en R. Utilice como conjunto de salida intervalos en donde la funcin presente cambios en su comportamiento:

f (x) = |x| 2x 3 si x < 2 g(x) = x 5 2 x 1 3 x x > 1 h(x) = [[x]] = n si n x < n + 1 y 2 2y 2 + 5y y 0.5 2y + 4 0 si z 3 g(z) = 1 si z > 3 f (y) = f (x) = x (x 1)(x + 2) nZ

130
Funcion CES = 1
9 20 15 8 7 6 10 5 0 10 10 5 1 5 0 0 0 0 2

GEDEM - Versin Preliminar

Lineal

f(x,y)

5 4 3 2

x Maximo
9

Funcion CES = 100

10 8

8 7 6

f(x,y)

6 4 2 0 10 10 5

y
5 0 0

5 4 3 2 1 0 0 2 4 6 8

Figura 4.19: Funcin CES 2. Graque en MATLAB las siguientes funciones denidas en R2 . Utilice como conjunto de salida intervalos en donde la funcin presente cambios en su comportamiento:

x+y y g(x, y) = 2 x 1 h(z, w) = max{min{2z, 3w}, {3z, 2w}} f (x, y) = z(m, n) = |m3 n3 | p(x, y) = [[x + y]] = n si n x + y < n + 1 g (h, z)
3. Para la funcin f : R+

nZ

R con f (x) =

ax2 + bx c dx + 5e

0.4

Simule los parmetros a, b, c secuencialmente en R2 ; para el parmetro simulado, asuma valores en el intervalo [3, 3] y para los otros parmetros asuma el valor de 1.

FUNCIONES

131

Simule los parmetros d, e en R3 utilizando mesh; para el parmetro simulado, asuma valores en el intervalo [3, 3] y para los otros parmetros asuma el valor de 1. 4. ?) presenta una versin lineal del modelo de hiperinacin propuesto por ?). Al resolver para los precios pt utilizando expectativas adaptativas, se halla una ecuacin en diferencias que para ser estable (no hiperinacin) requiere que:

+ 1 <1 1 +

(4.1)

donde [0, 1] es la velocidad de ajuste de las expectativas, y representa la relacin entre la tasa de inters y la demanda de dinero ( < 0). Graque la funcin f (, ) =

+ 1 1 +

Graque en R2 los valores de y que generan hiperinacin en el modelo de Cagan. Interprete. 5. La ecuacin (y k) = (xh) representa una parbola en el plano cartesiano, 4a con vrtice en (h, k) y con una distancia a entre el vrtice y el foco. Esta ecuacin se puede reescribir de tal forma que y sea una funcin de x y de los parmetros h, k, a. Para la funcin y(x), realice una simulacin en R3 para cada parmetro, colocando una lnea punteada en la directriz, asumiendo valores para el parmetro simulado en el intervalo [2, 2], y para los otros parmetros de 3 y 1. 6. Imagine el mercado de arroz en alguna ciudad del Tolima. Suponga que este mercado es perfectamente competitivo. La cantidad demandada puede representarse por la siguiente funcin lineal: QD = aP c, donde a, c son parmetros y P es el precio del arroz. La cantidad ofrecida se representa por la funcin lineal QO = b + P d a) Graque, en una misma gura, las funciones de oferta y demanda, asumiendo a = 5, b = 1, c = 4 y d = 2. b) Halle numericamente el equilibrio de mercado c) Realice una simulacin de cada parmetro, para incrementos en sus valores en el intervalo [1, 1]. Qu ocurre con el equilibrioo de mercado en cada simulacin?. Explique brevemente.
2

132

GEDEM - Versin Preliminar

7. La funcin de elasticidad constante recibe este nombre, porque su elasticidad 1 de sustitucin ( = 1 ) depende slo del parmetro . a) Construya la funcin CES de produccin tal que dependa del capital, el trabajo y la elasticidad de sustitucin ( ). b) Por medio de simulaciones numricas, determine los valores lmite de con los que se obtienen las funciones Lineal, Mnimo y Cobb-Douglas. 8. Dos funciones utilizadas con frecuencia en economa 11 son la funcin CRRA (Constant Relative Risk Aversion) y CARA (Constant Absolute Risk Aversion), denidas como:

CRRA : U (ct ) =

1 ct 1 Ln(c ) t 1

> 0, = 1

=1 ec >0

CARA : U (ct ) =

En estas funciones, el Coeciente de Aversin Absoluta al Riesgo est dado por (c ) U (ctt) , y el de Aversin Relativa al Riesgo por UU (ctt)ct . Para cada funcin: U (c ) a) Calcule matemticamente U y U . b) Graque en una sola gura U , U y U c) Simule el comportamiento de U , U y U para diferentes valores de y . 9. Graque la funcin de distribucin y de distribucin acumulada de las siguientes distribuciones de probabilidad12 : a) Univariada Uniforme en el intervalo [a,b] b) Univariada Normal con = [2 1 0 1 2] y varianza = [0.2 0.5 1 2] (simulacin) c) Univariada de Laplace simulando y . d) Bivariada Normal con media 0 y varianza 1
11 12

Monsalve (2005a), Blanchard (1989) Ver ?).

FUNCIONES

133

10. La funcin de produccin de una empresa que tiene como insumos capital (K) y trabajo (L). Si se ha estimado que la empresa tiene una funcin de produccin de la forma F (K, L) = K + L. a) Cmo es esta funcin? b) Cmo son sus curvas de nivel?. c) Graque estas guras en una sola ventana. (Sugerencia: Use el comando subplot) 11. Graque la funcin f (x) = 3x+1 . Sabemos que esta funcin tiene una asntota x2 en x = 2. Dibuje en la misma ventana la asntota con un estilo de lnea punteada. (Sugerencia: Use el comando line). Qu situacin econmica o nanciera podra representar una funcin de este tipo?

134

GEDEM - Versin Preliminar

Captulo 5

Derivacin
En la pasada seccin examinamos cmo evaluar computacionalmente diferentes funciones a partir de un criterio grco, reconociendo distintas propiedades y observando el proceso para llegar a su construccin. No obstante, la necesidad de estudiar ciertas caractersticas de las funciones que involucran mayor precisin, nos lleva a considerar nuevos conceptos que permiten hacer otro tipo de anlisis. En este captulo nos enfocaremos entonces en la derivacin. Especcamente, para tener una aproximacin a la solucin de problemas cuya respuesta analtica es limitada, se ha desarrollado la derivacin numrica. De esta manera, dando un marco conceptual, la derivada representa un cambio innitesimal en la funcin con respecto a las variables de las que depende y la forma ms natural de establecer cul es la aproximacin numrica es mediante la siguiente denicin:

f (x) = l m

f (x + h) f (x) h0 h

(5.1)

Donde f (x) es la derivada de la funcin f . Dado un intervalo I y una funcin f : I , si f tiene una derivada f y f es a su vez diferenciable, la derivada de f es la segunda derivada, es decir, la derivada de la derivada, que se denota por f . Continuando as con el proceso, tenemos la tercera derivada, la cuarta, la quinta, etc.: f (3) , f (4) , f (5) , ..., f (n) , donde f (n) es la derivada n-sima de f , siempre y cuando f sea n veces diferenciable en I . Cualquier derivada ms all de la primera se considera derivada de orden superior y su existencia est sujeta al nmero de veces que pueda ser diferenciada la funcin. Para solucionar computacionalmente problemas que comprendan derivacin, la si135

136

GEDEM - Versin Preliminar

guiente estructura determina cmo se han creado cada uno de los ejemplos contenidos en este captulo, buscando hacer un uso apropiado de cada una de las herramientas disponibles:

Paso 1: Determinar el tipo de problema que se pregunta y crear las funciones


que necesite MATLAB para iniciar el proceso de derivacin, ya sea en un M-le o de cualquier otra forma que reconozca el programa.

Paso 2: Crear los datos pertinentes y unirlos con las funciones y otros parmetros previamente jados en MATLAB para plantear la situacin.

Paso 3: Identicar y llamar el cdigo adecuado para resolver el problema.


En este proceso vale la pena recordar que existen diferentes formas de llegar a la misma solucin y, por lo tanto, hay distintas rutinas que son tiles para alcanzar ese resultado, siendo importante evaluarlas y descartar aquellas menos ecientes en hacerlo. Siguiendo esta estructura, el captulo est dividido en dos secciones: en la primera examinamos con detalle las rutinas computacionales que permiten obtener derivadas de primer orden y los mtodos que las sustentan; y, en la segunda, aquellos comandos tiles para llegar a las derivadas de orden superior de una funcin.

5.1. Derivacin de primer orden


5.1.1.
polyder
La siguiente es la forma de un polinomio:

cn xn + cn1 xn1 + + c2 x2 + c1 x + c0

(5.2)

Donde c es una constante que acompaa la variable x y el subndice indica la posicin en la que se encuentra respecto a la variable. Para derivar un polinomio, MATLAB dispone de la rutina polyder, que requiere como input el vector de coecientes del polinomio a derivar y entrega como resultado el vector de coecientes del polinomio resultado de la derivacin. As, la derivada del polinomio (5.2) es:

[cn n]xn1 + [cn1 (n 1)]xn2 + + [c2 2]x + c1

Ejemplo 5.1. Encontremos la derivada del polinomio g(x) = 5x4 9x3 41x + 32

Nombre del Captulo

137

Paso 1: Escribimos en MATLAB el vector de coecientes del polinomio que nos interesa derivar1
F=[5 -9 0 -41 32]

Paso 2: Ahora, invocamos a la rutina polyder


F1=polyder(P)
El resultado de esta operacin es un vector F1 con los elementos [20 -27 0 -41], que son, en efecto, los coecientes del polinomio resultado del proceso de derivacin 20x3 27x2 41. Cabe resaltar que el vector resultante F1 es de tamao 1 n 1, porque el ltimo coeciente del vector F corresponde a x0 . En otras palabras, el ltimo sumando del polinomio es un escalar y su derivada es siempre cero: MATLAB no muestra entonces su derivada2 .

Mtodo de Diferencia Finita


Como ya hemos mencionado, la denicin matemtica de derivada permite calcular numricamente la derivada de una funcin. Esta forma de hallarla es conocida como Diferencia Finita: sin importar la dimensin en que se encuentre, la idea subyacente consiste en dividir las diferencias de las imgenes entre un nmero sucientemente pequeo. Los distintos algoritmos que utilizan la diferencia nita para el clculo de la derivada varan de acuerdo a la forma como determinan las imgenes (aquellos elementos del codominio) o establecen el valor del espaciamiento (el espacio entre los elementos del dominio) y, quiz uno de los algoritmos ms sencillos para encontrar la derivada de esta forma, consiste en omitir el lmite y utilizar un h sucientemente pequeo en la ecuacin (5.1), es decir,

f (x) =

f (x + h) f (x) + O(h) h

(5.3)

Donde O() es una funcin que prescribe el error entre la derivada y la aproximacin numrica, conocido como Error de Truncamiento. Esta funcin depende, en este caso, de h1 (h 0) y, por esto se considera de orden 1. Mediante la construccin de un polinomio de Taylor de orden 2 y exigiendo que f sea tres veces diferenciable, obtenemos un resultado con una aproximacin ms exacta a la derivada:
Ntese que el coeciente que acompaa a x2 es cero. Por sus caractersticas, polyder slo permite derivar en una sola dimensin, es decir, con respecto a una sola variable.
2 1

138

GEDEM - Versin Preliminar

f (x) =

f (x + h) f (x h) + O(h2 ) 2h

(5.4)

En este caso, el error de truncamiento es de segundo orden - h2 . Muchas de las rutinas utilizadas por MATLAB para encontrar derivadas se basan en el mtodo de diferencia nita por su facilidad de clculo, veamos entonces los comandos ms comunes para la aproximacin de derivadas numricas (Mantilla 2004).

5.1.2.

gradient

El Gradiente de una funcin es un vector que contiene sus primeras derivadas y, de este modo, al evaluar la norma del gradiente, la direccin del vector nos seala si la funcin crece o decrece. As, para cualquier vector de variables x = x1 , x2 , . . . , xn , el gradiente de la funcin f = f (x) que depende de n variables corresponde a:

f=

f (x) f (x) f (x) , ,..., x1 x2 xn

(5.5)

MATLAB obtiene numricamente el gradiente de una funcin hasta cierto nmero


de variables3 mediante el comando gradient, a partir del mtodo de diferencia nita. Este comando calcula entonces las derivadas parciales de una funcin en cualquier punto (x) en el que se desee hacer algn tipo de anlisis. La sintaxis de gradient es: [FX,FY] = gradient(F,HX,HY) donde F es la matriz de imgenes de la funcin a derivar de tamao nn y HX y HY corresponden al espacio entre puntos a lo largo del eje X y al eje Y respectivamente (extendible al nmero de dimensiones en las que se trabaje). El resultado del uso del comando son dos matrices FX y FY que corresponden respectivamente a dF y dF (tambin dx dy extendibles al nmero de dimensiones en las que se trabaje).

Ejemplo 5.2. Calculemos el gradiente de la funcin f (x) = x4 (f :

2)

La derivada de la funcin f (x) = x4 es f (x) = 4x3 . De forma que, grcamente, la funcin a derivar es una parbola y la derivada tiene la forma de una funcin cbica. Veamos qu sucede con la derivada aplicando gradient:

Paso 1: Crear la funcin que nos interesa derivar en un M-le:


3

La cantidad de variables depende de la capacidad de la mquina que haga el proceso.

Nombre del Captulo

139

function f=ej2(x) f=x.^4;

Paso 2: En otro chero determinar los datos de las variables:


x=[-10:1:10]; z=ej2(x);

Paso 3: Calcular el gradiente numrico de la funcin mediante gradient:


f1=gradient(z,1)
Donde el espacio denido entre cada valor de x es HX=1, es decir, el gradiente calculado tiene la misma escala de las imgenes de la funcin. Si HX diere del espacio existente entre elementos del vector x, la escala del gradiente es distinta a aquella de las imgenes de la funcin original y, adems, como aqu la funcin slo tiene una variable, la matriz que contiene las imgenes de la funcin es un vector de tamao 1 n, cuya norma es 113.1592, o sea, la funcin es creciente entre -10 y 10. A partir de los clculos numricos que hemos realizado y los mtodos para gracar del captulo 4, la funcin f (x) = x4 y su derivada estn en la Figura 5.1, donde observamos que la derivada numrica de f (x) s tiene una forma cbica.
800

600

400

200 Y 0 200

400

f(x)=x f(x)=4x3
4 3 2 1 0 X 1 2 3 4 5

600 5

Figura 5.1: Grca de f (x) = x4 y su derivada

Ejemplo 5.3. Calculemos el gradiente de la funcin f (x, y) = x2 + y 2 en

140

GEDEM - Versin Preliminar

Paso 1: Escribir un M-le ej3.m


function f=ej3(x,y); z=x.^2+y.^2;

Paso 2: Crear los datos de la variable x, de la variable y y de la funcin


x=[-10:0.5:10]; y=x; [X,Y]=meshgrid(x,y); Z=ej3(X,Y);

Paso 3: Invocar el comando gradient


[PX,PY]=gradient(Z,1,1)
En este caso, HX y HY son diferentes al espacio ya denido entre cada valor de X e Y y, por ende, el gradiente calculado (PX,PY) no tiene la misma escala de las imgenes de la funcin (Z). A diferencia del Ejemplo 5.2, la funcin tiene ms de una variable, entonces, si n corresponde al nmero de elementos contenidos en x e y , la matriz de imgenes de la funcin es ahora de tamao n n. Para apreciar mejor los resultados del ejercicio, observemos la funcin f (x, y) = x2 + y 2 y su derivada en la Figura 5.2, que es el resultado de gracar las matrices PX y PY en MATLAB .

Figura 5.2: f (x, y) = x2 + y 2 y su gradiente a escala distinta

Nombre del Captulo

141

5.1.3.

diff

A travs del mtodo de diferencia nita, el cdigo diff hace tambin la derivacin numrica de una funcin. Sin embargo, en contraste con gradient, para establecer correctamente la derivada con diff y visualizar el comportamiento de la derivada, al resultado del comando debemos dividirlo por la distancia. De esta manera, para utilizar diff se introduce la funcin a derivar y la distancia entre las coordenadas de la funcin, y el resultado que entrega MATLAB es la aproximacin numrica a la derivada de la funcin. Veamos en el Ejemplo 5.4 cmo se utiliza diff:

Ejemplo 5.4. Calculemos la derivada de la funcin f (x) = x 2

Paso 1: Crear los datos del espacio entre coordenadas y de la variable x


h=0.1 x=[0:h:5];

Paso 2: Invocar el comando di


F1=diff(x.^(5/2))/h
La respuesta F1 es una aproximacin numrica a 5 x 2 : la derivada de la funcin 2 5 2 (La norma del vector F1 es 68, lo que implica que es una funcin creciente). f (x) = x De forma concreta, el resultado de invocar el comando diff lo observamos en la Figura 5.3, que es el resultado de gracar la salida de MATLAB .
60

50

40

f(x) 30

20

10

f(x)=x5/2 f(x)=(5/2)x3/2
0 0 0.5 1 1.5 2 2.5 x 3 3.5 4 4.5 5

Figura 5.3: Derivada de f (x) = x 2 mediante diff

142

GEDEM - Versin Preliminar

Al igual que gradient, la rutina diff es extendible a casos de derivacin con ms variables. En el siguiente ejemplo observamos cmo realizar la derivacin numrica de una funcin compuesta por dos variables.

Ejemplo 5.5. Encontremos la derivada numrica de la funcin f (x, y) = x0.5 y 0.8 Paso 1: Crear la funcin a derivar en un M-le:
function q=ej5(x,y); f=x.^.5.*y.^.8;

Paso 2: En otro chero determinar los datos de las variables:


h=0.5; x=[0:h:10]; y=x; [X,Y]=meshgrid(x,y); Z=ej5(X,Y);

Paso 3: Invocar el comando diff para hallar las derivadas parciales:


ZX=diff(Z,1,2)/h ZY=diff(Z,1,1)/h
En la sintaxis del comando, al especicar diff(Z,1,2) MATLAB encuentra para Z (primer trmino) la primera derivada (el 1 de la mitad) manteniendo ja la segunda variable (derivada parcial respecto a x) y, al especicar diff(Z,1,1), calcula la primera derivada parcial de la funcin respecto a y (mantiene ja la primera variable). El resultado que MATLAB nos proporciona indica que las funciones obtenidas (las derivadas parciales) son crecientes: la norma de las matrices ZX y ZY son mayores a cero, en particular, 125.8730 y 126.5741.

5.1.4.

fjac y fdjac

Una matriz jacobiana hace una generalizacin del gradiente al calcular, simultneamente, las derivadas parciales de varias funciones respecto a diferentes variables, organizndolas en una matriz. Supongamos un conjunto de m ecuaciones con n variables:

Nombre del Captulo

143

y 1 = f1 (x1 , x2 , , xn ) y 2 = f2 (x1 , x2 , , xn ) . . . . . . y m = fm (x1 , x2 , , xn )


La matriz jacobiana J asociada al sistema anterior contiene, en cada una de sus las, el gradiente de las funciones fi para todo i = 1, 2, . . . , m. Es decir,

J =

f1 f2 . . . fm


(5.6)

calcula, por diferencia nita, los elementos de una matriz jacobiana mediante los comandos fjac y fdjac4 . La sintaxis de la rutina fjac es:

MATLAB

J=fjac(f,[i,j],a,P1,P2,...)
Donde f es el nombre del M-le que contiene el sistema a derivar, [i,j] signica que se derivar la funcin j respecto a la variable i5 , el vector a dene el punto donde se va a calcular la derivada y P1,P2,..., etc son parmetros adicionales a la funcin. Aunque el mtodo utilizado por fdjac es anlogo al aplicado por fjac, su sintaxis es distinta: J=fdjac(f,a,P1,P2,...). Al igual que antes, f es el nombre del M-le donde denimos el sistema de funciones, pero a indica el punto donde se evala la derivada del sistema y P1,P2,... son parmetros adicionales aplicables la funcin. Veamos un ejemplo de cmo se usan los comandos fjac y fdjac:

Ejemplo 5.6. Hallemos la matriz jacobiana en el punto (1,1) del siguiente sistema
de ecuaciones:

z1 = x2 + y 2 z2 = x3 + y 3
Estas rutinas pertenecen al toolbox COMPECON Si por ejemplo se deseara calcular la derivada de la segunda ecuacin con respecto a la primer variable el vector debera ser [1,2].
5 4

144

GEDEM - Versin Preliminar

Paso 1: Crear la funcin que contiene el sistema de ecuaciones en un M-le:


function [z1,z2]=ej7a(v); x=v(1); y=v(2); z1=x.^(2)+y.^(2); z2=x.^(3)+y.^(3);

Paso 2: En otro chero invocamos el comando y calculamos la jacobiana en (1,1):


H(1,:)=fjac(ej7a,[1,1],[1;1]); H(2,:)=fjac(ej7a,[1,2],[1;1]); H
Cabe notar que, en este ejemplo, la denicin computacional de las variables es distinta a aquella que hemos venido usando a lo largo del captulo. El vector v, de tamao 12, tiene como primer elemento a la variable x y como segunda componente a y (el tamao est determinado por la cantidad de variables en el ejemplo). Esta notacin simplica sustancialmente el anlisis porque, en el fondo, la matriz jacobiana es la derivada de una matriz respecto a un vector de variables. As, la matriz H est constituida por dos vectores de derivadas respecto a x e y : el primer vector la corresponde al gradiente de la primera ecuacin y el segundo, al gradiente de la segunda ecuacin, ambas derivadas evaluadas en el punto (1,1). Ahora veamos cmo encontrar la matriz jacobiana, en el mismo punto, a partir de fdjac:

Paso 1: Crear la funcin que contiene el sistema de funciones en un M-le:


function [z]=ej7b(v); x=v(1); y=v(2); z1=x.^(2)+y.^(2); z2=x.^(3)+y.^(3); z=[z1;z2];

Paso 2: En otro chero invocamos el comando y calculamos la jacobiana en (1,1):


H=fdjac(ej7b,[1;1])
En este ejemplo observamos que fdjac es una generalizacin de las propiedaddes de fjac: mientras en fjac se requiere especicar qu ecuacin se deriva respecto a

Nombre del Captulo

145

qu variable y el punto de evaluacin, en fdjac slo se necesita denir el punto en que se quiere calcular la jacobiana.

5.1.5.

Aplicacin: Una funcin de Produccin tipo Cobb-Douglas

El anlisis econmico de las empresas llev a muchos a estudiar la forma ms sencilla de abstraer la produccin, de manera que se evitara caer en las complejidades tcnicas propias del proceso productivo. Los economistas han logrado hacer esa abstraccin por medio de la funcin de produccin: una manera matemtica de representar el producto como una variable dependiente de diferentes factores de produccin, visible en la ecuacin (5.7).

q = f (K, L, ...)

(5.7)

Donde q es la cantidad producida por la rma, K es el capital (uso de mquinas), L corresponde a trabajo (cantidad de horas trabajadas) y los puntos suspensivos indican otros insumos utilizados en el proceso productivo. Desde el punto de vista econmico, es interesante observar cmo las rmas eligen los niveles de producto y de uso de cada uno de los factores y, para hacer un simple estudio computacional, utilizaremos una funcin de produccin simplicada de la forma q = f (K, L). No obstante, las empresas no pueden producir innitamente debido a que existe una restriccin de recursos y capacidad que se lo impide. Intuitivamente, un aumento en la cantidad de un factor (por ejemplo, capital), manteniendo constantes los dems factores, debe producir ms producto, sin embargo, esos incrementos disminuyen cada vez la productividad de ese factor. Por ejemplo, si tenemos un restaurante y queremos atender a todos los clientes, podemos contratar un mesero que lo haga. Si contratamos otro mesero sera de gran ayuda para el mesero ya contratado, siempre y cuando las mesas les sean asignadas claramente, de forma que no atiendan dos veces la misma mesa. Pero si se contratan ms meseros que mesas, el ltimo mesero contratado no tendr a quien atender y, por tanto, su aporte a la produccin es prcticamente nulo. Supongamos entonces que una empresa tiene la siguiente funcin de produccin: 1 1 f (K, L) = K 3 L 3 . Veamos grcamente su comportamiento y su forma en la Figura 5.4. All observamos que la funcin tiene rendimientos decrecientes en cada factor, ya sea K o L. La forma ms sencilla para analizar el efecto de un aumento de un factor sobre

146

GEDEM - Versin Preliminar

Q 5

3 f(K,L) 2

0 10 8 6 4 2 L 0 0 4 2 K 6 8 10

Figura 5.4: La funcin de produccin f (K, L) = K 3 L 3 el producto es aislando ese factor de los dems por un instante. La contribucin al producto resultante de agregar una unidad ms de factor se denomina Productividad Marginal (P M g ) y su evaluacin matemtica se hace mediante derivadas parciales, es decir, al estudiar la modicacin de un factor, se dejan constantes todos los dems. Su forma es descrita en la ecuacin (5.8).

P M gK =

q K

P M gL =

q L
1

(5.8)
1

De esta manera, retomando nuestra funcin de produccin f (K, L) = K 3 L 3 , el anlisis de la contribucin de un factor lo hacemos mediante sus derivadas parciales respecto a capital o a trabajo. As, para hallar la derivada parcial invocamos gradient cuando ya hemos creado la funcin:

Paso 1: Crear la funcin de produccin en un M-le:


function q=cobb(k,l,a,b); q=(k.^(a)).*(l.^(b));

Paso 2: Crear los datos pertinentes a la funcin (no negativos) y llamarla:


h=0.2 k=[0:h:10]; l=k; a=1/3; b=a;

Nombre del Captulo

147

[K,L]=meshgrid(k,l); Q=cobb(K,L,a,b);

Paso 3: Invocar el comando gradient:


[PK,PL]=gradient(Q,h,h)
Los resultados de esta operacin son PK y PL, las derivadas parciales de la funcin respecto a K y L respectivamente. Observamos estos resultados en la Figura 5.5, donde tenemos que ambas derivadas son positivas (al incrementar los factores crece el producto), sin embargo, son decrecientes (cada unidad ms de cada factor aumenta el producto en menos que esa proporcin). Por ejemplo, la productividad marginal del capital (la gura de la izquierda) muestra cmo, ante un aumento del capital en algo ms que cero (la parte ms izquierda de la grca), resulta en una gran cantidad de producto (el eje vertical); de otro lado, un incremento muy grande (la parte de ms a la derecha) implica un crecimiento casi nulo del producto (la grca de la funcin se hace cada vez ms cercana a cero).

Figura 5.5: Izquierda: Productividad Marginal del Capital. Derecha: Productividad Marginal del Trabajo.

5.2. Derivacin de orden superior


Como ya hemos explicado, es posible derivar una funcin f : I ms de una vez. A partir de distintos mtodos como polinomios o diferencias nitas, se establecen

148

GEDEM - Versin Preliminar

aproximaciones bastante precisas de las derivadas e, incluso, de las funciones mismas en puntos particulares6 . En esta seccin presentamos los cdigos con los que es posible hacer derivacin de orden superior en MATLAB y cuya utilidad est atada a aplicaciones econmicas y a herramientas de gran utilidad para temas ms avanzados en economa y otras ciencias.

5.2.1.

polyder

Al igual que la derivacin de primer orden de un polinomio, polyder permite continuar derivando varias veces en una sola dimensin. A partir de la sintaxis ya denida del comando, ahora es necesario que el input sea la derivada anterior o, en su defecto, para llegar a la derivada superior hay que invocar el cdigo tantas veces como sea requerido. Veamos el siguiente ejemplo para considerar polyder en el caso de derivadas cuyo orden sea mayor a uno.

Ejemplo 5.7. Hallemos la segunda derivada del polinomio f (x) = 5x4 + 9x3 + 8x2 +
3x + 1. Analticamente, la primera derivada de f (x) es f (x) = 20x3 + 27x2 + 16x + 3 y la segunda es f (x) = 60x2 + 54x + 16. Observemos el resultado mediante el uso de polyder:

Paso 1: Escribimos en MATLAB interesa derivar


P=[5 9 8 3 1]

el vector de coecientes que nos

Paso 2: Ahora, invocamos a la rutina dos veces:


Q=polyder(polyder(P))
El resultado que entrega MATLAB es [60 54 16], que corresponde al resultado que habamos hallado en la solucin analtica. Hay que resaltar que MATLAB cuenta de derecha a izquierda a partir de x0 , es decir, el ltimo nmero en el vector de respuestas es un escalar. La ventaja del uso de polyder radica en la facilidad para hallar, en polinomios muy grandes, derivadas muy altas debido a la precisin numrica de MATLAB y lo tedioso que signica hacer una gran cantidad de derivaciones.

En particular, en este captulo se aborda la aproximacin de funciones por medio de la Expansin de Taylor.

Nombre del Captulo

149

5.2.2.

gradient

Las derivadas de orden superior, en el caso de una sola variable, son fciles de calcular mediante el comando gradient. As, para hallar la segunda derivada con gradient, el nuevo input es el gradiente anteriormente encontrado.

Ejemplo 5.8. Hallemos la segunda derivada de la funcin f (x) = x 3 . Tras hacer


las dos derivaciones correspondientes, la ltima analticamente es: f (x) = 2 x 3 . 9
4

Paso 1: Crear la funcin a derivar en un M-le:


function f=ej7(x); f=x.^(2/3);

Paso 2: En otro chero determinar los datos de las variables:


x=[-10:1:10]; z=ejemseis(x);

Paso 3: Calcular los gradientes numricos de la funcin mediante gradient:


PX2=gradient(gradient(z,1),1)
El resultado de aplicar gradient es evidente en la Figura 5.6, donde observamos la igualdad existente entre el resultado analtico y el resultado numrico. Asimismo, con gradient se obtienen resultados muy precisos para derivadas de orden superior difciles de calcular analticamente, por ejemplo, al aplicar gradient a una funcin multivariada, hallamos la matriz hessiana: una matriz que agrupa las segundas derivadas de una funcin y tiene la forma puntualizada en la ecuacin (5.9).

Hf () = x

2f x1 . . . f xn x1

.. .

f x1 xn . . . 2f xn


(5.9)

La forma ms fcil de hallar la hessiana con gradient para, supongamos, una funcin de dos variables es, tras haber invocado la rutina y haber obtenido los vectores FX y FY que corresponden a las derivadas respecto a x e y respectivamente, se llama al comando dos veces ms, pero esta vez introduciendo cada vez la matriz de imgenes

150
Primera Derivada de f(x)=x
1.8

GEDEM - Versin Preliminar


2/3
6

Segunda Derivada de f(x)=x

2/3

1.6

1.4

3 1.2 2 1 PX2 0.8 0 0.6 1 0.4 0.2 0 10 8 6 4 2 0 x 2 4 6 8 10 PX 1

4 10

0 x

10

Figura 5.6: Las dos primeras derivadas de f (x) = x 3 resultante de la primera derivacin. Veamos entonces el Ejemplo 5.9 para observar el uso de gradient en funciones multivariadas:

Ejemplo 5.9. Hallemos la matriz hessiana de la funcin descrita en el Ejemplo 5.3:


f (x, y) = x2 + y 2 . Analticamente, tras hacer las sucesivas derivaciones, la matriz corresponde a: 2 0 0 2
donde observamos que las derivadas cruzadas son iguales, algo caracterstico de la hessiana.

Paso 1: Crear la funcin a derivar en un M-le:


function f=ej9(x,y); f=x.^2+y.^2;

Paso 2: En otro chero determinamos los datos de las variables:


x=[1:5];y=x; [X,Y]=meshgrid(x,y); Z=ej9(X,Y);

Paso 3: Calcular el gradiente numrico de la funcin mediante gradient:


[PX,PY]=gradient(Z,1,1);

Nombre del Captulo

151

Paso 4: Invocar el comando gradient para hallar los componentes de la matriz hessiana:
[PXX,PXY]=gradient(PX,1,1) [PYX,PYY]=gradient(PY,1,1)
El resultado de MATLAB nos muestra muy claramente que PXY=PYX=0, que no era algo desconocido, no obstante, los resultados de PXX y PYY no son tan concretos como los anteriores. El hecho de que los resultados de las columnas ms exteriores para el caso de PXX y el de las las ms exteriores para el caso de PYY dieran de 2 sucede porque, al ser gradient un mtodo basado en diferencias, los resultados de las esquinas no tienen otro trmino con el cual hacer diferencia y MATLAB automticamente les asigna una aproximacin. Pero la la y la columna del centro son concluyentes: el resultado de la derivacin, en ambos casos, es 2, como observamos en las matrices (5.10). Si generalizamos el resultado para ms de cuatro elementos a, por ejemplo, cien elementos, el resultado es mucho ms fuerte y la mayora de los componentes de las matrices PXX y PYY sern 2.

PXX = 1 1 1 1 1

1.5 1.5 1.5 1.5 1.5

2 2 2 2 2

1.5 1.5 1.5 1.5 1.5

1 1 1 1 1

PYY =

1 1 1 1 1 1.5 1.5 1.5 1.5 1.5 2 2 2 2 2 1.5 1.5 1.5 1.5 1.5 1 1 1 1 1

(5.10)

En el caso de funciones univariadas, para calcular derivadas de ms all de segundo orden, se replica el proceso de encontrar la segunda derivada: se determina la derivada inmediatamente anterior a aquella que deseamos encontrar. Veamos el siguiente ejemplo para establecer numricamente cmo se halla la tercera derivada de una funcin:

Ejemplo 5.10. Calculemos la tercera derivada de la funcin f (x) = x 3 . La primera


derivada de f (x) es f (x) = 10 x 3 , la segunda corresponde a f (x) = 70 x 3 y la tercera 3 9 1 es f (3) (x) = 280 x 3 . Veamos cul es el resultado de la derivacin numrica: 27
7 4

10

Paso 1: Crear la funcin a derivar en un M-le:


function f=ej10(x); f=x.^(10/3);

152

GEDEM - Versin Preliminar

Paso 2: En otro chero determinar los datos de las variables:


x=[-10:10]; z=ej10(x);

Paso 3: Calcular el tercer gradiente numrico de la funcin mediante gradient:


PX3=gradient(gradient(gradient(z,1),1),1)
El resultado descrito por la matriz PX3, cuya norma es positiva e igual a 129.4025 (o sea, la tercera derivada de la funcin es creciente), es la respuesta numrica a invocar tres veces gradient sobre la funcin f (x). El resultado de gracar PX3 lo observamos en la Figura 5.7, donde el resultado analtico y el numrico son ligeramente distintos a causa del error de truncamiento inherente a la aproximacin numrica (O(h2 )).
Tercera Derivada Numerica
10 10

Tercera Derivada Analitica

6 PX3

y 8 6 4 2 0 x 2 4 6 8 10

0 10

0 10

0 x

10

Figura 5.7: La tercera derivada de f (x) = x 3 mediante gradient y directamente

5.2.3.

diff

La rutina diff tambin es til para hallar derivadas de orden superior, no obstante, para determinar la derivada de orden superior para, por ejemplo, una funcin univariada, hay que introducir al comando la derivada inmediatamente anterior (si queremos hallar la cuarta derivada, el input es la tercera derivada y as sucesivamente). El siguiente ejemplo muestra claramente cmo se trabaja con diff en funciones univariadas.

Nombre del Captulo

153
5

Ejemplo 5.11. Calculemos la segunda derivada del Ejemplo 5.4: f (x) = x 2 . Paso 1: Crear la primera derivada de la funcin:
F1=diff(x.^(5/2))/h

Paso 2: Invocar nuevamente el comando:


F2=diff(F1)/h
La salida F2 es la segunda derivada numrica de la funcin x 2 que es una funcin creciente (la norma del vector es 86.0233). Para examinar funciones multivariadas, hay que especicar de qu orden y en qu dimensin es la derivada (o sea, si est derivando respecto a x o a y ). En el Ejemplo 5.12 es evidente cmo es el uso de diff en el caso de ms de una variable.
5

Ejemplo 5.12. Calculemos la segunda derivada de la funcin del Ejemplo 5.9:


f (x, y) = x2 + y 2 .

Paso 1: Llamar la primera derivada invocando el comando diff:


ZX=diff(Z,1,2); ZY=diff(Z,1,1);

Paso 2: A partir de estas derivadas, encontrar las derivadas respecto a cada variable:
ZXX=diff(Z,2,2) ZYY=diff(Z,2,1)

Paso 3: Establecer las derivadas cruzadas:


ZXY=diff(ZX,1,1) ZYX=diff(ZY,1,2)
En este ejemplo apreciamos el uso de los nmeros de acuerdo al orden de la derivada que se siga. En el Paso 2 tomamos Z derivndolo respecto a x dos veces (el valor correspondiente a ZXX) y, despus, hacindolo respecto a y dos veces (el valor de ZXY). De otro lado, en el Paso 3 tenemos las derivadas cruzadas: a partir del Paso 1 obtenemos la derivada de Z respecto a x para luego derivar con y (ZXY) y, el siguiente paso es el caso exactamente inverso (ZYX). Cabe anotar que el primer nmero de la sintaxis est determinando el orden de la derivacin, mientras el segundo establece cul es la variable respecto a la que se deriva, adems, los resultados son los mismos

154

GEDEM - Versin Preliminar

que los del Ejemplo 5.8: ZXY y ZYX son cero, sin embargo, las otras derivadas son ms elocuentes que con gradient: todos los elementos de las matrices ZXX y ZYY son 2. Esto se percibe en la ecuacin (5.11).

ZXX = 2 2 2 2 2

2 2 2 2 2

2 2 2 2 2

2 2 2 2 2

2 2 2 2 2

PYY = 2 2 2 2 2

2 2 2 2 2

2 2 2 2 2

2 2 2 2 2

2 2 2 2 2

(5.11)

5.2.4.

fdhess

Hallar hessianas con gradient o diff puede ser tedioso y, como ya vimos, impreciso cuando se asignan pocos datos al proceso. Existe otro algoritmo que encuentra de manera ms exacta la hessiana: fdhess7 permite hallar en MATLAB la segunda derivada de una funcin calculada en uno o varios puntos. La sintaxis de este comando es H=fdhess(f,x,varargin), donde f corresponde al nombre de la funcin del modo fval = f(x); x es el punto de evaluacin y varargin son argumentos adicionales para f (opcional). El resultado del comando es H, es decir, la segunda derivada en el punto de evaluacin.

Ejemplo 5.13. Obtengamos la segunda derivada de la funcin f (x, y) = x3 3xy 2


en el punto (10,-9) y hagamos su anlisis.

Paso 1: Crear la funcin a derivar en un M-le:


function f=ej11(x,y); f=x.^3-3*x*y^2;

Paso 2: Calcular la segunda derivada de la funcin mediante fdhess:


H=fdhess(ej11,10,-9)

MATLAB
7

muestra un resultado numrico que nos permite analizar la forma de la funcin en el punto (10,-9): al observar la grca de la funcin en la Figura
Esta rutina pertenece al toolbox COMPECON.

Nombre del Captulo

155

5.8 vemos que, en el punto (10,-9), la funcin es creciente y, al cotejarla con la solucin de MATLAB tras la ejecucin de fdhess (60), esta respuesta nos dice algo evidente: la funcin en el punto (10,-9) crece a una tasa creciente y la magnitud del resultado nos da la dimensin de ese crecimiento, es decir, conforme se evale fdhess en un punto donde la pendiente sea muy grande, el resultado del comando es progresivamente mayor.

Figura 5.8: La funcin f (x, y) = x3 3xy 2

Ejemplo 5.14. Observemos cul es la forma de la funcin f (x) = x3 + y 3 en el


punto (0,0)

Paso 1: Crear la funcin a derivar en un M-le:


function f=ej12(x,y); f=x.^3+y.^3;

Paso 2: Calcular la segunda derivada en el punto (0,0) mediante fdhess:


H=fdhess(ej12,0,0)
Tras aplicar fdhess en este ejemplo, vemos que el resultado del clculo es cero. MATLAB conrma lo que grcamente observamos en la Figura 5.9: la funcin x3 + y 3 en (0,0) es plana, por lo que se concluye que all la funcin no es creciente ni decreciente y que su tasa de crecimiento es exactamente igual a cero.

156

GEDEM - Versin Preliminar

Figura 5.9: La funcin f (x) = x3 + y 3

5.2.5. Expansin de Taylor


A diferencia de las funciones, los polinomios son mucho ms manejables desde la perspectiva del clculo operacional y nos permiten un acercamiento ms sencillo al problema que se est tratando. Por eso, es muy comn aproximar funciones hallando sus derivadas superiores y organizndolas por medio de polinomios. Una forma de hacerlo es, para un x cercano a a:

f (x) = f (a)+f (a)(xa)+

f (a) fn f (a) (xa)2 + (xa)3 + (xa)n +E(x, a, n) 2! 3! n! (5.12)

que es llamado desarrollo de la funcin con una Expansin de Taylor. El trmino E(x, a, n) determina el error de la aproximacin a la funcin f (x). Cuando l E(x, a, n) = m n 0 se dice que el desarrollo del polinomio alrededor de a converge a f(x) (Monsalve, 2005).

Ejemplo 5.15. Veamos la funcin f (x) = 5x 3 32 y su aproximacin de grado tres


por polinomio de Taylor alrededor del punto x = 12.

Paso 1: Crear la funcin a derivar en un M-le:


function f=ej13(x) f=5*x.^(2/3)-32;

Nombre del Captulo

157

Paso 2: En otro chero determinar el punto donde se aproxima y los datos pertinentes de la funcin:
xa=[-2:0.1:18]; x=12*ones(size(xa)); X(1,:)=ej13(xa);

Paso 3: Construir las derivadas de la funcin mediante un proceso iterativo:


for i=2:4 X(i,:)=gradient(X(i-1,:)); end

Paso 4: Encontrar el polinomio de Taylor alrededor de 12:


for k=1:4 POL(k,:)=(((X(k,:).*(xa-x).^(k-1)))/factorial(k-1)); end poltaylor=sum(POL,1)
El resultado es una aproximacin de Taylor de grado tres, evidente en la Figura 5.10 junto a la grca de la funcin. La diferencia entre ambas grcas est determinada por un trmino de error que es inversamente proporcional a aumentos en el orden de la aproximacin, es decir, si incrementaramos arbitrariamente el nmero de derivaciones obtendramos una aproximacin ms precisa a la funcin en el punto 12 y su vecindad. De esta forma, la aproximacin es til para acercarse a la funcin solamente en un punto previamente establecido y su vecindad porque, al alejarse de ese punto, los errores crecen y la aproximacin pierde sentido.

5.2.6.

Aplicacin: El Equilibrio en el Modelo de Cournot

Consideremos un mercado compuesto por dos rmas que producen un bien homogneo y que enfrentan una funcin de demanda p = 100 Q donde Q es la cantidad agregada del bien (Q = q1 + q2 , donde q1 es la cantidad producida por la rma 1 y q2 es el producto de la rma 2). Cada una de las rmas i tiene una funcin de 2 qi costos cuadrtica de la forma 2 . Supongamos que las rmas son racionales y desean maximizar benecio. Cul es el equilibrio de esta economa?

158
30

GEDEM - Versin Preliminar


f(x) Aproximacion Punto x

20

10

10

f(x) 20
30

40

50

60

70 2

10

12

14

16

18

Figura 5.10: La funcin f (x) = 5x 3 32 y su aproximacin de grado tres Primero debemos establecer cul es el problema que quiere resolver cada una de las rmas. La empresa i vende una cantidad qi y, dado que acepta el precio que tiene en el mercado, recibe un total de pqi . Como tambin enfrenta costos, el benecio de la rma i es la diferencia entre sus ingresos y sus costos,

= pqi c(qi )

(5.13)

donde es el benecio. En clculo, el valor de la variable que hace que la primera derivada sea cero es un punto crtico de la funcin (lase mximo, mnimo o simplemente un cambio en la forma de la funcin). Si derivamos parcialmente la funcin de benecio de la rma (o sea, la derivada es parcial porque la rma 1 controla la produccin de sus fbricas pero no la cantidad de la rma 2) y lo igualamos a cero, obtenemos un punto crtico de la funcin. No obstante, para saber si este resultado es un mximo o un mnimo debemos recurrir a la segunda derivada: si es positiva, estamos hablando de un mnimo, si es negativa, un mximo. Veamos entonces cul es la funcin de benecio comn para esta economa:
2 qi (5.14) 2 Como el problema es maximizar la ecuacin (5.14), establezcamos la primera y la segunda derivada de la funcin para la rma 1:

= (100 Q)qi

Paso 1: Escribir un M-le cournot.m

Nombre del Captulo

159

function pi=cournot(q1,q2); pi=(q1.*(100-q1-q2))-((q1.^2)/2);

Paso 2: Crear los datos de la variable q1, de la variable q2 y de la funcin


q1=[0:1:100]; q2=q1; [QU,QD]=meshgrid(q1,q2); Z=cournot(QU,QD);

Paso 3: Invocar el comando gradient para las derivadas


[PX,PY]=gradient(Z,1,1); [PXX,PYX]=gradient(PX,1,1) [PXY,PYY]=gradient(PY,1,1);
Como nuestro inters es la derivada parcial de la ecuacin (5.14) respecto a la variable bajo el control de la rma 1 (q1 ), debemos observar cules son los signos de los elementos de PXX para saber si estamos encontrando un mximo o un mnimo. La conclusin es la esperada: cada componente de PXX es negativo, es decir, el punto crtico que hallemos para el problema es un mximo. De otro lado, el resultado de ambas derivadas cruzadas es el mismo y es negativo, por tanto, el bien producido por una de las rmas es sustituto de la otra, resultado que habamos supuesto desde el principio al armar que ambas hacan el mismo producto (en otras palabras, ante cualquier eventualidad con el producto de la rma 1, el consumidor puede desplazar su preferencia hacia el producto de la rma 2, dado que son la mismo tipo de bien). Al igualar PX a cero determinamos cul es la respuesta ptima de la rma 1 ante cambios en la produccin de la 2, entonces la primera derivada de una funcin igualada a cero es la Funcin de Mejor Respuesta de la rma, que ja cunto es ptimo producir ante cualquier estrategia de su competidora. Cada una de las funciones de mejor respuesta de este problema estn descritas en la Figura 5.11, grca que se obtiene de hacer la curva de nivel de la primera derivada en (0,0) con contour (QU,QD,PX,[0 0]). El equilibrio de este modelo est caracterizado por el punto de corte entre ambas funciones de mejor respuesta: esa es la cantidad a producir de cada una de las rmas, evidente en la Figura 5.11 con el punto negro. Como el problema es simtrico (ambas rmas maximizan la misma funcin de benecio), una buena posibilidad de encontrar el equilibrio computacionalmente es suponer de antemano que la cantidad producida

160
100

GEDEM - Versin Preliminar

90

Funcion de mejor respuesta Firma 1

80

70

60

2 50
40

30

q*

20

Funcion de mejor respuesta Firma 2

10

10

20

30

40

50

60

70

80

90

100

q* 1

Figura 5.11: El duopolio de Cournot

de ambas rmas es la misma, por ende, se establece dnde estn los puntos de la curva de nivel de PXX en (0,0), para despus determinar cules de los componentes de los vectores posicin en la matriz de datos iniciales son iguales. Esta forma es la que se desarrolla en el siguiente script para localizar el equilibrio:

[i,j]=find(PX==0); for n=1:length(i); if QU(i(n),j(n))==QU(j(n),i(n)) l=i(n); m=j(n); else 0; end end


As, el equilibrio qi es l=q1 = 26 y m=q2 = 26, o sea, cada una de las rmas produce una cantidad igual a 26 unidades. Este resultado es exactamente el mismo que aquel que se logra si, en vez de analizar todo el problema a partir de la rma 1, trabajramos con la rma 2. La diferencia radica en la variable de control de la rma en cuestin, que sera entonces q2 y, de esa forma, al tomar el gradiente para la primera derivada, aquella matriz que habra que examinar sera la segunda.

Nombre del Captulo

161

5.3. Ejercicios
1. Una empresa tiene unos costos en funcin de la cantidad de la forma c(q) = 5q + 15. Encuentre numricamente los costos marginales de la rma. Cunto es su costo jo? Son estos costos marginales constantes? Si as lo son, Qu tipo de rendimientos presenta esta empresa? 2. Encuentre numricamente la derivada de f (x) = 0.025x3.71 4x mediante diff y graque el resultado en MATLAB . 3. Una empresa tiene la siguiente funcin de produccin: q = K 3 L 3 a) Graque este funcin en MATLAB . b) Derive la funcin respecto al capital y al trabajo con gradient. c) Encuentre todas las segundas derivadas. d) Qu tipo de rendimientos presenta? Qu relacin tienen los coecientes de la funcin con los rendimientos? 4. Tres rmas producen un bien homogneo. La curva de demanda agregada es P (Q) = a q1 q2 q3 , donde qi es la cantidad producida por la rma i (i = 1, 2, 3) y a > 0. Asuma que los costos de cada rma son cero. a) Encuentre y graque en MATLAB cada rma. las funciones de mejor respuesta de
1 2

b) Halle por mtodos numricos el equilibrio de Cournot de esta economa. c) Que sucede si las rmas 1 y 2 se unen? Graque nuevamente y encuentre el equilibrio. 5. En la Figura 5.10 la aproximacin da ciertos saltos alrededor de cero. Podra explicar por qu la funcin tiene este comportamiento? Qu sucede en la aproximacin cuando est alrededor de cero? 6. Es muy comn que las personas compren seguros, de forma que transeran recursos de un estado bueno a un estado malo, cuando realmente los necesiten. No obstante, para que este principio se cumpla, es necesario que el agente que compre el seguro sea averso al riesgo y, para determinar esa aversin al riesgo, se recurre a una medida conocida como Coeciente de Aversin al Riesgo de Arrow-Pratt, que se dene como:

cu (c) u (c)

162

GEDEM - Versin Preliminar En otras palabras, el coeciente de aversin al riesgo depende de las primeras dos derivadas de la utilidad. La siguiente funcin de utilidad es muy utilizada en medicin de la aversin al riesgo y se llama la funcin de Aversin Constante Relativa al Riesgo CRRA por sus siglas en ingls (Constant Relative Risk Aversion): c1 Si > 0, = 1 u(c) = 1 ln c Si = 1 Si = 0.6, determine las dos primeras derivadas numricas de la funcin CRRA, encuentre el coeciente de aversin al riesgo de Arrow-Pratt y graque en MATLAB . Qu puede establecer a partir de las grcas?

7. Haga una programacin que realice una aproximacin de grado seis para la 1 funcin f (x) = x2 4x 3 en el punto x = 9. 8. En la funcin determinada en el Ejemplo 5.13 evale con fdhess los puntos (75,-100) y (-75,100). Qu puede decir respecto a las tasas de crecimiento de la funcin? Comparando los resultados con la Figura 5.8, Qu puede concluir de la forma de la funcin? Es cncava? Es convexa? Tome distintos puntos y determine qu sucede con el valor de fdhess conforme se va acercando a las esquinas y alejando de cero. 9. Las siguientes ecuaciones IS = LM =

1 (c dT + I dr + dG) dy 1c M P dM dW M W mr dr dy

(5.15) (5.16)

1 my
FLL M 2 FL P

representan el equilibrio de los mercados de bienes, monetario y de trabajo en una economa y se llaman IS-LM. IS es la ecuacin (5.15) y representa el equilibrio en el mercado de bienes (producto de la economa igual a demanda de cada sector) y LM, la ecuacin (5.16), es el equilibrio en el mercado monetario (oferta de dinero igual a demanda de dinero), adems, y representa al producto y dy son sus cambios. As, T son los impuestos, G el gasto pblico, r la tasa de inters, M la masa monetaria, W el salario y dT, dG, dr, dM y dW sus respectivos cambios. FL y FLL son la primera y la segunda derivada de la funcin de produccin (F (K, L)) respecto al trabajo. Las variables exgenas, es decir, aquellas cuyo valor se establece por fuera del modelo son dT, dG, dM y dW y las variables endgenas (cuyo valor se determina al cambiar una variable

Nombre del Captulo

163

exgena) son dy y dr. Suponiendo que las variables exgenas no cambian (dT = dM = dW = 0) y que c = 0.4, I = 1.2, my = 1.5, F (K, L) = K 0.5 L0.5 , M = 0.02, P = 0.09 y mr = 0.9, determine la matriz jacobiana alrededor del punto dy = 0.1 y dr = 0.08.

5.4. Apndice
Otra forma de derivar en MATLAB es con el toolbox Symbolic que crea un objeto simblico, es decir, una estructura de datos que almacena una representacin caracterstica del smbolo. El comando syms permite construir variables y expresiones simblicas, de forma que, analticamente, se puedan hacer diferentes operaciones matemticas con ellas. En el caso de las derivadas, la rutina que permite obtenerlas es diff. Veamos entonces cmo se puede derivar con objetos simblicos.

Ejemplo 5.16. Derivemos la funcin f (x, y) = x3 mediante una expresin simblica Paso 1: Denir la expresin simblica
syms x

Paso 2: Introducir la funcin a derivar


f=x^3

Paso 3: Invocar el comando di


diff(f)
El resultado de este proceso es la derivada de f respecto a x, 3*x^2. Cuando queremos hallar la segunda derivada de la funcin, se invoca al mismo comando, pero especicando el grado de la derivacin: diff(f,2). En este caso, el 2 muestra de qu orden es la derivada que MATLAB est calculando. Para encontrar la derivada de una constante tambin debe denirse la constante como una expresin simblica:

Ejemplo 5.17. Derivemos c = 7 mediante una expresin simblica. Paso 1: Denir la expresin simblica:
c=sym(7)

164

GEDEM - Versin Preliminar

Paso 2: Invocar el comando di:


diff(c)
El resultado de este proceso es ans=0. Si se hubiese ejecutado directamente diff(7) la respuesta sera [], porque 7 no es una expresin simblica. Veamos la forma en la que se trabaja el comando cuando buscamos hallar derivadas parciales de expresiones con ms de una variables:

Ejemplo 5.18. Hallemos la derivada parcial de f (x, y, z) = x3 y 5 + yz respecto a y


mediante expresiones simblicas

Paso 1: Denir las expresiones simblicas


syms x y z

Paso 2: Introducir la funcin que queremos derivar


f=x^3*y^5+y*z

Paso 3: Invocar el comando di


diff(f,y)

MATLAB mostrar entonces 5*x^3*y^4+z que es, simplemente, la derivada parcial de f respecto a y . diff tambin permite encontrar la derivada de matrices constituidas por elementos simblicos de la siguiente manera:

Ejemplo 5.19. Hallemos la derivada de la matriz


A= mx 5 m cos(x) x sen(m) 3x + 5m
2

Paso 1: Denir las expresiones simblicas


syms m x

Paso 2: Introducir la matriz que queremos derivar


A=[m*x^(2/5) m*cos(x);-x*sin(m) 3*x+5*m]

Paso 3: Invocar el comando di


diff(A)

Nombre del Captulo

165

El resultado de invocar diff es la derivada de la matriz A respecto a x, determinado en la ecuacin (5.17), tras haber simplicado el resultado. Aqu, el comando ejecut una derivacin elemento a elemento tomando como input la matriz A. Adems cuando, como en este caso, no se especica respecto a cul variable el usuario quiere derivar, automticamente MATLAB lo har con x y, si x no existe en la funcin, el default del programa es derivar con la variable ms cercana a x entre las presentes en la funcin.

2 m 5 3 x5

m sen(x) 3


(5.17)

sen(m)

De otro lado, tambin es posible hacer Expansiones de Taylor analticamente con el comando taylor. La sintaxis de esta rutina es, en primera instancia, denir la expresin simblica, para luego invocar el cdigo con la funcin a aproximar, el orden y el punto alrededor del que se hace la aproximacin. Veamos el siguiente ejemplo para observar el uso de taylor:

Ejemplo 5.20. Aproximemos la funcin f (x) = x 5 7x alrededor de 6 mediante


una Expansin de Taylor de tercer orden.

Paso 1: Denir la expresin simblica


syms x

Paso 2: Invocar el comando, llamar la funcin y determinar el orden y el punto de aproximacin:


F1=taylor((x^(3/5)-7*x),3,6)
1 La respuesta es F1, es decir, 6 5 42 + 1/10 63/5 7 (x 6) 300 6 5 (x 6)2 , que es la Expansin de Taylor de tercer orden alrededor de 6 para f (x).
3 3

166

GEDEM - Versin Preliminar

Captulo 6

Integracin
Lida Quintero, Diego Corredor

Introduccin
En matemticas observamos cmo a cada operacin le corresponde una inversa. As, la suma tiene la resta, la multiplicacin la divisin, y la derivacin, la integracin. En el capitulo anterior vimos la derivacin y ahora nos corresponde exponer su inversa, la cual tiene dos interpretaciones: La integracin como un proceso para determinar la funcin cuando se conoce su derivada, lo que equivale formalmente a:

f (x)dx = f (x)

Y por otro lado, como herramienta para determinar reas de regiones cuyos lmites no son rectas. En economa la integracin es til para, determinar el impacto de un proyecto sobre el bienestar a partir de los excedentes del consumidor y productor; hallar una funcin de Costo Variable cuando conocemos la de Costo Marginal; evaluar el ingreso total como el rea bajo la curva del ingreso marginal y como herramienta para solucionar ecuaciones diferenciales que representen la dinmica de sistemas econmicos, entre otras aplicaciones. 167

168

GEDEM - Versin Preliminar


Directos Algebraico Indenida (Antiderivada) Sustitucin Partes
polyint

Mtodos de solucin Computacional1

Syms int Integracin Algebraicos (evaluados) Directos Sustitucin Partes Denida Mtodos (rea bajo la curva) de solucin Regla del Trapecio Regla de Simpson Numricos (computacional)
trapz

quad

quad8

Cuadratura Gaussiana
quadl

Para hallar integrales existen varios mtodos: los analticos o algebricos como son los de sustitucin y por partes, y los numricos como regla del Trapecio y regla de Simpson. Sabemos que los mtodos tiles computacionalmente son los numricos, por tanto, en este captulo estudiaremos los principales mtodos numricos de integracin que MATLAB utiliza y que desde luego nos sirven slo para la integracin denida. En cuanto a la indenida, veremos en la primera seccin la integracin por regla del exponente y otro mtodo en el apndice de este captulo. En la segunda seccin introducimos ya un mtodo numrico: la Regla de Trapecio; en la tercera abordaremos la regla de Simpson; y por ltimo, el clculo de integrales dobles.

6.1. Integracin por Regla del Exponente


Es uno de los procedimientos directos de integracin indenida algebraica ms simples, y es aplicable nicamente a expresiones cuyo exponente es constante2 :

xn dx =
1 2

xn+1 +C n+1

Apndice de este captulo Excepto cuando n = 1.

INTEGRACIN

169

Con el comando polyint, MATLAB descompone el polinomio a integrar en varios monomios y aplica a cada uno esta regla. Sin embargo este procedimiento presenta la restriccin de ser aplicable nicamente a polinomios de exponentes naturales (N). Su sintaxis es:

L=polyint(p,k)
Donde p es el vector la con los coecientes del polinomio a integrar y k el valor de la constante de integracin3 . Y como salida obtenemos el vector la L con los coecientes del polinomio integrado.

Ejemplo 6.1. Vamos a calcular la integral de f (x) = x4 8x2 + 3x, es decir, vamos
a calcular:

(x4 8x2 + 3x)dx

Paso 1. Introducimos los coecientes del polinomio como vector


p=[1 0 -8 3 0] % Vector entrada

Paso 2. Utilizamos el comando polyint


in=polyint(p) % Sintaxis
Y obtenemos in = 0.2 0 -2.6667 1.5 0 0 Basados en este resultado, sabemos que:

(x4 8x2 + 3x)dx = 0.2x5 2.6667x3 + 1.5x2

Ejemplo 6.2. Vamos a calcular los costos variables de una empresa cuyos costos
marginales estn dados por la siguiente funcin:

CM g(q) =
3

q3 + 2q + 5 3

Para hacerlo debemos hallar ( q3 + 2q + 5)dq asumiendo k = 0 ya que estamos calculando los costos variables y no los totales.
3

Si se omite,

MATLAB

asume k=0.

170

GEDEM - Versin Preliminar

Paso 1. p=[1/3 0 2 5]; % Costo Marginal Paso 2. CV=polyint(p) % Sintaxis con k=0
Obtenemos: CV =

0.0833 0 1 5 0

Hemos hallado la funcin de costos variables CV (q) = 0.0833q 4 + q 2 + 5q por medio de una antiderivada, es decir, integrando la funcin de costo marginal correspondiente.

6.2. Regla del Trapecio


La Regla del Trapecio es considerada como un mtodo de aproximacin lineal porque utiliza lneas rectas para aproximarse a una funcin dada f (x), lo que permite calcular b 4 a f (x)dx, de la forma como se muestra en la Figura 6.1.
Regla del Trapecio

y0=f(x0) yn

yn1

y a=x0 x1 x2 . . . xn=b

Figura 6.1: Regla del Trapecio En el intervalo [a, b] hay subdivisiones (nodos) de amplitud x, en donde se traza una recta entre las imgenes consecutivas, formando un trapecio. De esta manera, el
Esta notacin no es la misma que utilizamos en los captulos anteriores, en los que x0 , x1 , . . . , xn eran variables. Aqu los utilizamos para representar valores numricos de la variable x, siguiendo a Draper (1979).
4

INTEGRACIN rea del primer trapecio est dada por:

171

1 (y0 + y1 )x 2 El rea total de los n trapecios, es decir el rea bajo la curva es:
b

f (x)dx
a

1 (y0 + yn ) + 2

n1

yi
i=1

que es conocida como la regla del trapecio para la integracin aproximada.

MATLAB aplica este mtodo por medio del comando trapz. Para utilizarlo es
necesario denir un vector x que determina el intervalo de integracin [a, b] y la distancia entre los nodos (x) 5 . Adems es necesario denir la funcin a integrar f (x)6 y las imgenes y de la funcin. As, la sintaxis completa sera:

h=m % h representa a x, m es un numero x=[a:h:b]; % Intervalo [a,b] y distancia entre nodos h y=f(x); % Funcin a integrar f, imagenes y in=trapz(y)*h % Regla trapezoide
Por otro lado, el comando cumtrapz calcula el rea acumulada hasta cada nodo, utilizando la regla del trapecio, con el mismo input de trapz. Esta funcin resulta muy til para calcular probabilidades en estadstica hallando el rea bajo la curva de la funcin de densidad acumulada.

Ejemplo 6.3. Vamos a calcular


7 2

x4 (49 x2 )1/2 dx

Paso 1. Creamos el vector x en el intervalo de integracin [2, 7], con h=0.1.


h=0.1 x=[2:h:7];

Paso 2. Denimos el vector imagen que corresponde a la funcin que vamos a integrar

y=(x.^4).*(49-x.^2).^(1/2);
5 6

MATLAB

tiene predeterminado x = 1 (h=1). con inline o en un M-file

172

GEDEM - Versin Preliminar

Paso 3. Utilizamos el comando trapz para hallar el rea bajo la funcin y:


in=trapz(y)*h
Utilizando h=0.1, el rea bajo la curva de x4 (49 x2 )1/2 es igual a 11447.90. Entre ms pequeo sea el valor de x (h), mayor ser el nmero de nodos y por lo tanto el resultado ser ms exacto. Es as como con un h=0.01 el rea es igual a 11504.92 y con h=0.000001 el rea es igual a 11506.69.

Ejemplo 6.4. Hallar el excedente del consumidor en el mercado competitivo de un


producto donde p = 4 y cuya funcin inversa de demanda est implcitamente dada por: p(q 2 + 4q + 3) = 192
Ejemplo 7.4 11 10 9 8 7 6 Excedente del Consumidor

p
5 4 3 2 1 0 0 1 2 3 4 5 q 6 7 8 9 10 11 (q*,p*)

Figura 6.2: Excedente del Consumidor Dado que p = 4 y q = 5 debemos hallar:


5 0

q2

192 dq (4 5) + 4q + 3

Paso 1. Creamos el vector q en el intervalo de integracin


q=[0:5];

Paso 2. Denimos el vector imagen (funcin inversa de demanda)


p=(192)./(q.^2+4.*q+3);

INTEGRACIN

173

Paso 3. Calculamos el excedente del consumidor hallando el rea bajo la curva en


el intervalo y restando el rea por debajo del precio de equilibrio, como lo podemos ver en la Figura 6.2. xco=[trapz(p)]-20 % 20=54 Utilizando h=1, el excedente del consumidor es igual a 64.2857, con h=0.01 el excedente es igual a 57,85 y con h=0.000001 el rea es igual a 57.8493. Otra forma de calcular integrales en MATLAB haciendo uso de la Regla del Trapecio es por medio del comando qnwtrap que hace parte del Compecon Toolbox. Este comando calcula un vector x que contiene los elementos (x0 , x1 , . . . , xn1 , xn ) asociados a los nodos (ver Figura 6.1) y su vector de pesos o ponderaciones7 w. Para calcular la integral de la funcin f (x) en [a, b], obtenemos las imgenes de cada uno de los nodos y las multiplicamos por un vector de ponderaciones. La sintaxis del comando es:

[x,w]=qnwtrap(n,a,b)
Donde n es el nmero de nodos a,b representa el lmite de los intervalos, x es el vector de abscisas y w es un vector de ponderaciones.

Ejemplo 6.5. Para observar las diferencias entre trapz y qnwtrap, solucionaremos
la integral del Ejemplo 6.3 con 51 nodos.

Paso 1. Sintaxis del comando.


[x,w]=qnwtrap(51,2,7);

Paso 2. Vector imagen:


y=(x.^4). *(49-x.^2).^(1/2);

Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderaciones w por el vector y: in=w*y El rea bajo la curva es 11447.90 que es el mismo resultado alcanzado con el comando trapz con h=0.1. As podemos ver como, un aumento del nmero de nodos en qnwtrap es equivalente a un h cada vez mas pequeo en el comando trapz.
En la Regla del Trapecio, la ponderacin o peso del rea del primer y ltimo sub-intervalo ((x0 , x1 ) y (xn1 , xn )) es x y es x para los dems. 2
7

174

GEDEM - Versin Preliminar

6.3. Regla de Simpson


La Regla de Simpson, conocida tambin como cuadrtica o parablica, hace por lo general una mejor aproximacin que la regla del trapecio8 , porque logra una aproximacin a la funcin dada por medio de arcos parablicos de eje vertical9 , que pasan por tres imgenes equidistantes (separadas entre s por h).
Regla de Simpson

y1 y0

y2

yn2

yn yn1

y a=x0 x1 x2 . . . xn2 xn1 xn=b

Figura 6.3: Regla de Simpson El rea de la primera parbola sera:

x (y0 + 4y1 + y2 ) 3 La suma de todas las reas del intervalo [a, b], constituye la integral denida de la funcin es decir:
b

f (x)dx
a

x y0 + 4y1 + 2y2 + . . . + 2yn2 + 4yn1 + yn 3

que es la regla de Simpson para la integracin aproximada10 .


Sin embargo, la regla del trapecio resulta ms precisa en casos en los que el integrando presenta discontinuidad en la primera derivada, lo cual puede ocurrir en aplicaciones econmicas con soluciones de esquina. 9 Ver Monsalve (2005a) 10 Esta notacin sigue a Draper (1979). Para una revisin ms profunda ver Leithold (1979).
8

INTEGRACIN

175

Este mtodo de integracin es calculado por MATLAB a travs del comando quad. Su input son los lmites [a, b] y la funcin a integrar f (x), ya sea como objeto inline, expresin o chero como lo vimos en el captulo 4; de aqu en adelante utilizaremos la primera: y=inline(f(x)) in=quad(y,a,b)

Ejemplo 6.6. Determinar el rea bajo la curva, de


1 0

1 1+x2

es decir, calcular:

dx 1 + x2

Paso 1. Debemos crear la funcin inline:


y=inline(1./(1+x.^2).^(1/2));

Paso 2. Con el comando quad hallamos el resultado de la integral planteada:


in=quad(y,0,1)
El rea bajo la curva formada desde cero hasta uno de la funcin es: in = 0.8814.

Ejemplo 6.7. Hallar el excedente del productor (Figura 6.4) en un mercado donde
el precio p = 7 y la oferta del producto est dada por:

p=

q2 q+1

Dado que p = 7 y q = 7.8875 debemos hallar:


7.8875 0

q2 dq (q + 1)

Paso 1. Debemos crear la funcin, en este caso lo haremos como expresin, directamente en la sintaxis de quad: xpr=quad((q.^2)./(q+1),0,7.8875) Entonces el excedente del productor es: xpr = 25.4035 Otra forma de calcular integrales en MATLAB haciendo uso de la Regla de Simpson, es por medio del comando qnwsimp, que hace parte del Compecon Toolbox. Su sintaxis es similar a la del comando qnwtrap con los mismos inputs y obteniendo resultados anlogos.

176
Ejemplo 7.4

GEDEM - Versin Preliminar

12

10

p
6 Excedente del Productor 4 2 0 0 2 4 6 q 8 10 12

Figura 6.4: Excedente del Productor

Ejemplo 6.8. Para observar las diferencias entre quad y qnwsimp, solucionaremos
la integral del Ejemplo 6.6 con 50 nodos.

Paso 1. Utilizamos la sintaxis del comando:


[x,w]=qnwsimp(50,0,1);

Paso 2. Creamos el vector imagen:


y=(1./(1+x.^2).^(1/2))

Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderaciones w por el vector y: in=w*y Obtenemos: in= 0.8814

6.4. Integrales Dobles


Son las inversas de la diferenciacin parcial, por tanto se utilizan cuando tenemos funciones de dos variables (en tres dimensiones). As, lo que se evala en este caso es el volumen localizado bajo la supercie de la funcin (si sta es positiva), por encima de la regin del plano xy (ver Figura 6.5).

INTEGRACIN

177

d c a b

Figura 6.5: Integracin Doble Para evaluar una integral doble, primero se integra con respecto a una variable (considerando la otra constante) y el resultado se integra luego con respecto a la otra variable11 .
b a c d

f (x, y)dydx
Es importante observar que el proceso se realiza de adentro hacia afuera; as, en la integral anterior primero se integra respecto a la variable y en el intervalo [c,d], y el resultado se integra respecto a x en el intervalo [a,b]. Para realizar esta operacin, MATLAB utiliza el comando dblquad, el cual requiere como inputs f (x, y) y los intervalos de integracin para cada variable. De acuerdo con la frmula anterior, tenemos que a x b y c y d. La sintaxis del comando dblquad es: 12

ind=dblquad(f(x,y),a,b,c,d)
Ver (Monsalve 2005b). La funcin puede ser denida como explicamos para el comando quad, es decir como expresin, objeto inline o M-file.
12 11

178

GEDEM - Versin Preliminar

Ejemplo 6.9. Evaluar:


3 1 0 2

(x + y)dxdy
Creamos la funcin y ejecutamos el comando dblquad, y sus respectivos intervalos13 :

ind=dblquad(x+y,0,2,1,3)
Y obtenemos:

ind = 12
Es decir, 12 unidades cbicas ya que corresponde al volmen existente en los intervalos dados.

Ejemplo 6.10. Evaluar:


3 2 5 7

x3 + 2xy dydx

Creamos la funcin, utilizando a la vez el comando dblquad, y sus respectivos intervalos:

ind=dblquad(x.^3+2.*x.*y,-2,3,5,7)
Obteniendo como respuesta:

ind = 92.5 unidades cbicas.


Ya hemos visto en este captulo los mtodos que tiene MATLAB para integrar, y con l concluimos la parte correspondiente a Clculo del libro. Pero las integrales son mucho ms de lo que hasta aqu conocemos, pues ellas tambin son utilizadas para evaluar funciones en diferentes contextos como en optimizacin, tambin en los mtodos de solucin de ecuaciones diferenciales. De estos y otros temas, nos ocuparemos en la siguiente parte del libro.

Ejercicios
1 Un mercado de competencia perfecta tiene una funcin inversa de demanda dada
por p = 10 2q y oferta p = 3 q + 1 2
13

Teniendo en cuenta que a,b son los lmites del intervalo de x; c,d los de y

INTEGRACIN a. Encuentre Precio y Cantidad de Equilibrio14 b. Encuentre Excedente del Consumidor y del Productor, utilizando:

179

Frmulas de rea triangular. Mtodo trapz y qnwtrap Mtodo quad y qnwsimp


c. Calcule con los mismos mtodos, los nuevos excedentes si se coloca un impuesto al producto de este mercado, que hace aumentar el precio a 6.

2 Calcule por medio de trapz, quad, qnwtrap, qnwsimp:


0 2 1 x ln xdx 0 3 2 2 t / 4+t /2 x /8 xe /(1 +

x2 )
11 2 p1 p

3 La oferta de un mercado est dada por QO = 10 +


QD = 80 p3

y la demanda por

a. Determine los Excedentes del Consumidor y del Productor por los mtodos qnwtrapz y qnwsimp, para hacerlo es necesario determinar el precio y la cantidad de equilibrio. b. Si un impuesto aumenta el precio a 13, calcule la prdida irrecuperable de eciencia.

4 El costo marginal de una empresa de Plsticos CM g como funcin de los metros


producidos x, esta dado por CM g(y) = 11.64 0.5x, si sabemos que el costo jo por metro es de 16.3 halle el Costo Total y el Costo Medio.

5 La propensin marginal a consumir en cierta economa cerrada, esta dada por


C(Y ) = 2005.9876+1.2(Y 1.7 ), donde Y representa el ingreso. Determine la funcin de consumo de esta economa.

APENDICE
Adems de los mtodos numricos para hallar integrales denidas, existen mtodos algebraicos para hallar integrales indenidas como se observa en el diagrama que se
14

Podemos utilizar rref del Captulo 2, por tratarse de ecuaciones lineales.

180

GEDEM - Versin Preliminar

presenta en este captulo. Debido a la naturaleza de este ltimo tipo de problemas, es necesario trabajar con expresiones simblicas. Para ello, como se explic en el captulo anterior, MATLAB dispone de un Toolbox que trabaja con este tipo de operaciones, llamado Symbolic Toolbox. Con el n de explicar el funcionamiento de esta herramienta encontremos:

x4 (49 x2 )1/2 dx
Primero creamos las variables simblicas y denimos la forma funcional:

syms x f=(x^4)*(49-x^2)^(1/2)
Ahora utilizamos el comando int para calcular la integral indenida:

int(f)
La integral indenida de la funcin es:

ans=(-1/6*x^3)*(49-x^2)^(3/2)-49/8*x*(49-x^2)^(3/2)... +2401/16*x*(49-x^2)^(1/2)+117649/16*asin(1/7*x)
Para calcular esta integral en el intervalo [2, 7] debemos denir las variables simblicas y la funcin como en el ejemplo anterior, y luego ejecutar int(f,2,7) La integral denida en el intervalo [2, 7] es:

ans = 117649/32*pi+7467/8*5^(1/2)-117649/16*asin(2/7)
Y para simplicar podemos utilizar el comando eval as:

eval(ans)
cuyo resultado es

ans = 1.1507e+004
A partir de estos mtodos de integracin se puede realizar el clculo de probabilidades. Sin embargo, esto tambin se puede realizar utilizando Statistical Toolbox, para lo que recomendamos estudiar los manuales disponibles en la Web.

Parte III

OPTIMIZACIN Y DINMICA

181

Captulo 7

Concavidad y Convexidad
Norma Gmez, Norman Maldonado
Generalmente en economa matemtica se trabajan problemas de tipo esttico y de tipo dinmico. Los problemas estticos implican certidumbre (determinsticos), mientras que los dinmicos pueden ser de certidumbre o de incertidumbre (estocsticos). En cada problema existen funciones y algoritmos de optimizacin. Por ejemplo, en un problema de tipo esttico y determinstico existen funciones que pueden ser cncavas, convexas, cuasicncavas y cuasiconvexas1 , y algoritmos de optimizacin como la programacin lineal, el teorema de Lagrange y el teorema de Kuhn-Tucker. Otro ejemplo es un problema de tipo dinmico y determinstico, en donde existen funciones como las ecuaciones diferenciales y en diferencias, y algoritmos de optimizacin como el clculo de variaciones y la teora del control ptimo. Este captulo tiene como objetivo analizar las propiedades de las funciones utilizadas en problemas de optimizacin esttica. Especcamente, vamos a abordar el anlisis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una funcin a partir de herramientas computacionales. El captulo 8 presentar el uso de estas herramientas para el desarrollo de algoritmos de optimizacin esttica,y el captulo ?? analiza las funciones utilizadas en problemas determinsticos dinmicos, es decir, las ecuaciones diferenciales y las ecuaciones en diferencias. Tanto los algoritmos de optimizacin dinmica en problemas determinsticos como las funciones y los algoritmos de optimizacin en problemas estocsticos
Existen otros tipos de funciones. Se utiliza esta clasicacin por su utilidad para ubicar mximos y mnimos.
1

183

184 no son nuestro objeto de anlisis2 .

GEDEM - Versin Preliminar

En la primera seccin se exponen las deniciones de funcin cncava, convexa, cuasicncava y cuasiconvexa, sus criterios de clasicacin y los mtodos computacionales para realizar esta clasicacin. En la segunda se utilizan estos conceptos y criterios para estudiar funciones univariadas. En la tercera se extiende el anlisis a funciones con dos variables y nalmente en la ltima seccin se analizan funciones multivariadas. En cada seccin se explicarn las herramientas de las que dispone MATLAB para analizar una funcin por diferentes mtodos, y se darn algunos ejemplos. Al nal del captulo se plantean algunos ejercicios que servirn al estudiante para desarrollar agilidad en el anlisis de funciones a partir de mtodos numricos y en la aplicacin de este anlisis para la solucin de problemas de optimizacin esttica en economa.

7.1. Conceptos
Las deniciones que se presentan en esta seccin son tomadas de Monsalve (2004), mientras que los criterios de clasicacin son tomados de Mora (2001).

7.1.1. Deniciones
Concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una funcin. Dados una funcin f (x) = f (x1 , x2 , ..., xn ) denida en un conjunto convexo S Rn , dos puntos P1 , P2 S , y un parmetro [0, 1], se tienen los siguientes tipos de funciones segn su forma: Cncava: Convexa:

f (P1 + (1 )P2 ) f (P1 ) + (1 )f (P2 ) f (P1 + (1 )P2 ) f (P1 ) + (1 )f (P2 )

(7.1a) (7.1b) (7.1c) (7.1d)

Cuasicncava: f (P1 + (1 )P2 ) M in{f (P1 ), f (P2 )} Cuasiconvexa: f (P1 + (1 )P2 ) M ax{f (P1 ), f (P2 )}

Adems, se dice que la funcin es estricta si estas desigualdades son estrictas y se satisfacen para P1 = P2 y (0, 1). Matriz Hessiana
2

Ver ?), Fackler (2003) y Judd (1998).

CONCAVIDAD Y CONVEXIDAD

185

Hf (x) =

fx1 x1 fx2 x1 . . . fxn x1

fx1 x2 fx2 x2 . . . fxn x2

. . . fx1 xn . . . fx2 xn . .. . . . . . . fxn xn


(7.2)

Matriz Hessiana Orlada

Hf (x) =

0 fx1 fx2 . . . fxn

fx1 fx1 x1 fx2 x1 . . . fxn x1

fx2 fx1 x2 fx2 x2 . . . fxn x2

. . . fxn . . . fx1 xn . . . fx2 xn . .. . . . . . . fxn xn

(7.3)

Curvas de Nivel y Conjuntos Contorno Sea f (x) una funcin denida en un conjunto convexo S de Rn . Para cada nmero real se dene una curva de nivel CN por la relacin:

f (x) =

(7.4)

Adems, para cada nmero real se dene el Conjunto Contorno Superior CS por la relacin:

CS = {x S : f (x) }

(7.5)

Similarmente, para cada nmero real se dene el Conjunto Contorno Inferior CI por la relacin:

CI = {x S : f (x) }

(7.6)

7.1.2.

Criterios de clasicacin

Sean S un conjunto convexo abierto y no vaco, f : S R doblemente diferenciable. Entonces se tiene que:

Proposicin 7.1. La funcin f es cncava (estrictamente cncava) si f es convexa


(estrictamente convexa).

186

GEDEM - Versin Preliminar

Proposicin 7.2. La funcin f es cuasicncava (estrictamente cuasicncava) si f


es cuasiconvexa (estrictamente cuasiconvexa).

Proposicin 7.3. Si f es cncava (convexa), entonces f es cuasicncava (cuasiconvexa).

Proposicin 7.4 (Funcin Cncava). La funcin f es cncava (estrictamente cncava) si y solamente si la matriz hessiana Hf es semidenida negativa (denida negativa) en todo punto x de S .

Proposicin 7.5 (Funcin Convexa). La funcin f es convexa (estrictamente convexa) si y solamente si la matriz hessiana Hf es semidenida positiva (denida positiva) en todo punto x de S .

Proposicin 7.6 (Funcin Cuasicncava - H ). Una condicin suciente para que f (x) sea cuasicncava es que (1)k Dk (x) 0 para todo k = 1, . . . , n y todo x S , donde Dk es el menor principal dominante de orden k de la matriz Hessiana Orlada H.

Proposicin 7.7 (Funcin Cuasicncava - Conjuntos Contorno). La funcin f (x)


es cuasicncava si el Conjunto Contorno Superior CS = {x S : f (x) } es convexo para todo nmero .

Proposicin 7.8 (Funcin Cuasiconvexa - H ). Una condicin suciente para que f (x) sea cuasicncava es que Dk (x) 0 para todo k = 1, . . . , n y todo x S , donde Dk es el menor principal dominante de orden k de la matriz Hessiana Orlada H .

Proposicin 7.9 (Funcin Cuasiconvexa - Conjuntos Contorno). La funcin f (x) es


cuasiconvexa si el Conjunto Contorno Inferior CI = {x S : f (x) } es convexo para todo nmero .

7.1.3. Mtodos
En funciones continuamente diferenciables, la segunda derivada permite analizar la concavidad y convexidad de una funcin, y una combinacin de la primera y la segunda derivada permite determinar la cuasiconcavidad y cuasiconvexidad de una funcin. Para analizar la forma de una funcin en MATLAB vamos a utilizar cuatro mtodos diferentes3 :
3

Todos los mtodos llegan a la misma conclusin

CONCAVIDAD Y CONVEXIDAD

187

1. Grco. Consiste en visualizar grcamente la funcin y las deniciones 7.1, y dependiendo de qu desigualdades se satisfacen, se concluye sobre la forma de la funcin (cncava, convexa, cuasicncava o cuasiconvexa). Este mtodo presenta la limitacin de ser til solo para funciones de una o dos variables, ya que se stas se pueden visualizar en R2 y en R3 , respectivamente. 2. Matriz Hessiana. Consiste en realizar una aproximacin numrica del valor de la matriz hessiana de una funcin en un punto determinado, repetir el mismo proceso para un conjunto nito de puntos, y a partir del anlisis apropiado de estos valores en cada punto concluir sobre la concavidad o convexidad de una funcin en el conjunto nito de puntos. Este mtodo aplica para funciones multivariadas y su nica limitacin se presenta cuando se trabaja con funciones no muy bien comportadas (por ejemplo, funciones discontinuas o con esquinas), en las que la aproximacin numrica de la Hessiana puede producir grandes errores de aproximacin. 3. Conjuntos Contorno. Consiste en gracar las curvas de nivel de la funcin y a partir de stas determinar la convexidad del conjunto contorno superior o inferior4 , y as concluir sobre la cuasiconcavidad y cuasiconvexidad de la funcin. Este mtodo tiene una limitacin similar a la del mtodo grco. Las curvas de nivel de una funcin de una variable se visualizan en R1 , las de una funcin de dos variables se visualizan en R2 y las de una funcin de tres variables se visualizan en R3 . Por lo tanto, en funciones que posean ms de tres variables no se pueden visualizar las curvas de nivel, y no es posible analizar grcamente la convexidad de los conjuntos contorno. 4. Matriz Hessiana Orlada. Esta matriz se utiliza para analizar la cuasiconcavidad y cuasiconvexidad de una funcin multivariada. Computacionalmente, el mtodo es anlogo al de la matriz Hessiana5 : se aproxima numricamente la Matriz Hessiana Orlada (HO) en un punto determinado, se repite el proceso en un conjunto nito de puntos (un subconjunto del dominio de la funcin) y se concluye sobre cuasiconcavidad y cuasiconvexidad de la funcin en ese conjunto.
Recurdese que la convexidad de un conjunto es un concepto diferente al de convexidad de una funcin. 5 Por lo que sus limitaciones son las mismas.
4

188

GEDEM - Versin Preliminar

7.2. Funciones Univariadas


Una funcin univariada f (x) se dene como una funcin cuyo dominio y rango estn denidos en R1 . Una funcin univariada y sus derivadas pueden ser visualizadas en R2 . Para analizar las deniciones 7.1 en una funcin univariada utilizaremos el mtodo grco, las derivadas de la funcin6 y los conjuntos contorno. 1. Mtodo grco. Retomando conceptos del captulo 4, analizar grcamente una funcin univariada en MATLAB requiere 3 pasos:

Paso 1. Crear la funcin. Esto se puede hacer creando un m-file que contenga la funcin o utilizando el comando inline.

Paso 2. Crear los datos de la variable x y de la funcin f (x). Paso 3. Invocar la rutina plot para gracar.
2. Derivadas de la funcin. En MATLAB , podemos obtener informacin de la segunda derivada de una funcin, de diferentes formas: calcular manualmente fxx y gracarla, calcular el gradiente numrico de f y analizar su pendiente, calcular sucesivamente gradientes numricos y por ltimo utilizar la funcin fdhess o fhess de Compecon. En todos los mtodos puede ser til gracar los resultados numricos. 3. Conjuntos Contorno. En funciones univariadas, las curvas de nivel son puntos ubicados en la recta real. Podemos utilizar MATLAB para ver grcamente las curvas de nivel y los conjuntos contorno.

Ejemplo 7.1. Analizar la concavidad y convexidad de la funcin f (x) = Ln(x) por


el mtodo grco.

Paso 1. Crear la funcin en un M-file llamado fej1, as:


function f=fej1; f=log(x)

Paso 2. Crear los datos de la variable x y de la funcin f (x):


x=[1:0.02:15]; y=fej1(x); % f(x)
El anlisis de estas derivadas corresponde, en el caso univariado, al anlisis de Matriz Hessiana y Hessiana Orlada del caso multivariado.
6

CONCAVIDAD Y CONVEXIDAD

189

Paso 3. Invocar la rutina para gracar:


plot(x,y) b=0.2 c=0.1 line([3.5,13.5],[f(3.5),f(13.5)],color,r,LineStyle,-) text(3.5-b,f(3.5)+b,P_ {1},Fontsize,10,Fontweight,Bold) text(13.5+c,f(13.5)-c,P_ {2},Fontsize,10,Fontweight,Bold)
f(x) = ln x
3

2.5

f(x)

1.5

P1

0.5

10

15

Figura 7.1: Mtodo grco

MATLAB arroja como resultado la Figura 7.1. Tomando los puntos P1 y P2 de la


grca, se observa que se cumple la denicin de funcin cncava en 7.1. Se observa tambin que con culaquier par de puntos esta denicin se satisface. Por lo tanto podemos decir que la funcin es cncava.

Ejemplo 7.2. Analizar la concavidad y convexidad de la funcin f (x) = x3 4x2 +


8 por el mtodo de derivadas (calculando el gradiente numrico y analizando su pendiente).

Paso 1. Crear la funcion


f=inline(x.^3-4*x.^2+8)

Paso 2. Crear los datos

190

GEDEM - Versin Preliminar

h=0.01 % Amplitud de x y del gradiente x=[-2:h:5]; y=f(x);

Paso 3. Calcular el gradiente numrico


fx=gradient(y,h)
Mediante la instruccin plot(x,y,x,fx) se pueden visualizar grcamente los resultados, como en la Figura 7.2.
Gradiente Numrico
40 f fx 30

f(x) = x 4x + 8

20

f(x)

10

10

20 2

Figura 7.2: Gradiente numrico Como se mencion anteriormente, la segunda derivada fxx es la pendiente de la funcin fx . Por esta razn, si la primera derivada de la funcin fx es creciente (o decreciente) est indicando que la segunda derivada de f es positiva (o negativa) y por lo tanto la funcin es convexa (o cncava). En la gura 7.2 se observa que la primera derivada de la funcin f (es decir, fx , representada en el grco con fx) es decreciente (f es cncava) hasta un punto de inexin p [1, 2]. Cmo determinar cul es ese punto?. Notemos que el punto de inexin es el valor mnimo de fx , y que los valores numricos de x y de la primera derivada de la funcin fueron guardados en las variables x y fx en MATLAB , respectivamente. Por tanto, para saber cul es aproximadamente el punto de inexin basta con hallar el valor de x que corresponde al ms pequeo de todos los nmeros contenidos en el vector fx, para lo cual podemos utilizar el comando min, as:

CONCAVIDAD Y CONVEXIDAD

191

[p,i]=min(fx) pinf=[x(i) p]

% Mnimo de fx % Punto de inflexion

La primera lnea encuentra el ms pequeo de todos los valores de la primera derivada de f (fx ), guarda este valor en p y la posicin que ste valor ocupa dentro del vector fx la guarda en i. La segunda lnea guarda en pinf el valor mnimo de la primera derivada (p) y su correspondiente valor en x (x(i)). Este procedimiento arroja como resultado:

pinf = 1.3300 -5.3332


El valor 1.333 (equivalente a 8 ) es el punto x en el que la funcin f (x) pasa de ser 6 cncava a ser convexa.

Ejemplo 7.3. Analizar la concavidad y convexidad de la funcin f (x) = x por el


mtodo de derivadas (analizando la segunda derivada de la funcin).

Paso 1. Crear la funcion


f=inline(sqrt(x)) fxx=inline(-0.25x^(-1.5)

Paso 2. Crear los datos


h=0.00001; x=[0:h:2]; y=f(x); y2=f2(x);

Paso 3. Gracar la funcin y su segunda derivada


plot(x,y) hold on plot(x,y2)
Para hacer el anlisis de la concavidad y convexidad de esta funcin, calculamos la segunda derivada y la introducimos como otra funcin en el programa (y2). En la Figura 7.3 observamos que la segunda derivada es decreciente, indicando que la funcin es cncava.

Ejemplo 7.4. Analizar la concavidad y convexidad de la funcin f (x) =

x7 por el mtodo de derivadas (calculando gradientes de la funcin sucesivamente).

192
f=x
30

GEDEM - Versin Preliminar


3.5

0.25x

4.5

fxx = 8.75x

1.5

3.15x

2.5

20

10

f(x)

10

20 f fxx 30 0.5 1 1.5 2 2.5 3 3.5 4

Figura 7.3: Gradiente numrico

Paso1. Crear la funcin f y su segunda derivada fxx


f=inline(x.^3.5));

Paso2. Crear los datos


h=0.001; x=[0.2:h:4]; y=f(x);

Paso3. Calcular el gradiente numrico


yxx=gradient(gradient(y,h),h)

Paso4. Gracar la funcin y su segunda derivada (calculada numricamente)


plot(x,y) hold on plot(x,yxx)
A partir de los conceptos vistos en el captulo 5, el comando gradient en el programa permite calcular numricamente la segunda derivada de la funcin como el gradiente de la primera derivada. Gracando simultneamente esta segunda derivada con la funcin, obtenemos la Figura 7.3. De esta gura sabemos la segunda derivada fxx es positiva en el intervalo en que la funcin es convexa. Existe un punto de inexin en el intervalo x = [2.5, 3.5] en donde la funcin pasa a ser cncava.

CONCAVIDAD Y CONVEXIDAD

193

El clculo de la segunda derivada numrica est almacenado en el vector yxx. El punto de inexin es el valor de este vector ms cercano a cero7 y su posicin dentro de ese vector.

ind=find(yxx>-10*h&yxx<10*h); pinf=[x(ind);yxx(ind)];
En la primera lnea, el comando find encuentra la posicin de los valores del vector yxx que son mayores que -0.01 (10 h), y menores que 0.01(10 h); este es el criterio para determinar los valores sucientemente cercanos a cero.8 La segunda lnea almacena en el vector pinf los elementos de los vectores x y yxx correspondientes a las posiciones del vector ind. De esta forma el vector pinf es: pinf = 2.7780 -0.0032 Una de las ventajas que ofrece este mtodo es que el clculo de la segunda derivada es numrico, por lo que no requiere que se introduzca explcitamente la forma funcional de la segunda derivada.

Ejemplo 7.5. Analizar la concavidad y convexidad de la funcin f (x) =


el mtodo de derivadas (utilizando fhess).

x 2x2 +3

por

Paso 1. Crear la funcin f


f=inline(x./(2*x.^2+3));

Paso 2. Crear los datos


h=0.001; x=[-2:h:2]; y=f(x);

Paso 3. Calcular la segunda derivada por medio de fhess


for i=1:length(x) fxx(i)=fhess(f,[1,1],x(i)); end;
Se selecciona el ms cercano a cero porque el clculo del vector yxx es numrico, y por lo tanto ninguno de sus componentes es exactamente igual a cero. 8 Aunque este valor puede ser menor, notemos que el elemento ms pequeo (en valor absoluto) del vector yxx es 0.0032, por lo que si estableciramos un criterio menor (por ejemplo 0.001), no encontraramos el punto de inexin.
7

194

GEDEM - Versin Preliminar

Paso 4. Gracar la funcin y su segunda derivada


plot(x,y) hold on plot(x,fxx)
Segunda Derivada Numrica
0.4 f fxx 0.3

f(x) = x/(2x +3)

0.2

0.1

f(x)

0.1

0.2

0.3

0.4 2

1.5

0.5

0.5

1.5

Figura 7.4: Segunda derivada con fhess La Figura 7.4 muestra que la segunda derivada es positiva en el intervalo en el que la funcin es convexa hasta el punto de inexin x = 0, y a partir de all la funcin se hace cncava y se segunda derivada negativa.

Ejemplo 7.6. Analizar la cuasiconcavidad y cuasiconvexidad de la funcin f (x) =


x2 por medio de sus conjuntos contorno.
Para ver grcamente la cuasiconcavidad o cuasiconvexidad de esta funcin, en primer lugar tenemos que trazar una curva de nivel de referencia, por ejemplo, tomemos f = 9. Luego de ello trazamos otras dos curvas de nivel: una mayor (f = 16) y una menor (f = 4). Por ltimo determinamos los conjuntos contorno. El conjunto contorno superior es aquel conjunto hacia el cual crecen las curvas de nivel, mientras que el conjunto contorno inferior se ubica en aquella regin hacia la cual decrecen las curvas de nivel. Grcamente, se tiene la Figura 7.5. A partir de la curva de nivel de referencia f = 9, el conjunto contorno superior corresponde al conjunto [5, 3] [3, 5]9 , porque en esta direccin estn las curvas
9

Siendo rigurosos, el conjunto contorno superior en este caso corresponde a [, 3] [3, ].

CONCAVIDAD Y CONVEXIDAD
f(x) = x
25

195
2

20

y=16 15

f(x)
10 y=9 5 y=4 0 5

Figura 7.5: Conjuntos Contorno de f (x) = x2 de nivel de mayor valor (f = 16). Este conjunto est sealado en la grca con el marcador  o . El conjunto contorno inferior, donde se ubican las curvas de nivel de menor valor (f = 4), corresponde al conjunto [3, 3], y est sealado en la grca con el marcador  * . De estos dos conjuntos, solo el conjunto contorno inferior es convexo, por lo cual podemos concluir que la funcin es cuasiconvexa.

Ejemplo 7.7. Analizar la cuasiconcavidad y cuasiconvexidad f (x) = x3 4x2 + 6


por medio de sus conjuntos contorno. De nuevo, tenemos que jar tres curvas de nivel: una de referencia (f = 1) y dos que se ubican por encima (f = 4) y por debajo (f = 2) de la curva de nivel de referencia. Luego de ello, sealamos grcamente los conjuntos contorno superior (o) e inferior(*) y determinamos cul de estos dos conjuntos es convexo. El conjunto contorno inferior, donde se ubican las curvas de nivel de menor valor (f = 2), est sealado con  *  y corresponde al conjunto [1.5, 1][1.38, 3.61]10 . El conjunto contorno superior, donde se ubican las curvas de nivel de mayor valor
Hemos asumido el conjunto [5, 3] [3, 5] para ilustrar el ejemplo de manera precisa en la grca. 10 Ver nota 7

196
f(x) = x 4x + 6
8

GEDEM - Versin Preliminar


3 2

y=4 4

f(x)

2 y=1

y=2 2

6 1 0 1 2 3 4

Figura 7.6: Conjuntos Contorno (f = 4), est sealado con  o  y corresponde al conjunto [1, 1.38] [3.61, 4.2]. Ninguno de estos dos conjuntos es convexo, por lo que la funcin no es cuasicncava y tampoco es cuasiconvexa. De aqu en adelante asumiremos como convencin que el mtodo de anlisis de derivadas corresponde al clculo numrico de la segunda derivada mediante las rutinas fhess y fdhess.

7.3. Funciones con dos variables (Bivariadas)


Una funcin de dos variables (o bivariada) f (x, y) se dene como una funcin cuyo dominio est denido en R2 . Numricamente, la segunda derivada de una funcin de una variable es un vector que en cada posicin contiene un escalar. En funciones de dos variables, cada componente de ese vector es una matriz hessiana (ver ecuacin 7.2). Esto implica que se debe extraer los menores principales y los valores propios de cada matriz hessiana (hessiana orlada) para poder concluir sobre la concavidad o convexidad (cuasiconcavidad o cuasiconvexidad) de la funcin (ver Sydsaeter (1996) y Mora (2001)).

CONCAVIDAD Y CONVEXIDAD

197

Para determinar la concavidad y convexidad utilizaremos el mtodo grco y el clculo numrico de la matriz Hessiana, mientras que para cuasiconcavidad y cuasiconvexidad utilizaremos el mtodo grco, la matriz hessiana orlada y los conjuntos contorno.

Ejemplo 7.8. Analizar la convexidad y concavidad de f (x, y) = x2 + y 2 + (x + y)2


por el mtodo grco. Sabemos que la funcin f (x, y) es convexa si:
A B

f (P1 + (1 )P2 ) f (P1 ) + (1 )f (P2 )


y cncava si
A B

(7.7)

f (P1 + (1 )P2 ) f (P1 ) + (1 )f (P2 )

(7.8)

Estas desigualdades tienen dos partes: la parte A es la imagen de la combinacin lineal de los puntos P1 y P2 , y la parte B es la combinacin lineal de las imgenes. Para analizar la concavidad y convexidad de cualquier funcin por este mtodo visualizamos las partes A y B de las ecuaciones 7.7 y 7.8 en la grca de la funcin. En nuestro ejemplo:

Paso 1. Crear la funcin en un M-file llamado fej1:


function f=fej8(x,y); f=x.^2+y.^2+(x+y).^2

Paso 2. Crear los datos:


x=[-100:10:100];y=x; [X,Y]=meshgrid(x,y); F=fej8(X,Y);

Paso 3. Gracar
mesh(X,Y,F)
Como se observa en la Figura 7.7, se aadi una lnea continua y una discontinua que representan las partes A y B de las ecuaciones 7.7 y 7.8, respectivamente. Observamos que para estos dos puntos la lnea continua est por debajo de la lnea discontinua, lo cual implica que AB, es decir, que la denicin de funcin convexa

198

GEDEM - Versin Preliminar

f(x,y)=x2+y2+(x+y)2
x 10 6 5 4
4

P1

P2

f(x,y)

3 2 1

0 100 50 0 50 100 100 50 0 100 50

Figura 7.7: Mtodo Grco - Concavidad y Convexidad se cumple para estos dos puntos. Adems se observa que esto ocurre para cualquier pareja de puntos del dominio de la funcin. Por esta razn podemos concluir que la funcin es convexa estricta.

Ejemplo 7.9. Analizar la cuasiconvexidad y cuasiconcavidad de f (x, y) = x2 + y 2 +


(x + y)2 por el mtodo grco.
Sabemos que la funcin f (x, y) es cuasiconvexa si:
A B

f (P1 + (1 )P2 ) M ax{f (P1 ), f (P2 )}


y cuasicncava si
A B

(7.9)

f (P1 + (1 )P2 ) M in{f (P1 ), f (P2 )}

(7.10)

Para estas desigualdades la parte A es la imagen de la combinacin lineal de los puntos P1 y P2 , la parte B es la imagen ms pequea y la parte B es la imagen ms grande. Para analizar la cuasiconvexidad y cuasiconcavidad de cualquier funcin por este mtodo visualizamos las partes A, B y B de las ecuaciones 7.9 y 7.10 en la grca de la funcin.

CONCAVIDAD Y CONVEXIDAD

199

f(x,y)=x2+y2+(x+y)2
x 10 6 5 4
4

P2

f(x,y)

3 2 1

P1

0 100 50 0 50 100 100 50 0 100 50

Figura 7.8: Mtodo Grco - Cuasiconcavidad y Cuasiconvexidad En la gura 7.8 se observa que todos los puntos de la lnea continua (parte A de la denicin 7.9) son ms pequeos o iguales al punto P2 (parte B de la denicin 7.9). Como esto ocurre para cualquier par de puntos podemos concluir que la funcin es cuasiconvexa.

Ejemplo 7.10. Analizar la convexidad y concavidad de la funcin f (x, y) = x0.5 y 0.5 Paso 1. Crear la funcin en un M-file llamado fej9:
function f=fej9(v); y=v(2); x=v(1); f=(x.^0.5).*(y.^0.5);;

Paso 2. Crear los datos. Se crean los datos para el conjunto de salida en los vectores x e y, y el producto cartesiano entre ellos utilizando la instruccin meshgrid. Adems, es necesario almacenar en un vector p todas las parejas ordenadas de la forma (x, y) en las que se va a calcular numricamente la matriz hessiana. Esto se hace con la ltima instruccin11 .

x=[0.1:10:100.1]; y=x;
11

Para una explicacin de la sintaxis X(:) para una matriz X, ver el captulo 2

200

GEDEM - Versin Preliminar

[X,Y]=meshgrid(x,y); p=[X(:);Y(:)];

Paso 3. Calcular la matriz Hessiana y determinar si es denida, semidenida o indenida. Con operaciones matriciales podemos calcular los menores principales dominantes y arbitrarios de la matriz hessiana, y con el comando det podemos hallar el determinante de estas submatrices. Tambin podemos hallar los valores propios de la matriz Hessiana con el comando eig. A partir de estos clculos podemos establecer si la matriz hessiana, calculada en un punto, es denida positiva o negativa, o semidenida positiva o negativa. Repitiendo el proceso en m puntos y teniendo en cuenta las proposiciones 7.4 y 7.5 podemos concluir sobre concavidad o convexidad.

for m=1:length(p); H=fdhess(fej9,p(:,m)); vp(1:2,m)=eig(H); end


Una vez calculamos la matriz hessiana de la funcin en un punto, podemos repetir el proceso para un conjunto nito de puntos y luego utilizar alguno de los criterios denidos anteriormente con el n de determinar si la funcin es cncava (estricta) o convexa (estricta). Por ejemplo, con operaciones matriciales podemos calcular los menores principales dominantes y arbitrarios de la matriz hessiana, y con el comando det podemos hallar el determinante de estas submatrices. Tambin podemos hallar los valores propios de la matriz Hessiana con el comando eig. A partir de estos clculos podemos establecer si la matriz hessiana, calculada en un punto, es denida positiva o negativa, o semidenida positiva o negativa. Repitiendo el proceso en m puntos y teniendo en cuenta las proposiciones podemos concluir sobre concavidad o convexidad. Siguiendo nuestro ejemplo, comencemos por calcular en MATLAB la matriz hessiana de f (x, y) = x2 + y 2 + (x + y)2 . Sabemos que su matriz Hessiana es:

Hf (x, y) =

4 2 2 4

La matriz Hessiana es constante para todo punto (x, y). Para calcularla en MATLAB debemos: 1. Denir la funcin en un M-file llamado fej72.

CONCAVIDAD Y CONVEXIDAD

201

function f=fej72(v); y=v(2); x=v(1); f=x.^2+y.^2+(x+y).^2;


Ntese que la funcin recibe como input un vector v (y no dos variables separadas x,y ), el cual contiene, en su primera posicin, el valor de la variable x y en la segunda posicin el valor de la variable y . 2. Denir el punto en el cual va a calcular la Hessiana. Aunque en nuestro ejemplo sabemos que la Hessiana es constante, es necesario determinar un punto. La razn de ello es que la matriz hessiana es calculada por medio de mtodos numricos. Utilicemos el punto v = (x, y) = (4, 5).

v=[4;5];
3. Invocar la rutina fdhess:

H=fdhess(fej72,v)
o, en el caso de fhess:

H=fhess(fej72,[1,1],v)
La salida de MATLAB es:

H = 4 2 2 4
Aunque los procedimientos numricos y los resultados son los mismos, para nuestro propsito es ms prctico utilizar la rutina fdhess, por lo cual sta es la que utilizaremos de aqu en adelante. Como mencionamos anteriormente, la matriz hessiana es til si logramos adecuadamente extraer la informacin que sta nos ofrece. Para ello, podemos utilizar las proposiciones que citamos al comienzo de esta seccin. Ms especcamente, podemos calcular los menores principales dominantes o arbitrarios y calcular su determinante con la instruccin det, o hallar los valores propios de la matriz hessiana por medio de la instruccin eig. Aunque es fcil calcular en MATLAB los menores principales dominantes de una matriz de cualquier tamao, es difcil calcular los menores principales arbitrarios. Por simplicidad, en este caso utilizaremos el criterio de valores propios. Los valores propios de

202

GEDEM - Versin Preliminar nuestra matriz H son 1 = 2, 2 = 6. Debido a que los valores propios son estrictamente positivos y a que la matriz hessiana es constante (tiene el mismo valor en todo punto (x, y )), podemos concluir que la matriz hessiana es denida positiva y por lo tanto la funcin f (x, y) es estrictamente convexa. Conjuntos Contorno. En el captulo 4 estudiamos la instruccin contour y contour3, que son tiles para visualizar las curvas de nivel y los conjuntos contorno de una funcin de dos variables f (x, y). Recordemos que la instruccin contour sirve para visualizar las curvas de nivel de nuestra funcin f (x, y) en en plano x, y (R2 ), mientras que la funcin contour3 sirve para visualizar las curvas de nivel en el plano x, y, f (R3 ). Tambin recordemos de este captulo la instruccin subplot, que muestra diferentes grcos simultneamente. Una vez creada la funcin y los datos (pasos para grcar) podemos analizar la cuasiconcavidad y cuasiconvexidad de nuestra funcin f (x, y) de la siguiente manera:

subplot(2,2,1) contour3(X,Y,Z,40) % 40 Curvas de nivel arbitrarias title(Contour3); subplot(2,2,2) cn=[2 6 10 14 20 30]; % Curvas de nivel predeterminadas contour(X,Y,Z,cn) title(Contour); subplot(2,2,3) [cs,h]=contour(X,Y,Z,cn); hs=clabel(cs,h) title(Contour - clabel); subplot(2,2,4) contourf(X,Y,Z,cn) title(Contourf);
A partir de estas instrucciones, obtenemos: La gura ??a muestra las curvas de nivel de la funcin f (x, y) en el plano x,y,f. La gura ??b muestra las curvas de nivel en el plano x,y. La gura ??c, adems de mostrar algunas curvas de nivel, muestra el valor de f (x, y) en cada una de

CONCAVIDAD Y CONVEXIDAD

203

estas curvas. Por ltimo, en la gura ??d se observan las curvas de nivel con los contornos relllenos. Se observa en estas grcas que los conjuntos contorno inferiores de la funcin f (x, y) son convexos, por lo cual podemos armar que la funcin es cuasiconvexa. Era de esperarse, puesto que ya habamos visto que la funcin es convexa, y adems sabemos por la proposicin ?? que toda funcin convexa es cuasiconvexa. Matriz Hessiana Orlada. Un ltimo criterio para determinar la cuasiconcavidad y cuasiconvexidad de la funcin es la matriz Hessiana Orlada (Hf (x, y)) denida en (??). Para nuestro ejemplo, podemos empezar por hallar analticamente la matriz Hessiana Orlada de f (x, y) y calcularla en el punto (x, y)=(3,4):

0 2x + 2(x + y) 2y + 2(x + y) Hf (x, y) = 2x + 2(x + y) 4 2 2y + 2(x + y) 2 4 0 80 100 Hf (3, 4) = 80 4 2 100 2 4


Ahora vamos a calcular esta matriz en MATLAB . Para ello, utilizamos la funcin fej72 combinamos los comandos fdjac y fdhess, as:

p=[3,4]; % Punto de evaluacin J=fdjac(fej72,p); % Gradiente de f H=fdhess(fej72,p); %Hessiana de f Ho=[0 J;J H]; % Hessiana Orlada de f
La salida de MATLAB es:

Ho = 0 80 100

80 4 2

100 2 4

Sabemos, por la proposicin ??, que si el determinante de todos los Dk de esta matriz es menor que cero, la funcin es cuasiconvexa. Calculemos los Dk de esta matriz:

204

GEDEM - Versin Preliminar

for k=1:1:length(Ho)-1; D=Ho(1:k+1,1:k+1); %MPD de orden k dt(i)=det(D); % Determinante de MPD end dt


La primera lnea indica a MATLAB que los clculos de las siguientes lneas deben repetirse para cada valor de k. En esa misma lnea se establece que k tomar los valores de 1 ,2, siendo 2 el resultante de la instruccin length(Ho)-1. El comando de la segunda lnea extrae el Menor principal Dominante de orden k de la Matriz Hessiana Orlada. Por ejemplo, cuando k = 1, D es el menor principal de orden 2 y est dado por D=Ho(1:2,1:2). La tercera lnea calcula el determinante del menor principal dominante que se calcul en la segunda lnea, y guarda este valor en la posicin i del vector dt. La ltima lnea la utilizamos para ver los componentes del vector dt. La salida de MATLAB (con format bank) es:

dt = -6400.00 -33600.00
No es de nuestro inters la magnitud de estos nmeros, sino ms bien su signo. Para ello es til el comando format +. Al utilizar este comando, la salida muestra los smbolos +,- o espacio en blanco para indicar elementos que son positivos, negativos o cero, respectivamente. Deniendo este formato, la salida de MATLAB es:

dt = indicando que tanto el primer componente del vector como el segundo son negativos. Esto nos permite concluir que la funcin f (x, y) es cuasiconvexa en el punto (x, y) = (3, 4) A diferencia de la matriz hessiana de nuestra funcin f (x, y), la matriz Hessiana Orlada cambia segn el punto en donde la calculemos. Necesitamos entonces generalizar el mtodo anterior para calcular la Matriz hessiana orlada en diferentes puntos a la vez. Para ello, necesitamos repetir el proceso m veces, donde m son todas los puntos en los que se desea evaluar la matriz H . Para ilustrar la forma en que se generaliza, vamos a evaluar la matriz H en un conjunto nito de puntos. Lo primero que debemos hacer es denir dicho conjunto. Supongamos que va-

CONCAVIDAD Y CONVEXIDAD

205

mos a evaluar esta matriz en el conjunto S = {(x, y)\x [3, 5] y [4, 1]}. Entonces, denimos este conjunto en MATLAB :

x=[3:1:5]; y=[-4:1:-1];
Luego de esto, debemos crear un vector p que contenga todas las parejas (x, y) de puntos posibles, as:

[X,Y]=meshgrid(x,y); p=[X(:);Y(:)]; Por ltimo repetimos m veces el proceso de calcular H , donde m es el nmero de puntos en donde vamos a evaluar la matriz H , es decir, el nmero de columnas del vector p: for m=1:length(p); % Repetir m veces J=fdjac(fej72,p(:,m)); % Gradiente H=fdhess(fej72,p(:,m)); % Hessiana Ho=[0 J;J H]; % Hessiana Orlada for k=1:1:length(Ho)-1; % Repetir k veces D=Ho(1:k+1,1:k+1); % MPD dt(k,m)=det(D); % Determinante de MPD end end dt
El vector dt resultante es de tamao 2x12, donde 2 corresponde al nmero de menores principales dominantes que se evalan en la matriz H y 12 corresponde al nmero de puntos en los que se evalu la matriz H . Por ejemplo, la primera columna del vector dt contiene el determinante de los dos menores principales dominantes de la hessiana orlada evaluada en el punto (x, y) = (3, 4). Se observa que todos los componentes del vector dt son negativos, lo cual implica que los menores principales dominantes de H son menores que cero y por lo tanto la funcin en el conjunto S es cuasiconvexa12 . A lo largo de toda la seccin hemos analizado la concavidad, convexidad, cuaAunque en el ejemplo se tomaron muy pocos valores para x y y , es fcil hacer los mismos clculos para un conjunto S ms extenso. An as, los componentes del vector dt son negativos.
12

206

GEDEM - Versin Preliminar siconcavidad y cuasiconvexidad de la funcin f (x, y) = x2 + y 2 + (x + y)2 por diferentes mtodos. Sin embargo, esta funcin es evidentemente convexa, y aunque ha sido til para propsitos de explicacin, es importante tratar con funciones en donde su concavidad o convexidad no es tan evidente, ya que es en estos casos en donde la herramienta computacional puede resultar muy til. En el siguiente ejemplo, realizamos el anlisis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad para una funcin un poco ms complicada. A diferencia del ejemplo anterior, no explicaremos en detalle cada instruccin13 , ya que nuestro propsito con este ejemplo es mostrar la utilidad de MATLAB para analizar rpidamente la forma de la funcin, y no ensear los pasos que se deben seguir en cada mtodo de anlisis, como si lo era en el ejemplo anterior.

7.3.1.

Ejemplo 7.3. f (x, y) = x0.5 y 0.5

Mtodo Grco
En la gura ?? se observa que esta funcin es cncava (y por lo tanto cuasicncava) a lo largo de su dominio.

Matriz Hessiana. Deniendo previamente la funcin en un M-file llamado fej73, y a partir del conjunto nito de puntos S = {(x, y)\x (0, 100] y (0, 100]}, se tiene: x=[0.1:10:100.1]; % Valores para x y=[0.1:10:100.1]; % Valores para y [X,Y]=meshgrid(x,y); % Valores para f(x,y) p=[X(:);Y(:)]; % Vector con puntos (x,y) for m=1:length(p); % Repetir en todos los puntos H=fdhess(fej73,p(:,m)); % Matriz Hessiana vp(1:2,m)=eig(H); % Valores propios end tam=size(vp); tol=0.000016 for i=1:tam(1)*tam(2); % Valores propios if abs(vp(i))>tol; % V. propios cercanos a cero
13

Aunque las instrucciones son bsicamente las mismas.

CONCAVIDAD Y CONVEXIDAD

207

vp(i)=vp(i); else vp(i)=round(vp1(i)); % Redondear end end


Hemos asumido valores para x y y estrictamente positivos. Adems, debido a que el clculo de la matriz Hessiana es numrico, los valores que sta matriz contiene se aproximan con gran precisin a los valores reales, aunque no son exactamente iguales, por lo que en algunos puntos hay valores propios de la matriz hessiana que son positivos, aunque muy cercanos a cero. Para depurar el vector vp de estos valores, es necesario el segundo procedimiento, en el cual, por medio del comando round, aquellos valores sucientemente cercanos a cero (tol) se aproximan a cero. Se observa que todos los componentes del vector vp son no positivos (menores o iguales que cero), por lo cual podemos concluir que la funcin es cncava, y por lo tanto tambin es cuasicncava. Esto ltimo lo podemos vericar con la matriz Hessiana Orlada.

Matriz Hessiana Orlada x=[0.1:10:100.1]; % Valores para x y=[0.1:10:100.1]; % Valores para x [X,Y]=meshgrid(x,y); % Valores para f(x,y) p=[X(:);Y(:)]; % Vector con puntos for m=1:length(p); % Repetir m veces J=fdjac(fej73,p(:,m)); % Gradiente H=fdhess(fej73,p(:,m)); % Hessiana Ho=[0 J;J H]; % Hessiana Orlada for k=1:1:length(Ho)-1; % Repetir k veces D=Ho(1:k+1,1:k+1); % MPD dt(k,m)=det(D); % Determinante de MPD end end
El vector dt es de tamao 2x121. En la posicin (i, j ) se este vector se ha calculado el determinante del menor principal dominate de orden i de la matriz Hessiana Orlada calculada en el punto j . Al observar los

208

GEDEM - Versin Preliminar componentes de este vector utilizando las instrucciones:

format + dt
se observa que todos los componentes de la primera la de este vector son negativos, mientras que los componentes de la segunda la son positivos, indicando que los Menores Principales Dominantes de orden 1 (D1 ) evaluados a lo largo del conjunto S son negativos, mientras que los de orden 2 son positivos. A partir de los criterios de evaluacin y de la informacin que nos proporciona este vector podemos concluir que la funcin es cuasicncava.

Conjuntos Contorno
Se observa que el conjunto contorno superior es convexo, por lo cual podemos concluir tambin por este criterio, que la funcin es cuasicncava.

7.4. Funciones con tres o ms variables (Multivariadas)


Nuestro propsito en esta seccin es ilustrar con dos ejemplos la manera en que se extienden los mtodos de anlisis de concavidad y convexidad para funciones de tres o ms variables. Cuando tenemos funciones con tres variables, ya no se puede utilizar el mtodo grco, puesto que ya no es posible visualizar la funcin. Sin embargo, sus curvas de nivel se visualizan en R3 , y por lo tanto es vlido en estas funciones utilizar el mtodo de conjuntos contorno, adems de los mtodos de matriz Hessiana y Hessiana Orlada. En funciones de cuatro o ms variables no es posible utilizar el mtodo grco y el mtodo de Conjuntos contorno, por lo cual solo disponemos de los mtodos de matriz Hessiana y matriz Hessiana Orlada.

7.4.1.

Ejemplo 7.4. f (x, y, z) = x4 + 3y 4 + 5z

Matriz Hessiana Al igual que en los caso anteriores, primero debemos crear la funcin en un M-file llamado fej74: function f = fej74(v); z=v(3);

CONCAVIDAD Y CONVEXIDAD

209

y=v(2); x=v(1); f=x.^4+3*y.^4+5*z;


Luego de esto, debemos crear un conjunto nito de puntos S en los que queremos evaluar la matriz H . Para este ejemplo, podemos asumir un conjunto S = {(x, y, z)\x [10, 10] y [10, 10] z [10, 10]}, que va a estar contenido en el vector p:

x=[-10:1:10]; % Valores para x y=x;z=x; % Valores para y,z [X,Y,Z]=meshgrid(x,y,z); % Valores para f(x,y) p=[X(:);Y(:);Z(:)]; % Vector con puntos
Por ltimo, invocamos la rutina fdhess para calcular la matriz hessiana en cada punto del vector p, calculamos sus valores propios (con su correspondiente depuracin) y a partir de la informacin contenida en el vector vp podemos concluir sobre la concavidad y convexidad de la funcin.

for m=1:length(p); H=fdhess(fej74,p(:,m)); vp(1:3,m)=eig(H); end tam=size(vp) tol=0.000016 for i=1:tam(1)*tam(2); if abs(vp(i))>tol; vp(i)=vp(i); else vp(i)=round(vp(i)); end end
Se observa que todos los componentes del vector vp son no negativos, lo cual indica que la funcin es convexa.

Matriz Hessiana Orlada. Se siguen los mismos pasos que trabajamos en el ejemplo anterior. La nica modicacin es que, al igual que hicimos con el vector de valores propios de la matriz hessiana, necesitamos de-

210

GEDEM - Versin Preliminar purar el vector que contiene los determinantes de los menores principales dominantes de la matriz hessiana orlada.

x=[-10:1:10]; % Valores para x y=x;z=x; % Valores para y,z [X,Y,Z]=meshgrid(x,y,z); % Valores para f(x,y) p=[X(:);Y(:);Z(:)]; % Vector con puntos (x,y,z) for m=1:length(p); J=fdjac(fej74,p(:,m)); H=fdhess(fej74,p(:,m)); Ho=[0 J;J H]; for k=1:1:length(Ho)-1; D=Ho(1:k+1,1:k+1); dt(k,m)=det(D); end end tam=size(dt); tol=0.00016;

for i=1:tam(1)*tam(2); % Depuracin if abs(dt(i))>tol; dt(i)=dt(i); else dt(i)=round(dt(i)); end end


Se observa que todos los componentes del vector dt (una vez depurados) son no positivos, lo cual implica que a partir de la informacin de la matriz Hessiana Orlada, podemos concluir que la funcin es cuasiconvexa.

Conjuntos Contorno. Recordemos que las curvas de nivel para f (x, y, z) = x4 + 3y 4 + 5z resultan de igualar la funcin a una constante . De esta manera, tenemos que las curvas de nivel estn dadas por: = x4 + 3y 4 + 5z = z=
x4 3y 4 5

As, a pesar de no poder visualizar la funcin f (x, y, z), s podemos visualizar sus curvas de nivel en el plano (x, y, z). Para visualizar estas curvas

CONCAVIDAD Y CONVEXIDAD

211

de nivel en MATLAB , utilizamos los mismos pasos que se requieren para gracar una funcin en R3 , es decir, especicar la funcin, crear los datos y por ltimo invocar el comando para gracar. Lo particular en este caso es que vamos a repetir el ltimo paso n veces, donde n es el nmero de curvas de nivel que deseamos visualizar. Para este ejemplo vamos a visualizar cuatro curvas de nivel de la funcin dadas por = (10000, 0, 10000). 1. Crear la funcin en un M-file llamado fcnej74:

function z=fcnej74(x,y,alpha) z=(alpha-x.^4-3*y.^4)*(1/5);


2. Crear los datos:

x=[-10:0.1:10];y=x; % Datos para x,y [X,Y]=meshgrid(x,y); alpha=[-10000 0 10000]; % Curvas de nivel


3. Invocar el comando para gracar:

for i=1:length(alpha) Z=fcnej74(X,Y,alpha(i)); mesh(X,Y,Z) hold on end


A partir de estas instrucciones, tenemos: Se observa en esta grca que el conjunto contorno inferior es convexo, y por lo tanto podemos concluir que la funcin es cuasiconvexa. Por ltimo, mostraremos un ejemplo de una funcin con ms de tres variables. En este caso, tampoco podemos utilizar el mtodo de conjuntos contorno, ya que no se pueden visualizar las curvas de nivel de la funcin. Por lo tanto, los nicos mtodos computacionales disponibles para este caso son los de matriz hessiana y matriz hessiana orlada.

7.4.2. Ejemplo 7.5. f (w, x, y, z)


Matriz Hessiana

212

GEDEM - Versin Preliminar

Matriz Hessiana Orlada

Captulo 8

Optimizacin
Lida Quintero, Norman Maldonado
La racionalidad de los agentes es un supuesto frecuentemente utilizado la teora econmica. Esto implica que ellos busquen siempre la mejor manera de realizar sus cosas, es decir, busquen optimizar sus actividades. As, los consumidores siempre quieren maximizar la utilidad que le proporcionan los bienes que compran, y los productores maximizar sus benecios o minimizar sus costos. En este captulo trabajaremos a partir de herramientas computacionales, el problema de hallar los mximos o mnimos de una funcin (optimizacin esttica); dependiendo de si ella representa utilidad, benecios o costos; delimitando el conjunto de soluciones de acuerdo a restricciones si las hay. Segn (?), una caracterizacin tpica de problemas de optimizacin es encontrar valores extremos de una funcin f (x, y) restringida a un subconjunto bien especicado de R2 : + Maximizar f (x, y) sujeta a g(x, y) 0 x0 y0 donde f , g : R2 R son funciones diferenciables. Aqu a f (, ) se le conoce ++ como funcin objetivo, y a g(, ) como funcin restriccin o conjunto factible. En el problema general hablamos de maximizar, dado que minimizar equivale a maximizar el negativo de la funcin. Tambin podemos establecer una secuencia general para resolver un problema de optimizacin computacionalmente. Primero, debemos hacer un anlisis cualitativo 213

214

GEDEM - Versin Preliminar

del problema, es decir, identicar el tipo de funcin objetivo al que nos enfrentamos, el tipo de restricciones, y su comportamiento si es posible de manera grca para tener idea de la regin donde se puede encontrar la solucin. Teniendo claras las condiciones iniciales del problema, podemos crear las funciones computacionalmente(funcin objetivo, restricciones, gradientes, etc)1 . Por ltimo, aplicamos la rutina computacional pertinente segn el problema. Adicionalmente, debemos ser muy cuidados con la interpretacin de los resultados. Al optimizar se pueden presentar varios casos segn el tipo de funciones que estemos trabajando: cuando la funcin objetivo no es lineal, y no hay restricciones, caso que veremos en la primera seccin; en la segunda presentamos optimizacin de funciones del mismo tipo pero con restricciones; y por ltimo tendremos el caso en que las funciones son lineales. El anlisis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de funciones que vimos en el captulo anterior, nos har mucho ms fcil la comprensin de estos problemas.

8.1. Optimizacin no lineal sin restricciones


De nuestro problema general de optimizacin, en esta seccin veremos el caso particular en el que f (x, y) tiene forma no lineal. Adems, no tenemos g(x, y), o funcin restriccin, por lo que debemos buscar la solucin en todo el dominio de la funcin objetivo. Existen varios mtodos numricos para solucionar este caso particular de optimizacin como tales, tales y tales; que veremos en esta seccin junto con las rutinas de MATLAB que hacen uso de ellos.

8.1.1. Minimizar
Con esta rutina hallamos la imagen ms pequea de nuestra funcin objetivo, por lo que la utilizamos para solucionar problemas de minimizacin.

Ejemplo 8.1.
m f (x) = x3 4x2 + 6 n
En general es mejor trabajar con funciones denidas en un m-le, ya que se pueden modicar fcilmente y permiten hacer uso de otras funciones disponibles en MATLAB . En problemas sencillos es prctico trabajar con funciones inline.
1

OPTIMIZACIN

215

Paso 1. Anlisis Cualitativo del problema. Podemos ver en la Figura 8.1 el comportamiento de la funcin f (x) y de su derivada fx en una parte de su dominio: S = {x [3, 6]}. Figura 8.1: Comportamiento de f (x) Sabemos del captulo anterior que la funcin es cncava para el intervalo (, 1.3333) y convexa en el intervalo (1.3333, ). En la grca observamos que, en un punto cercano a x = 0, esta funcin tiene un mximo, y en un punto cercano a x = 3, un mnimo2 .

Paso 2. Crear funciones. Podemos introducir la funcin como un m-le o por medio
del comando inline:

f=inline(x.^3-4*x.^2+6)

Paso 3. Invocar rutina de solucin. Debemos crear las imgenes de f (x) en una
vecindad sucientemente grande alrededor de x = 3, y luego, teniendo estos valores, escoger el ms pequeo de todos ellos3 .

h=0.01; x=[2:h:4]; % Puntos cercanos a x=3 y=f(x); % Crear imgenes [ym,ind]=min(y); % Imgen ms pequea xm=x(ind); % Argumento que minimiza
En la primera lnea creamos los puntos cercanos a x = 3 (x [2, 4]), que, segn lo que analizamos en el paso 1, es un punto cercano al mnimo que buscamos. En la segunda lnea estn las imgenes de ese conjunto de puntos. En la tercera, se halla la imgen ms pequea junto con su posicin dentro del vector y. Finalmente en la cuarta lnea encontramos el valor de x que minimiza a f (x). Como resultado, obtenemos xm=2.67 y ym=-3.4814. En caso de requerir mayor precisin para x, solo se requiere reducir el valor del parmetro h. Para el caso de funciones univariadas, ste es el mtodo ms sencillo en el que se hallan mnimos computacionalmente.
Ntese en la gura 8.1 que en estos puntos la primera derivada de la funcin se hace cero. Recordemos que establecimos el conjunto S = {x [3, 6]}, slo con el propsito de visualizar el comportamiento de la funcin. En realidad, nuestro conjunto de salida o dominio de f (x) son todos los reales, por lo que no estamos buscando puntos ptimos que estn en la frontera, sino puntos ptimos interiores en los que se cumpla la condicin f = 0.
3 2

216

GEDEM - Versin Preliminar

Captulo 9

Sistemas Dinmicos
Diego Corredor, Mario Gonzlez
En los captulos anteriores nos hemos ocupado de los procedimientos utilizados para analizar y optimizar diferentes tipos de funciones. Todos estos mtodos se enmarcan dentro de un contexto esttico en el que no es posible observar los comportamientos de las variables a travs del tiempo. En este captulo nos concentramos en los mtodos numricos, y aplicaciones computacionales utilizados en situaciones donde el tiempo juega un papel importante, ya sea como una variable continua (ecuaciones diferenciales) o discreta (ecuaciones en diferencias). En la primera parte del captulo explicamos los mtodos numricos, y computacionales, utilizados en la solucin de ecuaciones diferenciales ordinarias, presentando algunos ejemplos y aplicaciones econmicas. En la segunda parte desarrollamos el mismo esquema para las ecuaciones en diferencias.

9.1. Ecuaciones Diferenciales y Dinmica Continua


Ecuaciones DiferencialesDinmica Continua FALTA UNA INTRODUCCIN AL USO DE LAS ECUACIONES DIFERENCIALES EN ECONOMA ecuaciones diferenciales ordinarias las ecuaciones no son simplemente con respecto al tiempo.

9.1.1.

Mtodos Numricos

Desde el punto de vista algebraico, solucionar un sistema de ecuaciones diferenciales implica encontrar la frmula de la o las funciones que satisfagan el sistema. Cuando ninguna condicin inicial es denida la solucin consiste en hallar una frmula general 217

218

GEDEM - Versin Preliminar

de las funciones. Pero si las condiciones iniciales del problema son determinadas, es posible obtener las funciones especcas que solucionan el conjunto de ecuaciones. Por ejemplo, al solucionar algebraicamente la ecuacin x = 3x, obtenemos que el conjunto de funciones que cumplen esta ecuacin viene dado por la frmula general: x(t) = Ae3t ; donde A puede ser cualquier nmero real. Pero si agregamos la condicin inicial x(0) = 4, la nica funcin que satisface la ecuacin diferencial y la condicin inicial es x(t) = 4e3t . Es necesario anotar que las condiciones no necesariamente tienen que ser iniciales, tambin pueden imponerse condiciones en otros momentos del tiempo, o condiciones de fronteraCondicin de Frontera. En el ejemplo, si imponemos la condicin de frontera x(2) = 5, la funcin particular que satisface la condicin y el sistema de dinmico es: x(t) = 0.0123e3t . Por otro lado, por la naturaleza de los mtodos, la solucin numrica de sistemas dinmicos implica que algn tipo de condicin deba ser impuesta. Es decir que, al contrario del mtodo algebraico, no es posible obtener ningn tipo de ecuacin general de las funciones solucin. An ms, al utilizar mtodos numricos nunca encontramos tales funciones, sino que realizamos una aproximacin numrica a ellas. Dependiendo del tipo de condicin impuesta (inicial o de frontera) el procedimiento de solucin numrica cambia. Si tomamos una condicin inicial, resolver un sistema dinmico consiste en aproximar las funciones solucin a partir del momento del tiempo en el que es impuesta tal condicin. En otras palabras, la aproximacin se realiza hacia adelante. A este tipo de problemas se les conoce con el nombre de Problemas de Valor InicialProblemas de Valor! Inicial o IVPIVP|seeProblemas de Valor InicialInicial Value Problems|seeIVP (por sus siglas en ingls), y formalmente consisten en aproximar x(t), en un intervalo de tiempo determinado, de modo que:

x(t) = f t, x(t) x(t0 ) = x0

(9.1)

El procedimiento de solucin de un IVP consiste, por lo general, en tomar la condicin inicial y evaluarla en la ecuacin diferencial. De esta forma se tiene un punto y la derivada de la funcin en el punto. Con estos dos elementos, y haciendo uso del polinomio de Taylor, es posible aproximar el valor de la funcin en el siguiente perodo de tiempo. Este procedimiento se repite una y otra vez hasta alcanzar el lmite superior del intervalo de tiempo considerado. Los mtodos numricos utilizados para la solucin de problemas de valor inicial son explicados en detalle ms adelante.

SISTEMAS DINMICOS

219

Una generalizacin de los problemas de valor inicial son los denominados Problemas de Valores en la FronteraProblemas de Valor! en la Frontera o BVPBVP|seeProblemas de Valor en la FronteraBounded Value Problems|seeProblemas de Valor en la Frontera. En este tipo de problemas imponemos, como su nombre lo indica, condiciones de frontera al sistema dinmico. La solucin de estos sistemas resulta ms complicada porque es posible imponer varias condiciones a la vez, y porque la aproximacin a las funciones se realiza antes y despus de cada condicin. Los mtodos numricos utilizados para resolver este tipo de problemas son avanzados, por lo que no sern tratados en este libro.1 A continuacin presentamos algunos mtodos numricos utilizados para solucionar problemas de valor inicial. Es necesario aclarar que existe una gran cantidad de mtodos por lo que no pretendemos abarcar todos los algoritmos existentes. Nos limitamos a los mtodos ms sencillos que sirven de base para los dems.

Mtodo de Euler Mtodo de Euler: Conocido tambin como mtodo de la


tangente, aproxima la curva solucin de la ecuacin diferencial a travs de un polinomio de Taylor de grado 1. Para entender el algoritmo, supongamos que la funcin x(t) satisface el sistema de ecuaciones (9.1) y, tras hacer la expansin del polinomio de Taylor de grado 1 alrededor de t + h, obtenemos:

x(t + h) x(t) + hx(t)

(9.2)

Con base en el sistema (9.1), en la ecuacin (9.2) y asumiendo h = 1, es posible aproximar x1 :

x1 = x0 + f (0, x0 )
Ya con x1 , es posible encontrar una aproximacin de x2 y as sucesivamente. En general, tenemos que:

xi+1 = xi + hf (ti , xi )

(9.3)

Es importante recalcar que hallamos aproximaciones, por lo que en cada iteracin la solucin exacta es el valor aproximado ms un error cuadrtico:2
Para una explicacin clara y sencilla de estos mtodos ver Fackler (2003, cap. 6). Como la aproximacin es de primer grado, el error resulta ser una funcin cuadrtica del tamao del paso; si la aproximacin es de segundo grado, el error asociado a sta es una funcin cbica, y as sucesivamente.
2 1

220

GEDEM - Versin Preliminar

x (t + h) = x(t + h) + O h2
Una forma de disminuir la inexactitud de los resultados es tomar tamaos de paso ms pequeos, por ejemplo h = 0.1. Sin embargo, al reducir el tamao del paso de la iteracin se aumenta el nmero de operaciones aritmticas, lo que disminuye la velocidad del algoritmo. Existe un tipo de algoritmos, conocidos como algoritmos adaptativos, que durante el proceso iterativo observan el comportamiento de los errores en cada etapa con el n de reducir o incrementar el tamao del paso, segn sea necesario. El programa, o script, que se presenta a continuacin muestra la programacin del mtodo de Euler3 . El usuario debe denir con anterioridad el nmero de iteraciones n, la condicin inicial x0, el tamao del paso h y el tiempo inicial t0. Tambin debe ser especicada, en otro chero, la ecuacin diferencial cuya sintaxis es dxdt=f(t,x): x(1)=x0; t(1)=t0; for i=1:n x(i+1)=x(i)+h*f(t(i),x(i)); t(i+1)=t(i)+h; end Existen ecuaciones diferenciales particulares en las cuales el algoritmo de Euler puede resultar poco efectivo a la hora de aproximar la solucin numricamente. En estos casos, es recomendable recurrir a otro tipo de mtodos ms estables. Uno de los procedimientos alternativos ms simples, es el mtodo modicado de EulerMtodo Modicado de Euler. Al igual que en el mtodo de Euler, aproximamos la solucin con un polinomio de Taylor de grado 1. Sin embargo, no lo evaluamos alrededor de t + h sino de t, obteniendo:4
El lector avanzado en mtodos numricos puede constatar que existen programaciones ms ecientes que las presentadas en esta parte del captulo. Los programas aqu presentados tienen un objetivo expositivo y, por tanto, no fueron programados teniendo en cuenta el nmero de operaciones aritmticas, o cualquier otra medida de eciencia de un mtodo numrico. 4 El mtodo de Euler modicado se basa en el hecho de que para una funcin cualquiera g(x), si la funcin es relativamente bien comportada y h es lo sucientemente pequeo, la derivada de la
3

SISTEMAS DINMICOS

221

x(t) x(t h) + hx(t)

(9.4)

A partir de la ecuacin anterior, llegamos a la siguiente regla de iteracin:

xi = xi1 + hf ti , xi )
Finalmente, la regla de iteracin para xi+1 es:

xi+1 = xi + hf ti+1 , xi+1 )

(9.5)

Esta regla de iteracin es denominada frmula implcita de Euler, ya que no es posible despejar xi+1 en trminos de ti y de xi . Dados un t0 y un x0 , el valor de la variable en la siguiente iteracin es el valor que solucione la siguiente ecuacin:

x1 x0 hf t1 , x1 ) = 0

(9.6)

Como se puede observar, en cada iteracin es necesario solucionar una ecuacin similar a la (9.6). Independientemente del tipo de ecuacin (lineal o no lineal), su solucin incrementa el nmero de clculos y, por lo tanto, disminuye la velocidad de solucin. En algunos casos, un mtodo ms efectivo es el Mtodo de Runge - Kutta, que presentamos a continuacin.

Mtodo de Runge - KuttaMtodo de Runge - Kutta: Este mtodo encuentra una solucin aproximada de la ecuacin diferencial partiendo de un polinomio de Taylor determinado. Cuando el polinomio de Taylor utilizado es de grado 2, se habla de un mtodo de Runge - Kutta de segundo orden (RK2)RK2|seeMtodo de Runge - Kutta; si por ejemplo, un algoritmo RK proviene de un polinomio de Taylor de grado 4, es denominado mtodo de Runge - Kutta de 4 orden, o simplemente RK4RK4|seeMtodo de Runge Kutta5 . Este ltimo es uno de los procedimientos ms utilizados para resolver problemas de valor inicial, por su fcil programacin, estabilidad y velocidad de solucin.
funcin en un punto es aproximadamente igual a la derivada de la funcin en un punto adyacente: g (x) g (x + h) o g (x h) g (x). 5 De la misma forma, el mtodo de Euler es tambin conocido como mtodo de Runge Kutta de primer orden, ya que se obtiene a partir de un polinomio de Taylor de grado 1.

222

GEDEM - Versin Preliminar La idea bsica del mtodo consiste en expresar las derivadas de orden superior del polinomio de Taylor, en trminos de la primer derivada. Para hallar la aproximacin de Runge - Kutta de, por ejemplo, segundo orden, partimos de la aproximacin de Taylor de grado dos:

x(t + h) = x(t) + hf t, x(t) +

h2 f t, x(t) +O(h3 ) 2

(9.7)

Una vez obtenida esta aproximacin, se busca formular la segunda derivada en trminos de la primera, f t, x(t) . Reorganizando los trminos de la ecuacin (9.7), tenemos:

x(t + h) x(t) +

h h f t, x(t) + f t, x(t) +hf t, x(t) 2 2

A partir de una aproximacin de Taylor de primer orden para una funcin de dos variables, es posible mostrar que:6

x(t + h) x(t) +

h h f t, x(t) + f t + h, x(t) + f t, x(t) 2 2

De esta forma, la ecuacin que determina el proceso iterativo en el mtodo de Runge - Kutta de segundo orden es:

xi+1 = xi +
donde,

1 (F1 + F2 ) 2

F1 = hf (ti , xi ) F2 = hf (ti + h, xi + F1 )
El siguiente script muestra una programacin del mtodo de Runge - Kutta de segundo orden. El nmero de iteraciones, el tamao del paso, la condicin y el tiempo iniciales deben ser especicados con anterioridad, al igual que debe ser denida la ecuacin diferencial en otro chero:
6

Si se desea revisar una deduccin estricta ver Kincaid (1994, pgs 514 - 516).

SISTEMAS DINMICOS x(1)=x0; t(1)=t0; for i=1:n f1=h*f(t(i),x(i)); f2=h*f(t(i)+h,x(i)+f1); x(i+1)=x(i)+0.5*(f1+f2); t(i+1)=t(i)+h; end

223

Para hallar la aproximacin de Runge - Kutta de cuarto orden, partimos del polinomio de Taylor de grado 4 y seguimos un procedimiento anlogo. As, la regla de iteracin es:

xi+1 = xi +
donde,

1 (F1 + 2F2 + 2F3 + F4 ) 6

F1 = hf (ti , xi ) F = hf (t + 1 h, x + 1 F ) 2 i i 2 2 1 1 F3 = hf (ti + 2 h, xi + 1 F2 ) 2 F = hf (t + h, x + F ) 4 i i 3
Dado que la aproximacin es realizada a partir de un polinomio de Taylor de grado 4, el mtodo de Runge - Kutta de orden 4 tiene un error asociado O h5 . Aunque es posible obtener mtodos RK de orden superior, con el n de disminuir la magnitud del error, su uso resulta ms costoso, en trminos de procesamiento, con respecto al algoritmo RK4.

Regla del Trapecio:Regla del TrapecioRegla del Trapezoide|seeRegla del Trapecio Recordemos que en la seccin 6.2 nos referimos a la Regla del Trapecio como un mtodo de aproximacin lineal de una integral. El procedimiento consista en dividir el intervalo de integracin en subintervalos, para luego sumar las reas de los trapecios de cada uno de estos, y as poder aproximar el rea bajo la curva. La frmula que utilizamos para calcular el rea de cada trapecio era:7
7

Ver la gura 6.1.

224

GEDEM - Versin Preliminar

x y0 + y1 2

(9.8)

La idea bsica de la Regla del Trapecio, en la solucin de IVPs, consiste en integrar la ecuacin diferencial (9.1) en el intervalo t, t+h y luego aproximarla utilizando la ecuacin (9.8). Al integrar la ecuacin diferencial (9.1) en el intervalo especicado obtenemos la siguiente expresin:

t+h

t+h

x(t)dt =
t t

f t, x(t) dt

(9.9)

t+h

x(t + h) x(t) =
t

f t, x(t) dt

Reorganizando trminos, llegamos a una regla de iteracin de la forma:


ti+1

xi+1 = xi +

f t, x(t) dt
ti

(9.10)

Por la ecuacin (9.8), la integral puede ser aproximada de la siguiente manera:


ti+1

f t, x(t) dt =
ti

h f (ti , xi ) + f (ti+1 , xi+1 ) 2

De esta forma, obtenemos la siguiente regla de iteracin, conocida como la Regla del Trapecio:

xi+1 = xi +

h f (ti , xi ) + f (ti+1 , xi+1 ) 2

El mtodo del Trapecio, al igual que el mtodo de Euler modicado, es un proceso implcito de solucin que resulta ser estable, aunque de baja velocidad y alto costo computacional. Una caracterstica esencial de los mtodos ya presentados es que son mtodos de un solo paso, es decir, calculan xi+1 tomando como base a xi . Sin embargo, existe otro tipo de algoritmos, denominados mtodos multipaso, que en cada iteracin hacen uso de los valores xi1 , xi2 , ..., x0 .

SISTEMAS DINMICOS

225

La diferencia entre cada uno de los mtodos multipaso radica en el numero de valores utilizados y en la forma como se realiza la aproximacin de la integral. Uno de los mtodos multipaso ms conocido es el Mtodo de Adams - Bashforth - Moulton, que presentamos a continuacin:

Mtodo de Adams - Bashforth - Moulton:Mtodo de Adams - Bashforth


- Moulton Este mtodo, adems de ser un algoritmo multipaso, hace parte de los mtodos denominados predictor - corrector. Esta clase de algoritmos realiza una primer iteracin para calcular una prediccin de xi+1 (predictor), y luego la utiliza para iterar de nuevo, con el n de obtener un valor corregido del clculo inicial de xi+1 (corrector). El algoritmo de Adams - Bashforth - Moulton consiste de dos procedimientos muy parecidos: el Mtodo Adams - Bashforth y el Mtodo Adams - Moulton. El primero se encarga de calcular el predictor, mientras que el segundo genera el corrector. Veamos cada uno de estos mtodos por aparte:

Mtodo Adams - Bashforth:Mtodo de Adams - Bashforth El algoritmo


consiste en aproximar la integral del sistema (9.10), encontrando los coecientes desconocidos (a, b, c, ...) de la siguiente ecuacin:
ti+1 ti

f t, x(t) dt = h af (ti , xi ) + bf (ti1 , xi1 ) + cf (ti2 , xi2 ) + ...

(9.11)

Dependiendo del nmero de valores anteriores utilizados, el orden de las frmulas de Adams - Bashforth cambia. Por ejemplo, si utilizamos los valores xi y xi1 , hablamos de una frmula Adams - Bashforth de orden 2, en la cual debemos encontrar los coecientes (a, b). A continuacin presentamos el procedimiento para obtener sus valores. Para facilitar la exposicin, y sin prdida de generalidad, supongamos que ti = 0 y h = 1. Por lo que nuestro problema consiste en resolver:
0+1 0

f t, x(t) dt af (0, xi ) + bf (0 1, xi1 )

(9.12)

Debemos determinar los coecientes a y b, exigiendo que la ecuacin (9.12) sea exacta cuando los integrandos son polinomios de segundo o menor grado.8 Tomamos como base los siguientes polinomios:
8

Aqu utilizamos el procedimiento propuesto por Kincaid (1994, pg 824)

226

GEDEM - Versin Preliminar

p0 (t) = 1 p1 (t) = t
De esta forma, los coecientes deben cumplir el siguiente sistema de ecuaciones:

1 0 1 0

p0 (t)dt = ap0 (0) + bp0 (1) p1 (t)dt = ap1 (0) + bp1 (1)

El primer sumando de las dos ecuaciones anteriores corresponde al trmino af (ti , xi ) de la ecuacin (9.11), y el segundo sumando corresponde al trmino bf (ti1 , xi1 ) de la misma ecuacin. Al solucionar las integrales denidas obtenemos dos ecuaciones en trminos de nuestras dos incgnitas a y b. Para la frmula de segundo orden, los coecientes son: a = 3/2 y b = 1/2, los cuales solucionan el siguiente sistema de ecuaciones.

1 = (1)a + (1)b 1 = (0)a + (1)b 2


Ahora consideremos una frmula Adams - Bashforth de orden 4. Debemos exigir que la aproximacin sea exacta cuando el integrando sea un polinomio de cuarto o menor grado. Tomamos como base los siguientes polinomios:

p0 (t) = 1 p1 (t) = t p2 (t) = t(t + 1) p3 (t) = t(t + 1)(t + 2)


De manera que las ecuaciones que deben satisfacer los cuatro coecientes son:

SISTEMAS DINMICOS

227

1=a+b+c+d 1 = b 2c 3d 2 5 = 2c + 6d 6 9 = 6d 4

La solucin del sistema es: a = 55/24, b = 59/24 c = 37/24 y d = 9/24. As, la regla de iteracin de la ecuacin (9.10) es:

xi+1 = xi +

h 55f (ti , xi ) 59f (ti1 , xi1 ) + 37f (ti2 , xi2 ) 9f (ti3 , xi3 ) 24 (9.13)

Es importante mencionar que el mtodo de Adams - Bashforth requiere, dependiendo del orden, cierto nmero de valores anteriores. Por lo general, se utiliza el algoritmo el RK4 para calcularlos. En estos casos el algoritmo RK4 es denominado algoritmo de inicio.

El siguiente script presenta una programacin del mtodo Adams - Bashforth de cuarto orden, en el que el algoritmo de inicio utilizado es el mtodo de Euler. El usuario debe denir previamente: el nmero de iteraciones n, la condicin inicial x0, el tamao del paso h, el tiempo inicial t0 y el nal tf. En otro chero es necesario especicar la ecuacin diferencial con la sintaxis dxdt=f(t,x).

228

GEDEM - Versin Preliminar x(1)=x0; t(1)=t0; h=(tf-t0)/n; for i=1:3 % Algoritmo de Inicio - Euler d=h*f(t(i),x(i)); x(i+1)=x(i)+d; t(i+1)=t(i)+h; end for i=4:n-3 % Formula de AB de cuarto orden x(i+1)=x(i)+(h/24)*(55*f(t(i),x(i))-59*f(t(i-1)... ,x(i-1))+37*f(t(i-2),x(i-2))-9*f(t(i-3),x(i-3))); t(i+1)=t(i)+h; end Partiendo de la condicin inicial, y utilizando el mtodo de Euler, el programa realiza tres iteraciones para calcular los primeros valores de x. Una vez obtenidos x1 , x2 y x3 , la regla de iteracin (9.13) es utilizada para generar los siguientes valores hasta alcanzar el nmero predenido de iteraciones n. En total el algoritmo realiza n iteraciones, tres con el algoritmo de Euler y el resto con la frmula de Adams - Bashforth.

Mtodo Adams - Moulton:Mtodo de Adams - Moulton Este mtodo resulta muy parecido a la frmula Adams - Bashforth; sin embargo, incorpora un elemento adicional, dado que la regla de iteracin que se obtiene es un algoritmo implcito. Ahora, buscamos los coecientes adecuados para aproximar la integral de la siguiente forma:

ti+1 ti

f t, x(t) dt = h af (ti+1 , xi+1 ) + bf (ti , xi ) + cf (ti1 , xi1 ) + ...

El procedimiento para hallar los valores de (a, b, c, ...) es el similar al utilizado para calcular los coecientes de la frmula de Adams - Bashforth. As, es posible obtener la frmula de Adams - Moulton de orden 5 para aproximar la integral con la siguiente regla de iteracin:

SISTEMAS DINMICOS

229

xi+1 = xi +

h 251fi+1 + 646fi 264fi1 + 106fi2 19fi3 720

(9.14)

donde fi = f (ti , xi ). Como podemos observar, el primer sumando dentro del parntesis est en trminos de xi+1 , es decir que el valor de la variable debe ser calculado de forma implcita. Debemos encontrar el xi+1 que cumpla la siguiente ecuacin:

xi+1 xi

h 251fi+1 + 646fi 264fi1 + 106fi2 19fi3 = 0 (9.15) 720

donde ti , ..., ti3 y xi , ..., xi3 son valores conocidos. Cuando el sistema dinmico es de tercer o mayor orden, la ecuacin (9.15) resulta ser no lineal, y su solucin, en cada iteracin, requiere el uso de algoritmos especiales.9 Como resultado de esto, el algoritmo implcito resulta ms estable, pero tambin, ms lento y ms costoso en trminos de procesamiento. Otra forma de calcular el valor de xi+1 consiste en introducir, en la ecuacin (9.14), el valor de xi+1 obtenido por el algoritmo de Adams - Bashforth. En otras palabras, en el algoritmo de Adams - Bashforth - Moulton, el resultado de la frmula de Adams - Bashforth es el predictor, mientras que el corrector es resultado de la frmula Adams - Moulton. El chero presentado en la siguiente pgina, muestra una programacin del mtodo Adams - Moulton de quinto orden junto con la frmula Adams - Bashforth de cuarto; como algoritmo de inicio se utiliza el RK4. El usuario debe denir previamente: el nmero de iteraciones n, el tamao del paso h, la condicin inicial x0, el tiempo inicial t0 y el nal nal tf. Tambin es necesario denir la ecuacin diferencial con la sintaxis dxdt=f(t,x).
Para una breve introduccin sobre los mtodos numricos utilizados para resolver ecuaciones no lineales ver Fackler (2003, cap. 3)
9

230

GEDEM - Versin Preliminar x(1)=x0; t(1)=t0; xp(1)=x(1); h=(tf-t0)/n; for i=1:3 % Algoritmo de Inicio - RK4 f1=h*f(t(i),x(i)); f2=h*f(t(i)+h,x(i)+f1); x(i+1)=x(i)+0.5*(f1+f2); xp(i+1)=x(i+1); t(i+1)=t(i)+h; end for i=4:n-3 % Calculo del predictor (Adams - Bashforth) xp(i+1)=xp(i)+(h/24)*(55*f(t(i),xp(i))-59*f(t(i-... 1),xp(i-1))+37*f(t(i-2),xp(i-2))-9*f(t(i-3),xp... (i-3))); % Calculo del corrector (Adams - Moulton) x(i+1)=x(i)+(h/720)*(251*f(t(i)+h,xp(i+1))+646*f... (t(i),x(i))-264*f(t(i-1),x(i-1))+106*f(t(i-2)... ,x(i-2))-19*f(t(i-3),x(i-3))); xp(i+1)=x(i+1); t(i+1)=t(i)+h; end El programa calcula inicialmente los valores x1 , x2 y x3 por el mtodo RK4. Con estos valores, y con x0 , el programa obtiene el predictor de x4 utilizando la frmula de Adams - Bashforth. Una vez obtenido el predictor (xp), el corrector es generado por medio del algoritmo de Adams - Moulton.

Los anteriores son los mtodos numricos bsicos utilizados para la solucin de problemas de valor inicial. Es importante conocer la tcnica aplicada por cada uno de los algoritmos ya que, dependiendo de las propiedades particulares del sistema dinmico, algunas veces resulta mejor utilizar uno u otro mtodo. Un ejemplo claro de

SISTEMAS DINMICOS esto son los sistemas dinmicos rgidos.Ecuaciones Diferenciales Rgidas

231

Para nalizar esta primera parte sobre mtodos numricos, a continuacin hacemos mencin a los sistemas dinmicos rgidos y la forma como se solucionan computacionalmente. Aunque en economa los sistemas de ecuaciones diferenciales rara vez resultan ser de este tipo, es necesario tener en cuenta este criterio a la hora de enfrentarse a un sistema dinmico, con el n de escoger el algoritmo ms eciente en trminos de estabilidad y velocidad de solucin.

Sistemas Dinmicos Rgidos


Ecuaciones Diferenciales Rgidas Un sistema de ecuaciones diferenciales se dice rgido cuando uno o varios valores propios de su matriz jacobiana asociada son demasiado grandes en magnitud.10 Esto implica que la solucin numrica es muy sensible a pequeos cambios en el tamao del paso, lo que puede generar errores importantes en el proceso de integracin numrica y, por tanto, en la aproximacin a la solucin de la ecuacin diferencial. Un ejemplo sencillo de una ecuacin rgida es la siguiente ecuacin diferencial:

x = 10x

(9.16)

La solucin analtica es de la forma x(t) = Ae10t , indicando que, a medida que pasa el tiempo, el valor de x(t) 0. Utilizando la frmula de Euler (ecuacin 9.3), la regla de iteracin que obtenemos, para este caso particular, es:

xi+1 = xi + h(10xi ) xi+1 = (1 10h)xi


Es claro que si en el proceso de integracin numrica utilizamos un tamao de paso h > 2/10, el proceso iterativo no converge (|x(t)| ), lo cual no concuerda con la intuicin de la solucin analtica. En la gura (9.1) se observa la solucin analtica y la solucin numrica de la ecuacin anterior con x0 = 10 y h = 0.21. Mientras la solucin analtica converge monotnicamente a cero, la solucin numrica presenta un comportamiento oscilante explosivo. Si reducimos el tamao del paso de
No existe una regla para denir cundo un valor propio es demasiado grande o no. Esto depende del sistema dinmico con que estemos trabajando. En el ejemplo, el valor propio = 10 resulta demasiado grande en magnitud, pero en otros casos tal vez no.
10

232

GEDEM - Versin Preliminar


Solucion Numerica vs. Solucion Algebraica
40

30

20

10

x(t)

10

20

30

x(t)=10e10t xi+1=(110h)xi
0 0.5 1 1.5 2 2.5 3 3.5 4

40

Figura 9.1: Solucin Numrica (h = 0.21)

0.21 a 0.09, obtenemos un comportamiento diferente en la solucin numrica (ver gura (9.2)). En este caso, aunque la solucin numrica no es completamente igual a la solucin analtica, s observamos un comportamiento similar (monotnico convergente). Es claro que la integracin numrica de la ecuacin x = 10x resulta muy sensible a cambios en el tamao del paso, lo que puede generar aproximaciones numricas muy diferentes a las soluciones analticas. En el ejemplo anterior, el problema de convergencia lo solucionamos reduciendo h. Sin embargo, este procedimiento presenta dos dicultades: 1) deducir qu tan pequeo debe ser el tamao del paso puede resultar complicado;11 y 2) an si lograramos obtener un h lo sucientemente pequeo, esto implica un mayor nmero de iteraciones y, por lo tanto, un mayor costo computacional. Otra forma de solucionar la ecuacin diferencial (9.16), consiste en utilizar el mtodo modicado de Euler (ecuacin 9.5). La regla de iteracin que obtenemos es:

En ecuaciones diferenciales sencillas es posible determinar un h lo sucientemente pequeo para obtener una solucin estable, pero con ecuaciones diferenciales ms complicadas este procedimiento resulta ms complejo y, en algunos casos, casi imposible.

11

SISTEMAS DINMICOS
Solucion Numerica vs. Solucion Algebraica
10 9 8 7 6 5

233

x(t)=10e x =(110h)x
i+1

10t

x(t)
4 3 2 1 0 1

0.5

1.5

2.5

3.5

Figura 9.2: Solucin Numrica (h = 0.09)

xi+1 = xi + h(10xi+1 ) xi xi+1 = (1 + 10h)


Por este mtodo, la integracin numrica resulta estable, sin importar el tamao del paso utilizado. En general, los mtodos ms utilizados para la solucin de sistemas dinmicos rgidos son los algoritmos implcitos, por su gran estabilidad con respecto al tamao del paso. La desventaja de estos algoritmos es su baja velocidad de solucin y su gran costo de procesamiento, lo que puede ser crucial en problemas de gran magnitud. Otros mtodos, como algoritmos predictor - corrector o el mtodo de Rosenbrock, tambin son utilizados para la solucin de ecuaciones diferenciales rgidas. Escoger un mtodo de solucin depende de las caractersticas particulares del sistema dinmico que estemos trabajando.

9.1.2.

Ejemplos Computacionales

MATLAB dispone de varias rutinas, o solvers, que utilizan algunos de los mtodos
presentados. En el Cuadro 9.112 se resean los diferentes solvers, los diferentes mTomado de MATLAB 6.1 Function Reference: ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb. Se obtiene acceso a este cuadro digitando en la Ventana de Comandos: doc ode45.
12

234

GEDEM - Versin Preliminar

todos numricos que utilizan, y las situaciones en las cuales se recomienda el uso de uno u otro. A continuacin presentamos algunas aplicaciones computacionales.
Comando ode45odesolvers!ode45 Tipo de Problema No Rgido Algoritmo Combinacin de un mtodo Runge-Kutta de cuatro con uno de cinco evaluaciones, conocido como el par de Dormand-Prince Combinacin de un mtodo Runge-Kutta de orden dos con otro de orden tres, denominado el par de Bogacki-Shampine Adams - Bashforth Moulton

ode23odesolvers!ode23

No Rgido

Uso Debe ser lizarse: s lucin en diatamen tiempo. Cuando cia de to rigidez m

ode113odesolvers!ode113

No Rgido

ode15sodesolvers!ode15s

Rgido

Frmulas de Diferenciacin Numrica (opcionalmente: Frmulas de Diferenciacin hacia Atrs) Frmula Modicada de Rosenbrock

ode23sodesolvers!ode23s

Rgido

ode23todesolvers!ode23t

Moderadamente Rgido

Regla del Trapecio

ode23tbodesolvers!ode23tb

Rgido

Frmula Implcita Runge-Kutta

de

Cuando ticularme luar o la escasa. E tipaso. Cuando inecient que el p do. Es ta multipas Como es solo paso te que OD una toler la matriz te. Slo si moderad se neces sin a numrico Cuando cias muy cionar sis

Cuadro 9.1: Rutinas de MATLAB

para solucionar IVPs

SISTEMAS DINMICOS

235

Todos los solvers de ecuaciones diferenciales que incluye MATLAB utilizan la misma sintaxis. Por esta razn, proponemos los siguientes pasos generales para solucionar un problema de valor inicial:

Paso 1: Denir en un m-file la ecuacin diferencial con la siguiente sintaxis:


f=odefun(t,x0,p1,p2,...), donde odefun es el nombre de la funcin. Sus inputs son un vector con los valores correspondientes al tiempo (t), las condiciones iniciales del problema (x0) y unos parmetros adicionales (p1, p2,...). En el caso de un sistema de ecuaciones diferenciales con n variables, se debe hacer un planteamiento matricial, siendo x0 un vector de tamao n 1 que contiene las condiciones iniciales de las n variables (ver el ejemplo 9.4).

Paso 2: En otro m-file, especicar las condiciones iniciales x0 y el intervalo


de tiempo t en el que se desea hallar la solucin. Este intervalo de tiempo puede construirse de dos maneras. Una forma es colocar el valor inicial y nal del tiempo, haciendo que el vector t sea de tamao 21. La otra posibilidad es determinar los m momentos en que se desea evaluar la solucin numricamente, donde el tamao del vector tiempo es m 1.

Paso 3: Fijar las opciones del solver para los distintos tipos de ecuaciones
diferenciales. El comando odegetodeget muestra los valores en los que estn conguradas actualmente estas opciones y odesetodeset permite modicar esta conguracin, a partir de la siguiente sintaxis: options=odeset('Opcin1','Valor','Opcin2','Valor',...) Entre otras, las principales opciones que se pueden congurar con odeset son:

Outputfcnodeset!Outputfcn : Establece la manera en que se ve la solucin de la ecuacin diferencial. Existen cuatro posibles valores: odeprintodeset!Outputfcn!odeprint (default): Despliega en la Command Window, la solucin numrica del sistema dinmico para las diferentes condiciones iniciales. odeplotodeset!Outputfcn!odeplot : Muestra grcamente la solucin a la ecuacin diferencial. El eje horizontal corresponde al tiempo y el eje vertical a x(t). odephas2odeset!Outputfcn!odephas2 : Contrasta grcamente la solucin de la ecuacin diferencial a partir de dos condiciones ini-

236

GEDEM - Versin Preliminar ciales diferentes. Cada eje corresponde a la solucin para cada una de las condiciones iniciales.

odephas3odeset!Outputfcn!odephas3 : Es similar a odephas2 pero para tres condiciones iniciales. Outputselodeset!Outputsel . Especica las componentes del vector solucin que son utilizadas por Outputfcn. Su valor debe ser un vector de nmeros enteros. Statsodeset!Stats : Visualiza, en la Ventana de Comandos, las estadsticas del proceso de integracin numrica. Su valores son on y off (default). Jacobianodeset!Jacobian : Permite asignar una funcin que calcula la matriz jacobiana de la ecuacin diferencial, con el n de reducir los costos computacionales al calcular la solucin. Su valor debe ser el nombre de la funcin. Vectorizedodeset!Vectorized : Se establece en on cuando la funcin odefun est vectorizada. InitialStepodeset!InitialStep : Sugiere un tamao inicial de paso13 . Su valor debe ser un escalar positivo.

utilizando la siguiente sintaxis:14

Paso 4: Invocar el solver para hallar la solucin de la ecuacin diferencial,

[T,X]=odesolver(@odefun,t,x0,options,p1,p2,...) Donde los inputs corresponden a:

odefun: funcin donde est contenida la ecuacin diferencial. t,x0: vector de tiempo y vector de condiciones iniciales previamente denidos. options: vector que dene las opciones que el odesolver va a utilizar. p1,p2,...: son los parmetros adicionales que puediera requerir la funcin odefun.
Por default, las rutinas de MATLAB calculan automticamente el tamao del paso. La sintaxis ms general es SOL=odesolver(@odefun,t,x0,options,p1,p2,...). Donde SOL es una variable estructura.
13 14

SISTEMAS DINMICOS

237

Cuando la funcin utiliza los parmetros adicionales, y no se congura alguna opcin, es necesario colocar [] en lugar de options, de modo que el solver no interprete el valor de alguno de los parmetros como el valor de las opciones. De otro lado, el solver entrega una serie de outputs, cuyas caractersticas son:

T: Un vector de tamao t 1 con los valores de la variable tiempo en los que se calcul la solucin (tambin conocidos como pasos). X: Una matriz de tamao t n, donde las columnas contienen la solucin de la ecuacin diferencial para cada una de las n condiciones iniciales.
A continuacin presentamos distintos ejemplos que ilustran la forma de utilizar cada solver de MATLAB , haciendo nfasis en las diferencias puntuales de cada rutina. Debido al gran nmero de opciones existentes, intentamos generalizar al mximo el uso de estas. La aplicacin exhaustiva de todas ellas, para cada ejemplo, se propone como ejercicio para el lector.

Ejemplo 9.1. Encontremos computacionalmente la solucin, los equilibrios y estudiemos la estabilidad de la siguiente ecuacin diferencial:

x=3x
Tomando las siguientes condiciones iniciales: x0 = 1 y x0 = 5. Al solucionar analticamente la ecuacin, encontramos que la solucin general es de la forma x(t) = 3 et C , con un nico equilibrio en x = 3, que adems es estable. A continuacin vamos a solucionar numricamente la ecuacin dinmica para comparar las soluciones analtica y computacional.

Paso 1. Crear la ecuacin diferencial en el archivo ej1.m:


function dxdt=ej1(t,x); dxdt=3-x;

Paso 2. En otro chero, jar las condiciones iniciales x0 y el intervalo de tiempo t


en el que se desea hallar la solucin: t=[0:0.1:5]; % Se especican todos los momentos x0=[1,5]; % Dos condiciones iniciales 1 y 5

238

GEDEM - Versin Preliminar

Paso 3. Denir las opciones del solver. En este ejemplo utilizamos outputfcn y
stats:
options=odeset('outputfcn',@odeplot,'stats','on');

Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Las caractersticas


de esta ecuacin diferencial permiten utilizar ode45: [T,X]=ode45(@ej1,t,x0,options); En la Ventana de Comandos se despliega un vector T, de tamao 51 1, que contiene los momentos en el tiempo (pasos) en los que se evalu la solucin de la ecuacin diferencial15 . Tambin se genera una matriz X, de tamao 51 2, que indica que ha evaluado la solucin en 51 momentos (pasos) partiendo de dos condiciones iniciales. Adems, las estadsticas del proceso son presentadas:

11 0 67 0 0 0

successful steps failed attempts function evaluations partial derivatives LU decompositions solutions of linear systems

Finalmente, MATLAB arroja el diagrama de fase (t, x), evidente en la Figura 9.3. Las dos trayectorias corresponden a cada condicin inicial, y los crculos a lo largo de ellas, sealan los momentos en los que se evalu la solucin. As encontramos que el equilibrio es x = 3 y es estable, por cuanto a partir de valores superiores e inferiores se converge asintticamente. Si deseamos visualizar el vector T y la matriz X sin generar el diagrama de fase, podemos hacer una pequea variacin en el Paso 3, deniendo la opcin Outputfcn como odeprint. As, MATLAB nos presenta a T y a X en la Ventana de Comandos, sin gracarlos. De otra parte, cuando tenemos diferentes condiciones iniciales, es posible, o deseable, realizar comparaciones entre las diferentes soluciones. Si en el Paso 3 denimos
En este caso, el vector T resulta ser igual al vector t. Slo cuando el vector t tiene dos componentes (t=[t0 tfinal]), MATLAB entrega un vector de salida T con un nmero diferente de componentes.
15

SISTEMAS DINMICOS
dxdt=3x
5

239

4.5

3.5

2.5

1.5

0.5

1.5

2.5

3.5

4.5

Figura 9.3: Diagrama de Fase (t, x) de x = 3 x

Outputfcn como odephas2, el programa genera la grca que observamos en la Figura 9.4. El punto inicial es (1,5), correspondiente a los dos valores de x en t0 ; y el punto nal es (3,3), indicando que cada solucin converge a x = 3. Nuevamente, los crculos a lo largo de la lnea indican los momentos en los que se evaluaron las soluciones.
Cuando la ecuacin diferencial es ms compleja, identicar el punto inicial y el punto nal resulta ms complicado. En estos casos, es posible observar que los ltimos momentos son gracados automticamente con crculos de color verde. Es necesario aclarar, que no siempre que las soluciones sean convergentes, el punto nal tendr ambas componentes iguales. Por ejemplo, cuando las soluciones convergen a diferentes equilibrios, el punto nal no tendr las componentes iguales. El siguiente ejemplo ilustra este caso, y la forma para poder identicar convergencia utilizando odephas2.

2.5 y x0 = 5; y el intervalo de tiempo:16 [0,3]; solucionemos la siguiente ecuacin diferencial:


Observemos que la solucin puede ser calculada a partir de cualquier momento del tiempo, no es necesario iniciar en t0 = 0.
16

Ejemplo 9.2. Tomando las condiciones iniciales: x0 = 1.5; x0 = 0.5; x0 =

240
dxdt=3x
5

GEDEM - Versin Preliminar

4.8

4.6

4.4

4.2

x =5
0

3.8

3.6

3.4

3.2

1.2

1.4

1.6

1.8

2.2

2.4

2.6

2.8

x =1
0

Figura 9.4: Contraste de Dos Condiciones Iniciales con odephas2

x = 4x2 x3 x 6
Encontrar la solucin general de esta ecuacin resulta complicado. Sin embargo, no es necesario encontrar la solucin para poder determinar que tiene tres equilibrios; dos estables (x = 3 y x = 1), y uno inestable (x = 2). Calculemos la solucin computacional y analicemos numricamente la estabilidad.

Paso 1. Crear la ecuacin diferencial en un chero llamado ej2:


function dxdt=ej2(t,x); dxdt=4*x.^2-x.^3-x-6;

Paso 2. En otro m-file, denir las condiciones iniciales x0 y el intervalo de tiempo


t en el que se desea hallar la solucin:17
t=[0 3]; % Se especica t inicial y t nal x0=[-1.5 -0.5 2.5 5]; % Separados por espacios

Paso 3. Denir las opciones del solver. Aqu vamos a utilizar las opciones18 outputfcn
Aqu denimos el vector tiempo y el vector x0 de una manera alternativa. Notemos que la funcin odephas2 la invocamos de una manera diferente a la utilizada en el Paso 3 del ejemplo 9.1.
18 17

SISTEMAS DINMICOS y outputsel: options=odeset('outputfcn','odephas2','outputsel',[1 3]);

241

Paso 4. Invocar el solver para hallar la solucin a la ecuacin. El solver que utilizamos es ode45:19

[T,X]=ode45(@ej2,t,x0,options);

El vector t contiene slo 2 elementos, correspondientes al momento inicial y al momento nal de evaluacin, y obtenemos un vector salida T de tamao 2501 1 cuyos elementos inician y terminan en estos dos valores, pero entre los que tambin se encuentran todos los dems momentos en que se evalu la solucin. De esta manera, cuando t contiene 2 elementos, no es posible controlar los momentos y el nmero de componentes adecuado es determinado por el solver. MATLAB tambin genera un vector X de tamao 2501 4, lo que signica que el proceso de solucin de la ecuacin diferencial se hizo en 2501 momentos a partir de cuatro diferentes condiciones iniciales. Al denir outputsel con el vector [1 3], le indicamos al solver que las condiciones que queremos contrastar, con odephas2, son la uno y la tres, es decir: x0 = 1.5 y x0 = 2.5. En la Figura 9.5 es posible observar la convergencia de ambas soluciones dado que los crculos correspondientes a los ltimos momentos se encuentran ms cerca unos a otros que los crculos de los momentos iniciales. Esto signica que el cambio en cada una de las soluciones, a medida que transcurre el tiempo, es cada vez ms pequeo. Adems, es claro que cada solucin converge a un equilibrio diferente porque el punto nal es (-1,3), indicando que la solucin de la primer condicin converge al equilibrio x = 1, mientras que la segunda lo hace a x = 3. A partir de la grca podemos comparar cul de las dos soluciones converge ms rpido. La solucin de la primer condicin inicial converge ms rpido que la tercera, dado que la curva, en los ltimos momentos, es casi vertical: el cambio en la solucin de x0 = 1.5 es casi cero, mientras que el de la tercera sigue siendo relativamente grande, aunque cada vez menor.
En realidad, las soluciones de los diferentes solvers son similares, por lo que hemos escogido el solver ms sencillo (ode45).
19

242
dxdt=4x x x6
3

GEDEM - Versin Preliminar


2 3

2.95

2.9

2.85

2.8

x =2.5 2.75
0
2.7

2.65

2.6

2.55

2.5 1.5

1.4

1.3

1.2

1.1

0.9

0.8

x =1.5
0

Figura 9.5: Comparacin de las Condiciones x0 = 1.5 y x0 = 0.5 Cuando ninguna de las soluciones converge, los crculos nunca se acercan unos a otros y, por el contrario, tienden a separarse (ver Ejercicio 7). Una situacin muy parecida, en la cual los crculos no se acercan unos a otros, sucede cuando una de las soluciones no converge, mientras que la otra s. En este caso, la grca muestra una curva horizontal, o vertical, dependiendo de cual de las dos soluciones sea convergente (ver Ejercicio 8). En resumen tenemos que si los crculos, de la grca obtenido con la funcin odephas2, tienden a acercarse unos a otros, entonces tenemos que ambas soluciones son convergentes; y si adems se presentan tendencias extremas como una curva horizontal o vertical, entonces alguna de las soluciones se encuentra convergiendo ms rpidamente que la otra. Por otro lado, cuando no observemos un acercamiento de los crculos, la existencia de una curva horizontal o vertical es indicio de que una de las soluciones converge, mientras que la otra no20 . La funcin odephas3 nos permite extender el anlisis comparativo a tres condiciones iniciales. En este caso, la grca es visualizada en tres dimensiones. Los criterios de convergencia son iguales a los de odephas2, siempre y cuando se tenga en cuenta que
Es claro que esta forma de identicar convergencia, adems de resultar muy subjetiva, depende ampliamente de la escala adoptada en cada eje, y slo es aplicable a ecuaciones diferenciales autnomas. Recomendamos complementar el anlisis basado en odephas2, con diagramas de fase (odeplot).
20

SISTEMAS DINMICOS

243

se trata de una grca 3D. La Figura 9.6 muestra la grca obtenida con odephas3, para las condiciones iniciales: x0 = 1.5, x0 = 0.5 y x0 = 2.5.
dxdt=4x x x6
2 3

2.9

2.8

x =2.5 0
2.7

2.6

2.5 0.4 0.6 0.9 0.8 1 1.2 1.3 1.2 1.4 1.5 1 1.1 0.8

x =0.5 0

x0=1.5

Figura 9.6: Contraste de Tres Condiciones Iniciales con odephas3

Ejemplo 9.3. Resolvamos la siguiente ecuacin diferencial no autnoma:


x= b atx2 x

Con las cuatro condiciones iniciales: x0 = 8, x0 = 2, x0 = 4 y x0 = 10, en el intervalo [0, 15]. Esta ecuacin no es separable, no es homognea y solucionarla analticamente es un proceso complejo. Veamos su solucin computacional con a = 0.4 y b = 30:

Paso 1. Crear la ecuacin diferencial en un m-file:


function dxdt=ej3(t,x0,a,b); dxdt=(b-a*t.*x.^2)./x; % Parametros Adicionales

Paso 2. En otro chero, denir las condiciones iniciales x0, el intervalo de tiempo
t y los valores de los parmetros a y b:

244

GEDEM - Versin Preliminar t=[0 15]; x0=[-8 -2 4 10]; a=0.4; b=30; % Denicion de los Parametros

Paso 3. Denir las opciones del solver. En este ejemplo no utilizamos opciones. Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Las caractersticas de
esta ecuacin diferencial hacen necesario utilizar una rutina para ecuaciones rgidas:21 [T,X]=ode23tb(@ej3,t,x0,[],a,b); Dado que hemos decidido no especicar ninguna opcin, debemos utilizar los parntesis cuadrados ([]) al momento de invocar la rutina. De lo contrario, el programa interpreta el valor del primer parmetro como el valor de las opciones.
dxdt=(300.4tx )/x
30

20

10

x(t)

10

20

30

10

15

Figura 9.7: Diagrama de Fase (t, x) de x =

batx2 x

Al igual que en cualquier ecuacin diferencial no autnoma, el o los equilibrios se encuentran en funcin del tiempo. En este caso, la ecuacin que describe los equilibrios (x = 0) es:
Cuando a toma valores grandes, o cuando la solucin se realiza para valores de t muy altos, el proceso de integracin numrica presenta problemas. Es posible utilizar cualquier rutina para solucionar ecuaciones diferenciales rgidas. Hemos escogido ode23tb por su mayor velocidad de solucin en este problema particular.
21

SISTEMAS DINMICOS

245

x(t) =

b at

Si utilizamos la opcin odeplot obtenemos el diagrama de fase (t, x) (Figura 9.7), en el que podemos observar que las trayectorias de equilibrio son estables porque, al partir de condiciones iniciales diferentes, las soluciones siempre convergen hacia ellas. Hasta ahora hemos resuelto una ecuacin diferencial a la vez, ahora presentaremos una generalizacin para la solucin de sistemas de ecuaciones diferenciales. El siguiente ejemplo ilustra el procedimiento de solucin de un sistema de 2 2.

Ejemplo 9.4. Resolvamos computacionalmente el siguiente sistema de ecuaciones:

v = 10u + 7v u = u + 4v
Con la condicin inicial v0 = 1 y u0 = 0, en el intervalo [0, 0.5]. La solucin analtica del sistema dinmico, dadas las condiciones iniciales, viene dada por las siguientes ecuaciones:

v(t) = 0.7143 e11t + 0.2857 e3t u(t) = 0.2857 e11t 0.2857 e3t
El nico equilibrio es v = 0 y u = 0 y, dados los valores propios de la matriz (1 = 11, 2 = 3), sabemos que se trata de un equilibrio de punto de silla. Ahora calculemos numricamente la solucin y comparemosla con la solucin anterior.

Paso 1. Denir el sistema dinmico en el archivo ej4.m

246 function dxdt=ej4(t,x); v=x(1); % componente 1 de x es v u=x(2); % componente 2 de x es u dvdt=10*u+7*v; dudt=u+4*v; % Sistema dinamico

GEDEM - Versin Preliminar

dxdt=[dvdt; dudt]; % componente 1 de dxdt es dvdt % componente 2 de dxdt es dudt

Paso 2. En otro chero, denir el intervalo de tiempo t y las condiciones iniciales


x0:
t=[0 0.5]; v0=1; u0=0; x0=[v0; u0]; % componente 1 de x0 es v0 % componente 2 de x0 es u0

Paso 3. Denir las opciones del solver. En este ejemplo utilizamos odeplot como
funcin de salida: options=odeset('outputfcn','odeplot');

Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Utilizamos la rutina


ode45:22

[T,X]=ode45(@ej4,t,x0,options); En este caso, para solucionar el sistema dinmico, creamos una vector x que contiene a las variables v y u. De esta forma, el vector de condiciones iniciales x0 tiene los valores de las condiciones iniciales para cada variable (v0 y u0); y el vector dxdt
Dado que el mximo valor propio de la matriz asociada al sistema no es mucho ms grande, en valor absoluto, que el valor propio ms pequeo, estamos seguros que el sistema dinmico no es rgido.
22

SISTEMAS DINMICOS

247

tiene los valores de la derivada de cada variable con respecto al tiempo (dvdt y dudt). Al plantear de esta forma el sistema dinmico, las rutinas de MATLAB pueden solucionar simultneamente ambas ecuaciones. Como salidas, ode45 genera un vector T, de tamao m1, que contiene los momentos de evaluacin de la solucin; y una matriz X, de tamao m 2, donde las columnas son la solucin para cada variable.23 La funcin odeplot genera simultneamente los diagramas de fase (t, v ) y (t, u) en la misma grca (ver Figura 9.8 a.). Por otro lado, si utilizamos la funcin odephas2 obtenemos el diagrama de fase (v, u) (Figura 9.8 b.). En ambas grcas podemos observar que las soluciones para cada variable son no convergentes.
a)
150 70

b)

60

50 100

v(t) u(t)

40

v(t)

u(t)
30

50

u(t)
20

10

0 0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

0 0

20

40

60

80

100

120

140

160

180

v(t)

Figura 9.8: a) Diagramas de Fase (t, v) y (t, u)

b) Diagrama de Fase (v, u)

Para poder observar que (0,0) es un equilibrio de punto de silla es necesario tomar en cuenta ms condiciones iniciales alrededor de este punto. Sin embargo, considerar ms condiciones implica un problema, ya que las rutinas de MATLAB , a pesar de solucionar sistemas dinmicos de varias variables, no permiten solucionarlos para ms de una condicin inicial a la vez. Si, por ejemplo, necesitamos comparar las soluciones de dos condiciones iniciales, debemos solucionar dos veces el sistema dinmico. El siguiente ejemplo presenta la solucin del sistema para 3 condiciones iniciales, por medio de la rutina rk4.
Cuando trabajamos con una sola ecuacin diferencial, si la matriz obtenida X tena un tamao de mn, esto signicaba que la solucin era calculada en m momentos, para n condiciones iniciales. Ahora, el tamao m n de la matriz X indica que se han calculado las soluciones de n variables para m momentos.
23

248

GEDEM - Versin Preliminar

Ejemplo 9.5. Queremos solucionar el mismo sistema de ecuaciones del ejemplo


anterior, en el intervalo [0, 0.25], para las siguientes 3 condiciones iniciales:

1. (v0 , u0 ) = (10, 9) 2. (v0 , u0 ) = (10, 10) 3. (v0 , u0 ) = (10, 11)


Para poder solucionar el sistema dinmico simultneamente para las 3 condiciones, vamos a utilizar el solver rk4, que hace parte del toolbox CompEcon. Como su nombre lo indica, esta rutina utiliza el mtodo de Runge - Kutta de cuarto orden para hallar la solucin. El comando presenta la misma sintaxis de los odesolvers de MATLAB , aunque no existe la posibilidad de denir algn tipo de opciones. Es necesario resaltar que el solver utiliza un tamao de paso jo, por lo que slo puede ser utilizado para solucionar sistemas dinmicos no rgidos. Por tal razn, la nica forma de solucionar un sistema rgido, para las diferentes condiciones iniciales, es por medio de una programacin especial que involucra varias iteraciones (ver ejercicio 9). A continuacin presentamos el procedimiento de solucin:

Paso 1. Denir el sistema dinmico en un m-file llamado ej5:


function dxdt=ej5(t,x,ag); % Requiere ag v=x(1); % la sintaxis es la misma que en ej4.m u=x(2); dvdt=10*u+7*v; dudt=u+4*v; dxdt=[dvdt; dudt];

Paso 2. En otro archivo, denir las condiciones iniciales x0 y el intervalo de tiempo


t:
t=[0:0.05:0.5]'; v0=[10 10 10]; u0=[-9 -10 -11]; x0=[v0; u0]; % Vector Columna con Momentos

SISTEMAS DINMICOS

249

Paso 3. No es posible denir opciones. Paso 4. Invocar el solver para hallar la solucin a la ecuacin.
[T,X]=rk4('ej4',t,x0);

Para utilizar rk4 debemos introducir flag en la sintaxis de la funcin. Esto simplemente es utilizado para que, al igual que las rutinas de MATLAB , el solver pueda aceptar como entradas los parmetros adicionales. En este ejemplo no utilizamos parmetros adicionales, pero en la aplicacin econmica ser de gran importancia la denicin de estos parmetros para poder realizar simulaciones. Observemos que la denicin del vector tiempo tambin cambia. Mientras que para las rutinas de MATLAB no importa si el vector tiempo es un vector la o columna,24 el solver rk4 requiere que el vector de tiempo sea columna, y que contenga todos los momentos de evaluacin. En el Paso 2 creamos un vector la, con valores entre 0 y 0.5, y luego lo trasponemos para obtener el vector t. Los vectores v0 y u0 debemos denirlos de tal forma que la primer componente de ambos vectores generen la primer condicin inicial, y as sucesivamente. As, la tercer componente del vector v0 junto con la tercer componente del vector u0 conforman la tercer condicin inicial. Esto tambin implica que cada una de las columnas de la matriz x0 es una condicin inicial. Como resultado obtenemos el vector T de 11 1, igual al vector t, y la hipermatriz X de 11 2 3. Las dimensiones de X indican que solucionamos un sistema con 2 variables, para tres condiciones iniciales, en 11 momentos diferentes. Al contrario de los solvers de MATLAB , la rutina rk4 no genera ningn tipo de grca, debemos gracar manualmente los diagramas de fase:

Diagramas de Fase (t, v) y (t, u): Para generar los diagramas de fase para cada una de las variables, necesitamos utilizar el comando squeeze para remover una de las dimensiones de la hipermatriz,25 y luego gracar contra el tiempo. Por ejemplo, para gracar el diagrama de fase (t, v ) tenemos que remover la dimensin de la variable u:
En todos los ejemplos anteriores hemos denido el vector tiempo como un vector la, sin embargo, los resultados no cambian si el vector tiempo es un vector columna. 25 El comando squeeze remueve la dimensin de una matriz. Vase Cuadro 2.1, pg. 33.
24

250 plot(t,squeeze(X(:,1,:)))

GEDEM - Versin Preliminar

En este caso, la segunda dimensin corresponde a u. Si deseamos generar el diagrama de fase (t, u) debemos remover la primera dimensin: plot(t,squeeze(X(:,2,:))) En ambos diagramas de fase, Figura 9.9, se observa que para dos de las condiciones iniciales las soluciones de ambas variables son explosivas, mientras que para la otra, los valores de v y u se acercan lentamente hacia 0.
a)
200 80

b)

150

60

100

40

50

20

v(t)

u(t) 0
20

50

100

40

150

60

200 0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

80 0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

Figura 9.9: a) Diagrama de Fase (t, v)

b) Diagrama de Fase (t, u)

Diagrama de Fase (v, u): Para gracar este diagrama de fase, tambin es necesario utilizar squeeze. Sin embargo, ahora gracamos una dimensin versus la otra, as: plot(squeeze(X(:,1,:)),squeeze(X(:,2,:))) De esta forma obtenemos el diagrama de fase (v, u) evidente en la Figura 9.10. Como se puede observar, las condiciones (10,-9) y (10,-11) generan soluciones inestables que se alejan rpidamente del equilibrio. Por otro lado, la condicin inicial (10,-10) sigue una trayectoria hacia el equilibrio (0,0). Si hubiramos calculado la solucin para un intervalo de tiempo ms grande, observaramos cmo la trayectoria que parte en (10,-10) naliza en el punto de equilibrio.

SISTEMAS DINMICOS
15

251

10

u(t) 0

10

15 25

20

15

10

10

15

20

25

v(t)

Figura 9.10: Diagrama de Fase (v, u) Para determinar que efectivamente el equilibrio es de silla es necesario tomar ms condiciones iniciales alrededor de (0,0). El resultado que se obtiene es consistente con la solucin analtica del problema.

9.1.3.

Aplicaciones Econmicas

El Modelo de Crecimiento de Solow


Modelo de Crecimiento de Solow El modelo de crecimiento de Solow es uno de los modelos ms utilizados en el anlisis econmico de muy largo plazo. El modelo fue propuesto por el economista Robert Solow en un artculo publicado en 1956 en el Quarterly Journal of Economics,26 en el que buscaba contrastar los resultados obtenidos en el modelo de Harrod - Domar con los resultados de un modelo en el que se mantenan los mismos supuestos pero la funcin de produccin agregada cambiaba. Suponiendo la existencia de una funcin agregada con rendimientos constantes a escala, Solow logra encontrar, al contrario de Harrod - Domar, que el equilibrio de largo plazo es estable. Con el objetivo de aplicar las herramientas computacionales presentadas en las secciones anteriores, a continuacin presentamos el modelo bsico y su respectiva proSolow, Robert. 1956. A Contribution to the Theory of Economic Growth. Quarterly Journal of Economics. Vol. 70, No. 1 (Feb. 1956), 65-94.
26

252 gramacin.27 Modelo:

GEDEM - Versin Preliminar

Suponemos que existe un slo bien en la economa; su nivel de produccin en el momento t es Yt . Una parte de esta produccin es consumida y la otra es ahorrada. La fraccin del producto que se ahorra es constante y viene determinada por la propensin marginal a ahorrar s, as que el ahorro total en el momento t es St = sYt . El stock de capital, Kt , consiste en la acumulacin del nico bien de la economa. El cambio en el tiempo de este stock de capital (dKt /dt o Kt ) es la inversin neta.28 Adems, como el ahorro siempre es igual a la inversin tenemos la siguiente identidad bsica en cada instante del tiempo:

Kt = sYt

(9.17)

El nico bien de la economa es producido utilizando capital y trabajo. La tecnologa disponible en la economa se encuentra representada por la siguiente funcin de produccin:

Yt = F (Kt , Lt )

(9.18)

Adems se supone que la produccin presenta rendimientos constantes a escala, por lo que esta funcin se supone homognea de grado uno.29 Introduciendo (9.18) en (9.17) obtenemos:

Kt = sF (Kt , Lt )

(9.19)

Por otro lado, como resultado de un crecimiento exgeno y continuo de la poblacin, la fuerza laboral L se incrementa a una tasa constante n, es decir:

Lt = L0 ent
27

(9.20)

En esta seccin nuestro objetivo es presentar la programacin computacional del modelo de Solow. Para una exposicin terica ms profunda recomendamos revisar el siguiente libro (?), el artculo original o cualquier texto gua del primer curso de macroeconoma. 28 Hablamos de inversin neta pues suponemos que no hay depreciacin de capital. Cuando existe depreciacin de capital, la inversin neta es igual a la inversin bruta descontando la depreciacin. La programacin del modelo con depreciacin se deja como ejercicio para el lector (ver ejercicio 11). 29 Adems del supuesto de homogeneidad de grado uno, por lo general se supone que la funcin de produccin cumple las siguientes condiciones: FK > 0, FL > 0, FKK < 0, FLL < 0, FKL > 0 y las denominadas condiciones de Inada.

SISTEMAS DINMICOS

253

En (9.19) L es el empleo total y en (9.20) L es la oferta disponible de trabajo. Asumiendo que la economa siempre se encuentra en pleno empleo, es posible introducir (9.20) en (9.19) obteniendo:

Kt = sF (Kt , L0 ent )

(9.21)

La anterior es una ecuacin diferencial de una sola variable, K(t), que determina la senda de acumulacin de capital consistente con el pleno empleo de la fuerza laboral disponible en cada momento del tiempo. Una vez conocemos las sendas del stock de capital y de la fuerza de trabajo, junto con la funcin de produccin, podemos calcular la senda temporal del producto real. Con estas tres podemos calcular la productividad marginal del trabajo y del capital, y por consiguiente el salario real y la tasa de inters. Nos interesa reexpresar la ecuacin (9.21) en trminos per cpita puesto que no es correcto decir que un pas es ms rico porque produce ms que antes; ms bien se considera que un pas es ms rico si sus habitantes, en promedio, producen ms que antes.30 Por otro lado, plantear el modelo en variables per cpita resulta conveniente desde el punto de vista analtico, dado que permite caracterizar grcamente la ecuacin diferencial. La ecuacin (9.22) dene la variable k como la relacin capital trabajo. Esta relacin indica el nmero de mquinas, o cualquier otro bien de capital, que hay por cada trabajador.

kt =

Kt Lt

(9.22)

Para calcular la tasa de crecimiento de la variable k , sacamos logaritmo a ambos lados de la ecuacin y luego derivamos con respecto al tiempo obteniendo:

kt Kt Lt = kt Kt Lt

(9.23)

Reemplazando la tasa de crecimiento de la fuerza de trabajo y la ecuacin (9.21) obtenemos:


30

(?, p. 19)

254

GEDEM - Versin Preliminar

kt sF (Kt , Lt ) = n kt Kt kt 1 = sF 1, n kt kt 1 kt = skF 1, nkt kt kt = sF (kt , 1) nkt

(9.24)

La funcin F (kt , 1) representa la produccin total generada por k unidades de capital per cpita, cuando una unidad de trabajo es utilizada. De esta forma, el primer trmino de la ecuacin (9.24) correspondera a la fraccin ahorrada de la produccin por habitante. El segundo trmino indica que el stock de capital disminuye como consecuencia del crecimiento de la poblacin. Finalmente es posible observar que el capital per cpita crece, decrece y es constante cuando el ahorro per cpita es mayor, menor e igual que el trmino nkt . Hasta el momento slo hemos denido algunas propiedades generales de la funcin de produccin, pero al programar debemos utilizar una funcin de produccin especca. En este caso vamos a trabajar con la funcin de produccin tipo Cobb - Douglas31 con = 0.5 y = 0.5. Por lo tanto la funcin de produccin per cpita es:

0.5 F (Kt , Lt ) = Kt L0.5 t 0.5 F (kt , 1) = kt 10.5 0.5 F (kt , 1) = kt

Tambin es necesario denir unos valores para las tasas de ahorro y crecimiento de la poblacin. Suponemos que s = 15.5 % y n = 2.2 %. A continuacin presentamos la respectiva programacin del modelo. Programacin: En primer lugar debemos crear un m-file, llamado fsolow.m, en el cual vamos a especicar la ecuacin diferencial (9.24). Al contrario de los ejemplos anteriores, en los cuales la nica funcin especicada en el m-file era la ecuacin diferencial, en el mismo chero vamos a denir kt y la funcin de produccin per cpita:
31

Ver caps. 4,5 y 7

SISTEMAS DINMICOS function dk=fsolow(t,k,alpha,s,n); dk=s*produccion(k,alpha)-n*k; function y=produccion(k,alpha); y=k.^alpha;

255

Las dos primeras lneas de programacin son utilizadas para denir la ecuacin diferencial (9.24). Observemos que la funcin de produccin no es denida en estas lneas, simplemente es referenciada. La funcin de produccin tipo Cobb-Douglas es especicada en las dos ltimas lneas del programa. Esta forma de programacin es muy utilizada por cuanto permite disminuir el nmero de cheros destinados para el modelo al tiempo que genera mayor exibilidad en la especicacin del mismo. El siguiente paso consiste en construir un nuevo chero, llamado solowprog.m, en el cual vamos a denir los parmetros del modelo y a invocar la rutina de solucin ode45. clear; clc; close all alpha=0.5; s=0.155; n=0.022; t=[0:0.1:40]; k0=2; options=odeset('outputfcn','odeplot'); Vamos a considerar un horizonte de tiempo de (0,40) y, al igual que cualquier problema de valor inicial, es necesario imponer una condicin inicial por lo que k0 = 2. La rutina de solucin y sus opciones son invocadas de la misma forma que en los ejemplos anteriores. [T,K]=ode45(@fsolow,t,k0,options,alpha,s,n); El diagrama de fase (t, k) muestra que el capital per cpita de equilibrio corresponde a k = 49, 63

El Modelo de Crecimiento de Ramsey


Modelo de Crecimiento de Ramsey

El Modelo de Ciclo de Goodwin

9.2. Ecuaciones en Diferencia y Dinmica Discreta

256
Modelo de Solow
41.8

GEDEM - Versin Preliminar

41.6

41.4

41.2

41

kt
40.8

40.6

40.4

40.2

40

10

20

30

40

50

60

70

80

90

100

Figura 9.11: Diagrama de Fase (t, kt )

Ejercicios
1) Considere el siguiente Problema de Valor Inicial:

x = 4x x0 = 2
a) Calcule la solucin numrica utilizando el script del mtodo de Euler y del mtodo RK2, presentados en la primera seccin del captulo. La solucin numrica debe calcularse para 10 momentos, y para el intervalo de tiempo [0, 2] (Tenga en cuenta que debe calcular el tamao de paso adecuado para cubrir el intervalo de tiempo en 10 momentos). b) Graque la solucin algebraica y numrica de ambos mtodos en una misma gura. Existe alguna diferencia entre los dos mtodos? c) Construya un m-file en el que el tamao del paso itere tomando 20 valores. Estos valores deben encontrarse entre 0.05 y 1, y deben estar igualmente espaciados (Ayuda: utilice el comando linspace para generar este vector). Solucione el IVP considerado para 10 momentos y un tiempo inicial t0 = 0. Genere una gura para cada valor de h en la que se muestren las soluciones de ambos mtodos junto con la solucin algebraica. Qu sucede al cambiar el tamao del paso?Qu mtodo es ms estable?

SISTEMAS DINMICOS

257

2) Realice la programacin del mtodo de Runge - Kutta de cuarto orden presentado


en la pgina 223. El programa debe requerir los mismos inputs que el script del mtodo RK2. a) Solucione el IVP del ejercicio 1 con la programacin desarrollada. Los parmetros utilizados son los mismos que en el literal a. b) Compare grcamente la soluciones obtenidas por el mtodo RK2 y el RK4 con la solucin algebraica. c) Qu sucede si aumenta el tamao del paso?

3) Compare grcamente la solucin por el mtodo de Adams - Bashforth con el


mtodo de Adams - Bashforth - Moulton, en el intervalo [t, t + h]. De la siguiente ecuacin diferencial:

x= x0 =
Cul es ms sensible a cambios en el tamao del paso?.

4) Considere problema de valor inicial del ejercicio anterior.


a) Genere una matriz A202 donde la primer columna sea la solucin obtenida por el comando ode113 y la segunda la del script del algoritmo Adams Bashforth - Moulton de la pgina 230. b) Calcule el vector columna d cuyas componentes cumplan la siguiente regla: dj = aj1 aj2 . c) Graque d contra el tiempo. Qu nos dice este resultado? (Aunque el mtodo utilizado sea el mismo, la diferencia radica en que el comando de MATLAB incorpora algoritmos adicionales para cambiar el tamao del paso segn sea necesario, permitiendo una mejor aproximacin a la solucin).

5) Construya un m-file en el que se muestre grcamente que el uso del mtodo


modicado de Euler soluciona el problema de integracin numrica de la siguiente ecuacin diferencial rgida:

x = 10x

258

GEDEM - Versin Preliminar

6) Considere el siguiente problema de valor inicial:

x = b ax x0 = 1.8
a) Construya un chero en el que, utilizando el comando tic toc de MATLAB , se compare el tiempo que requiere ode23 y ode23tb para solucionar el sistema en el intervalo de tiempo [0,0.5]. Tome a = 10, b = 20 y no especique los momentos de evaluacin. b) Asuma a = 10 y calcule el tiempo requerido por cada solver para 5 diferentes valores de b entre 20 y 1000. Qu sucede con el tiempo de solucin a medida que b toma valores ms grandes? Cul de las dos rutinas toma ms tiempo para solucionar el problema? c) Fije b = 100 y calcule el tiempo requerido por cada solver para 5 diferentes valores de a entre 10 y 10000. Qu sucede con el tiempo de solucin a medida que a toma valores ms grandes? Cul de las dos rutinas toma ms tiempo para solucionar el problema? d) Por qu una rutina es ms lenta que la otra? Explique.

7) Necesito una ecuacin diferencial que tenga un equilibrio inestable. Las dos condiciones iniciales no llevan al equilibrio. Ponerlos a gracar con odeplot y odephas2.

8) Necesito un IVP con dos condiciones iniciales, donde una converja y la otra no.
Ponerlos a gracar con odeplot y odephas2.

9) En el ejemplo 9.5, si el sistema dinmico planteado fuera rgido, no sera posible


utilizar la rutina rk4. Esto plantea un problema para solucionar simultneamente sistemas de ecuaciones rgidos para varias condiciones iniciales. Utilizando cualquier rutina de MATLAB para problemas rgidos, y con ayuda del comando for, construya un programa en el que en cada iteracin se encuentra la solucin para cada condicin inicial. El programa debe aceptar como entradas el nombre de la funcin que contiene el sistema dinmico, las condiciones iniciales, el intervalo de tiempo, y algunos parmetros adicionales. Como resultado, se debe obtener un vector T y una hipermatriz X de m n d.

10) Programe la funcin que contiene la ecuacin diferencial en el modelo de Solow,


de tal forma que acepte un parmetro p. Si el valor del parmetro es p = 0

SISTEMAS DINMICOS

259

k 1 entonces la funcin de produccin agregada es f (k) = min{ , }. Si el valor del parmetro es p = 1 entonces la funcin de produccin es f (k) = k . El chero debe aceptar como inputs (t, k, alpha, beta, p, s, n, d).

11) Extienda y programe el modelo de Solow incorporando la depreciacin de capital.


Suponga que el capital se deprecia a una tasa constante d.32

12) Utilizando el comando gradient determina la senda del salario real y la tasa de
inters del ejemplo planteado en la pgina 37.

32

Observe que la depreciacin total es: D = dK(t).

260

GEDEM - Versin Preliminar

Bibliografa
Blanchard, Olivier. 1989. Lectures on Macroeconomics. The MIT Press. Draper, J., y Klingman J. (1979). Matemticas para Administracin y Economa. 5.a Reimpresin. HARLA S.A., Mxico. Fackler, P., y Mario Miranda. 2003. Applied Computational Economics and Finance. The MIT Press. Garca de Jaln, Javier et al. 2001. Aprenda Matlab 6.1 como si estuviera en primero. Escuela superior de Ingenieros Industriales. Universidad Politcnica de Madrid. Grossman, Stanley. 1996. Algebra Lineal. 5a. Mc. Graw Hill. Judd, Kenneth. 1998. Numerical Methods in Economics. Cambridge : The MIT Press. Kincaid, D., y Cheney W. 1994. Anlisis Numrico: Las Matemticas del Clculo Cientco. Addison-Wesley Iberoamericana, Delaware. Leithold, L. (1979). El Clculo con Geometra Analtica. 17.a Reimpresin. HARLA S.A., Mxico. Mantilla, Ignacio. (2004). Anlisis Numrico. 1.a Edicin. Universidad Nacional de Colombia. Monsalve, Sergio, ed. (2004). Matemticas Bsica para Economistas 3: Optimizacin y Dinmica. Mimeo: Universidad Externado de Colombia - Universidad Nacional de Colombia. . 2005a. Matemticas Bsicas para Economistas 0: Fundamentos. Universidad Nacional de Colombia y Universidad Externado de Colombia. . 2005b. Matemticas Bsicas para Economistas 2: Clculo. Universidad Nacional de Colombia y Universidad Externado de Colombia. 261

262

GEDEM - Versin Preliminar

Mora, Hector. 2001. Optimizacin no lineal y Dinmica. 2a. Universidad Nacional de Colombia. Facultad de Ciencias. Nicholson, Walter. 1997. Teora Microeconmica: principios bsicos y aplicaciones. 6a. McGraw-Hill. Sydsaeter, K., y Peter Hammond. (1996). Matemticas para el Anlisis Econmico. Prentice Hall, Madrid.

ndice alfabtico
acos, 53 alignment, 102 atan, 51 axis, 101 cat, 32 chol, 47, 78 clabel, 106 clc, 9 clear, 9 close, 9 color, 102 colorbar, 109 colormap, 108 contour, 106 contour3, 106 cross, 52, 63 cumtrapz, 171 dblquad, 177 det, 74 diag, 82 diff, 141, 152, 163 doc, 17 dot, 52 eig, 65 eps, 83 fdhess, 154, 188 fdjac, 142 fhess, 188 fjac, 142 font, 102 for, 14, 82 get, 103 gradient, 138, 149 grid, 100 help, 17 if, 13 inf, 98 inline, 94 inv, 73 ipermute, 35 legend, 100 line, 100, 102 linestyle, 102 linewidth, 102 lu, 46, 76 marker, 102 markersize, 102 mesh, 105 meshgrid, 57, 104 min, 191 ndims, 34 norm, 49 orth, 55 permute, 35 plot, 95, 188 plot3, 105 polyder, 136, 148 polyint, 169 qnwsimp, 175 qnwtrap, 173
263

264

GEDEM - Versin Preliminar

quad, 175 rref, 70 rrefmovie, 71 set, 103 size, 33 sparse, 37 squeeze, 34 subplot, 101, 115 surf, 105 syms, 163 texlabel, 100 text, 100 title, 100 trapz, 171 view, 101 xlabel, 100 ylabel, 100 zlabel, 100 svd, 50 Inputs, 10 Apndice integracin, 179 Bifurcacin, 13 Bucle, 13 Cell Array, 24 cell-array, 122, 124 comandos, 234-236 Comentarios, 7, 8 Command History, 5 Command Window, 2 CompEcon, 2 Compecon Toolbox, 173, 175 Concavidad, 183 Conjunto

de llegada, 94 de salida, 94 Conjuntos contorno inferior, 185 contorno superior, 185 constante de integracin, 169 Contador, 14 Convexidad, 183 Current Directory, 6 Curvas de nivel, 185 Derivacin de orden superior, 147 Derivacin de primer orden, 136 ejm8, 54 Entradas, 10 Error de Truncamiento, 137 Expansin de Taylor, 156 Funcin, 94 cncava, 184 CES, 126 Cobb-Douglas, 125, 128 convexa, 184 cuasicncava, 184 cuasiconvexa, 184 de dos variables, 103 visualizacin de, 103 de una variable, 94 visualizacin de, 94 discontinua, 98, 99 dominio de una, 94 Leontieff, 128 Lineal, 128 Mnimo, 128 parmetros de, 114 rango de una, 94 recorrido de una, 94

SISTEMAS DINMICOS

265

univariada, 188 Funcin Cobb-Douglas, 145 Funcion CARA, 132 CRRA, 132 Funciones, 10, 93 econmicas, 124 Gauss-Jacobi, 80, 81, 87 Gauss-Seidel, 80, 83 Grfico opciones de, 99, 108 Hipermatrices, 31, 35 comandos para, 33 imagen, 94 integracin, 167 integracin definida, 168 integracin indefinida, 168 integral, 169 Integrales Dobles, 176 Iteracin, 11 regla de, 80, 81, 83 Launch Pad, 3

directos, 70 factorizacin de Cholesky, 78 factorizacin de Crout, 76 indirectos, 70, 79 iterativos, 70 numricos, 70, 79 Matrices, 29 a partir de vectores, 57 de coeficientes, 69 de descomposicin, 80, 81, 83 determinante de, 43 dispersas, 36 comandos para, 37 divisin de, 41 divisin izquierda, 41 factorizables, 46 factorizacin de Cholesky, 47 factorizacin LU, 46 generadas automticamente, 37 introduccin de, 30 inversa de, 43 multiplicacin de, 41 norma de, 43 operaciones entre, 41 ortogonales, 55 potenciacin de, 41 rango de, 43 resta de, 41 suma de, 41 tipos de, 36 transpuesta de, 43 traza de, 43 triangular inferior, 77 triangular superior, 77 triangulares inferiores, 43 triangulares superiores, 43

M-File, 6, 8, 9 Mtodo analtico, 11 Gauss-Jordan, 70 inversa, 73 numrico, 11, 13 regla de Cramer, 74 Mtodo de aproximacin lineal, 170 Mtodo de Diferencia Finita, 137 Mtodos analticos, 70

266

GEDEM - Versin Preliminar

valores singulares, 47 Scripts, 10 Matrices Sentencia, 13 Dbilmente Condicionadas, 80Simulacin Matriz funciones de dos variables, ampliada, 70 121 definida negativa, 186 funciones de una variable, 114 definida positiva, 186 Sistemas de Ecuaciones, 69 escalonada reducida, 71 homogineos, 73 hessiana, 184 Sistemas Homogneos, 70 hessiana orlada, 185 Sistemas Singulares, 70 semidefinida negativa, 186 Symbolic Toolbox, 163 semidefinida positiva, 186 tematico, 217-221, 223, 225, 228, Matriz Hessiana, 149 231, 251, 255 Matriz Jacobiana, 142 Tolerancia, 83 Menor principal dominante, 186 Toolbox, 1, 3 Metodos factorizacin LU, 76 Valores propios, 64 Modelo de Cournot, 157 Variables Nodo, 173 peso, 173 ponderacin, 173 Objetos, 19 Optimizacin, 213 Outputs, 10 Pareja Ordenada, 103 Path, 16 Planos, 58, 61 distancia a un punto, 63 Rectas, 58, 59 Regla de Iteracin, 16 Regla de Simpson, 174 Regla del Exponente, 168 Regla del Trapecio, 170 Salidas, 10 simblicas, 13 Vectores, 29, 48 ngulo entre, 53 de resultados, 69 de variables, 69 direccin de, 50 magnitud de, 48 norma de, 48 operaciones entre, 51 producto cruz, 52 producto escalar, 52 proyeccin, 54 solucin, 69 Vectores propios, 64 Ventanas de Matlab, 2 Workspace, 4

Anda mungkin juga menyukai