Académique Documents
Professionnel Documents
Culture Documents
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
. . . . . . . . . . . . . . . . . . . . . . .
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
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
Segunda derivada con fhess . . . . . . . . . . . . . . Conjuntos Contorno de f (x) = x2 . . . . . . . . . . . . Conjuntos Contorno . . . . . . . . . . . . . . . . . . . Mtodo Grco - Concavidad y Convexidad . . . . . . Mtodo Grco - Cuasiconcavidad y Cuasiconvexidad
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
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
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
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
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
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.
CONCEPTOS BSICOS
(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
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
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.
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.
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,
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:
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:
12
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:
14
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:
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 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
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 .
Se sugiere consultar algunos textos como Fackler (2003), Judd (1998) y Mora (2001).
CONCEPTOS BSICOS
17
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
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
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
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
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.
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
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:
% 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
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:
mientras que en la segunda columna (lat(2)), contiene informacin sobre la participacin del consumo:
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:
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
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
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 {}.
A=[1,3,9;7,5,4]
O tambin de la forma:
A=[1 3 9;7 5 4]
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):
MATLAB
32
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:
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
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
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
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:
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
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.
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
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
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.
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)
[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
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:
MATRICES Y VECTORES
41
2.1.3.
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
42
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.
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)
Ejemplo 2.5. A partir del Cuadro 2.5, analicemos las caractersiticas de la matriz
A:
44
A23
1 3 2 = 7 5 4 3 6 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
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.
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:
48
(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.
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=
(2.4)
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:
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 :
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
P1
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
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
2.2.2.
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
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 ).
3:
MATLAB
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 =
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.
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
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]
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.
MATRICES Y VECTORES
Proyeccin de (u) en (v)
55
1.5
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 .
56
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
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.
[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
58
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.
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
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).
MATRICES Y VECTORES
61
p0=[-5,6,8,7]; p1=[9,-2,0,-2];
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
n P P0
dx + ey + f z = g
(2.17)
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)
MATRICES Y VECTORES
63
c=cross(p0p1,p0p2) c= -1 12 -5
P2 P = (x + 1, y + 2, z + 4)
(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.
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
As, llegamos a que el valor de la distancia entre el punto y el plano corresponde a d: 2.0925.
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
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:
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.
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
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
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 . . .
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
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.
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).
S1 = 1 0 0 1 -2 5
72
S2 = 1 0 0 0 1 0 -6 11 0 -4 10 0
S3 = 1 0 0 0 1 0 2.2 -0.2 0 0 0 1
SISTEMAS DE ECUACIONES
73
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
Conociendo entonces la inversa de la matriz, la solucin del sistema Ax = b est dada por:
x = Cb
(3.6)
x + y + 2z = 6 3x + 2y + z = 3 4x + 2y + z = 2
x = -1 1.6667 2.6667
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=
... a1n ... a2n ... . ... amn ... a1n ... a2n ... . ... amn
,y=
... 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:
76
x= -1 y= 1.6667 z= 2.6667
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)
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]
78
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.
SISTEMAS DE ECUACIONES
79
80
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:
, 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.
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.
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.
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:
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:
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
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:
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=
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
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
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)
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)
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:
(3.27)
donde r(k1) es el vector residual denido mediante r(k1) = b Ax(k1) . Replanteemos la ecuacin 3.27:
90
(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
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.
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:
96
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
4 (x1)2
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.
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.
98
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
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.
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 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.
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
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
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.1.
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
(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.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)
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
(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.
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
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
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
R.
110
x,y [90,90]
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
% 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
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
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).
FUNCIONES
113
title([Contourf]); xlabel(x);ylabel(y);zlabel(f(x,y));
Contour3, n = 30
30 1000 500 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
.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
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 .
14
8.5
5 38 .71
14
400
600
114
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
Se crearon n conjuntos de llegada o rangos, donde n es el nmero de valores que toma el parmetro (length(a)).
116
f(x)
0.4 0.3
f(x)
0 0.05 0.1 0.15 0.2
0.5
f(x)
f(x)
0 0.05 0.1 0.15 0.2
0.1
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
% Eje vertical
En este caso a toma valores entre 0.3 y 1.7, espaciados entre si por 0.2 unidades.
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
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)
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
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.
120
f(x) = asin(x)
9 8
f(x)
4 3 2 1 0 10
% Conjuntos de llegada
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
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.
122
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.
% 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)).
FUNCIONES
123
f(x,y)
6 4 2 0 2 2 0 1 1 0 2 2
f(x,y)
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
124
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)
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.
126
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
Paso 2. Crear los datos. Le damos valores positivos a los vectores de capital y trabajo. Denimos los valores de entre -15 y 1.
128
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
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
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
Lineal
f(x,y)
5 4 3 2
x Maximo
9
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
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
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
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
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 2: Crear los datos pertinentes y unirlos con las funciones y otros parmetros previamente jados en MATLAB para plantear la situacin.
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:
Ejemplo 5.1. Encontremos la derivada del polinomio g(x) = 5x4 9x3 41x + 32
137
Paso 1: Escribimos en MATLAB el vector de coecientes del polinomio que nos interesa derivar1
F=[5 -9 0 -41 32]
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
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=
(5.5)
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:
139
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
140
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:
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
142
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;
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:
143
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
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.
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
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:
147
[K,L]=meshgrid(k,l); Q=cobb(K,L,a,b);
Figura 5.5: Izquierda: Productividad Marginal del Capital. Derecha: Productividad Marginal del Trabajo.
148
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:
En particular, en este captulo se aborda la aproximacin de funciones por medio de la Expansin de Taylor.
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.
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
2/3
1.6
1.4
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:
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
2 2 2 2 2
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:
10
152
6 PX3
y 8 6 4 2 0 x 2 4 6 8 10
0 10
0 10
0 x
10
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.
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: A partir de estas derivadas, encontrar las derivadas respecto a cada variable:
ZXX=diff(Z,2,2) ZYY=diff(Z,2,1)
154
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.
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.
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.
156
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).
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);
5.2.6.
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
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
159
160
100
90
80
70
60
2 50
40
30
q*
20
10
10
20
30
40
50
60
70
80
90
100
q* 1
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:
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
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
Ejemplo 5.17. Derivemos c = 7 mediante una expresin simblica. Paso 1: Denir la expresin simblica:
c=sym(7)
164
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:
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:
166
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
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.
xn dx =
1 2
xn+1 +C 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:
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
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.
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
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
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.
x4 (49 x2 )1/2 dx
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
172
p
5 4 3 2 1 0 0 1 2 3 4 5 q 6 7 8 9 10 11 (q*,p*)
q2
192 dq (4 5) + 4q + 3
INTEGRACIN
173
[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 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
y1 y0
y2
yn2
yn yn1
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
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)
1 1+x2
es decir, calcular:
dx 1 + x2
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
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
12
10
p
6 Excedente del Productor 4 2 0 0 2 4 6 q 8 10 12
Ejemplo 6.8. Para observar las diferencias entre quad y qnwsimp, solucionaremos
la integral del Ejemplo 6.6 con 50 nodos.
Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderaciones w por el vector y: in=w*y Obtenemos: in= 0.8814
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
(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.
x3 + 2xy dydx
ind=dblquad(x.^3+2.*x.*y,-2,3,5,7)
Obteniendo como respuesta:
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
x2 )
11 2 p1 p
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.
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
180
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
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:
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
CONCAVIDAD Y CONVEXIDAD
185
Hf (x) =
(7.2)
Hf (x) =
(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:
186
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.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 .
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
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
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.
CONCAVIDAD Y CONVEXIDAD
189
2.5
f(x)
1.5
P1
0.5
10
15
190
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]
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:
192
f=x
30
0.25x
4.5
fxx = 8.75x
1.5
3.15x
2.5
20
10
f(x)
10
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.
x 2x2 +3
por
194
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.
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.
196
f(x) = x 4x + 6
8
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.
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.
(7.7)
(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 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
f(x,y)=x2+y2+(x+y)2
x 10 6 5 4
4
P1
P2
f(x,y)
3 2 1
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.
(7.9)
(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
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
[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.
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
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):
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
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.
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
CONCAVIDAD Y CONVEXIDAD
207
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
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.1.
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
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;
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:
212
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
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.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
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.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
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:
(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.
(9.2)
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
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
(9.4)
xi = xi1 + hf ti , xi )
Finalmente, la regla de iteracin para xi+1 es:
(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:
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) +
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) +
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,
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
224
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
xi+1 = xi +
f t, x(t) dt
ti
(9.10)
f t, x(t) dt =
ti
De esta forma, obtenemos la siguiente regla de iteracin, conocida como la Regla del Trapecio:
xi+1 = xi +
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:
(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
(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
226
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.
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
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 +
(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
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.
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:
232
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
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
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
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
ode23tbodesolvers!ode23tb
Rgido
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
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 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.
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.
238
Paso 3. Denir las opciones del solver. En este ejemplo utilizamos outputfcn y
stats:
options=odeset('outputfcn',@odeplot,'stats','on');
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
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.
240
dxdt=3x
5
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
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 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
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
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
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 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
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.
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.
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
Paso 3. Denir las opciones del solver. En este ejemplo utilizamos odeplot como
funcin de salida: options=odeset('outputfcn','odeplot');
[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)
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
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,:)))
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
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
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)
(?, p. 19)
254
(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:
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
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
256
Modelo de Solow
41.8
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
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
x= x0 =
Cul es ms sensible a cambios en el tamao del paso?.
x = 10x
258
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.
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).
12) Utilizando el comando gradient determina la senda del salario real y la tasa de
inters del ejemplo planteado en la pgina 37.
32
260
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
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
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
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