Está en la página 1de 282

Introducción a la

Economía Matemática en MATLAB

(Versión Preliminar)

Norma Gómez
Lida Quintero
Diego Corredor
Mario González
Norman Maldonado
Eduardo Sánchez

11 de octubre de 2005
2
Índice general

1. Conceptos Básicos 1
r
1.1. ¾Qué es MATLAB ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Ventanas de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1. Command Window . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.4. Command History . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.5. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. M-File Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4. Procesos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. Otros Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.1. Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.2. Help y Doc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.3. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

I ÁLGEBRA LINEAL 27

2. Matrices y Vectores 29
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1. Hipermatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1.2. Tipos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . 36
2.1.3. Operaciones Básicas entre Matrices . . . . . . . . . . . . . . . 41
2.1.4. Análisis de una Matriz . . . . . . . . . . . . . . . . . . . . . . 43
2.1.5. Matrices Factorizables . . . . . . . . . . . . . . . . . . . . . . 46
2.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.1. Análisis de un vector . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.2. Operaciones entre Vectores . . . . . . . . . . . . . . . . . . . 51

i
ii

2.2.3. Matrices y Vectores . . . . . . . . . . . . . . . . . . . . . . . 54


2.3. Rectas y Planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.3.1. Rectas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.3.2. Planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.3.3. Distancia entre un punto y un plano . . . . . . . . . . . . . . 63
2.4. Valores y Vectores Propios . . . . . . . . . . . . . . . . . . . . . . . . 64

3. Sistemas de Ecuaciones 69
3.1. Métodos Directos o Analíticos . . . . . . . . . . . . . . . . . . . . . . 70
3.1.1. Eliminación Gauss-Jordan . . . . . . . . . . . . . . . . . . . . 70
3.1.2. Método de la Inversa . . . . . . . . . . . . . . . . . . . . . . . 73
3.1.3. Regla de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.1.4. Factorización de Crout o LU . . . . . . . . . . . . . . . . . . 76
3.1.5. Factorización de Cholesky . . . . . . . . . . . . . . . . . . . . 78
3.2. Métodos Indirectos o Numéricos . . . . . . . . . . . . . . . . . . . . . 79
3.2.1. Matrices Débilmente Condicionadas . . . . . . . . . . . . . . 80
3.2.2. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.2.3. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.1. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.2. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.3.3. Método de Richardson . . . . . . . . . . . . . . . . . . . . . . 89

II CÁLCULO 91

4. Funciones 93
4.1. Funciones de una Variable . . . . . . . . . . . . . . . . . . . . . . . . 94
4.1.1. Visualización de funciones de una variable . . . . . . . . . . . 94
4.1.2. Opciones adicionales para los grácos . . . . . . . . . . . . . 99
4.2. Funciones de dos variables . . . . . . . . . . . . . . . . . . . . . . . . 103
4.2.1. Visualización de Funciones de dos variables . . . . . . . . . . 103
4.2.2. Opciones adicionales para los grácos . . . . . . . . . . . . . 108
4.3. Simulaciones en funciones de una variable . . . . . . . . . . . . . . . 114
4.4. Simulaciones en funciones de dos variables . . . . . . . . . . . . . . . 121
4.5. Análisis de Funciones económicas . . . . . . . . . . . . . . . . . . . . 124
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
iii

5. Derivación 135
5.1. Derivación 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. Aplicación: Una función de Producción tipo Cobb-Douglas . . 145
5.2. Derivación 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. Expansión de Taylor . . . . . . . . . . . . . . . . . . . . . . . 156
5.2.6. Aplicación: El Equilibrio en el Modelo de Cournot . . . . . . 157
5.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
5.4. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

6. Integración 167
6.1. Integración por Regla del Exponente . . . . . . . . . . . . . . . . . . 168
6.2. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.4. Integrales Dobles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

III OPTIMIZACIÓN Y DINÁMICA 181

7. Concavidad y Convexidad 183


7.1. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
7.1.1. Deniciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
7.1.2. Criterios de clasicación . . . . . . . . . . . . . . . . . . . . . 185
7.1.3. Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 más 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. Optimización 213
8.1. Optimización no lineal sin restricciones . . . . . . . . . . . . . . . . . 214
8.1.1. Minimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

9. Sistemas Dinámicos 217


9.1. Ecuaciones Diferenciales y Dinámica Continua . . . . . . . . . . . . . 217
9.1.1. Métodos Numéricos . . . . . . . . . . . . . . . . . . . . . . . 217
9.1.2. Ejemplos Computacionales . . . . . . . . . . . . . . . . . . . 233
9.1.3. Aplicaciones Económicas . . . . . . . . . . . . . . . . . . . . . 251
9.2. Ecuaciones en Diferencia y Dinámica Discreta . . . . . . . . . . . . . 255
Índice de guras

1.1. Conjunto Inicial de Ventanas . . . . . . . . . . . . . . . . . . . . . . 3


1.2. Command Window o Ventana de Comandos . . . . . . . . . . . . . . 4
1.3. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5. Command History . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7. Editor de M-Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.8. Comentarios con % . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.9. Ventana de Comandos y Resultados . . . . . . . . . . . . . . . . . . 9
1.10. Path de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.11. Help de pcb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.12. Documentación de clc . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.13. Estructuras pibp, pcon . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.1. Hipermatriz de 3 dimensiones . . . . . . . . . . . . . . . . . . . . . . 31


2.2. Distancia entre P1 y P2 . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3. La dirección del vector u = (7, −5) . . . . . . . . . . . . . . . . . . . 51
2.4. Producto cruz entre a y b . . . . . . . . . . . . . . . . . . . . . . . . 53
2.5. Proyección de a sobre b . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.6. a) Única Solución b) No Existe Solución c) Innitas soluciones . . . . 58
2.7. Una recta en tercera dimensión . . . . . . . . . . . . . . . . . . . . . 59
2.8. El vector ~n es perpendicular a todos los puntos del plano. . . . . . . 62

3.1. Modelo de vías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

4.1. Función Cúbica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97


4.2. Función Discontinua en x=1 . . . . . . . . . . . . . . . . . . . . . . . 98
4.3. Ejemplo 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.4. Malla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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. Simulación de una función 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. Simulación del parámetro a en f (x, y) = acos(xy) . . . . . . . . . . . . 123
4.16. Simulación del parámetro a en f (x, y) = x3 − ax2 y + 6xy 2 − y 3 . . . 125
4.17. Función Cobb-Douglas . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.18. Función CES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.19. Función CES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

5.1. Gráca de f (x) = x4 y su derivada . . . . . . . . . . . . . . . . . . . 139


5.2. f (x, y) = x2 + y 2 y su gradiente a escala distinta . . . . . . . . . . . 140
5
5.3. Derivada de f (x) = x 2 mediante diff . . . . . . . . . . . . . . . . . 141
1 1
5.4. La función de producción f (K, L) = K 3 L 3 . . . . . . . . . . . . . . 146
5.5. Izquierda: Productividad Marginal del Capital. Derecha: Productivi-
dad Marginal del Trabajo. . . . . . . . . . . . . . . . . . . . . . . . . 147
2
5.6. Las dos primeras derivadas de f (x) = x 3 . . . . . . . . . . . . . . . . 150
2
5.7. La tercera derivada de f (x) = x 3 mediante gradient y directamente 152
5.8. La función f (x, y) = x3 − 3xy 2 . . . . . . . . . . . . . . . . . . . . . 155
5.9. La función f (x) = x3 + y 3 . . . . . . . . . . . . . . . . . . . . . . . . 156
2
5.10. La función f (x) = 5x 3 − 32 y su aproximación 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. Integración Doble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

7.1. Método gráco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189


7.2. Gradiente numérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
7.3. Gradiente numérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
vii

7.4. Segunda derivada con fhess . . . . . . . . . . . . . . . . . . . . . . 194


7.5. Conjuntos Contorno de f (x) = x2 . . . . . . . . . . . . . . . . . . . . 195
7.6. Conjuntos Contorno . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
7.7. Método Gráco - Concavidad y Convexidad . . . . . . . . . . . . . . 198
7.8. Método Gráco - Cuasiconcavidad y Cuasiconvexidad . . . . . . . . 199

8.1. Comportamiento de f (x) . . . . . . . . . . . . . . . . . . . . . . . . . 215

9.1. Solución Numérica (h = 0.21) . . . . . . . . . . . . . . . . . . . . . . 232


9.2. Solución Numérica (h = 0.09) . . . . . . . . . . . . . . . . . . . . . . 233
9.3. Diagrama de Fase (t, x) de ẋ = 3 − x . . . . . . . . . . . . . . . . . . 239
9.4. Contraste de Dos Condiciones Iniciales con odephas2 . . . . . . . . 240
9.5. Comparación de las Condiciones x0 = −1.5 y x0 = −0.5 . . . . . . . 242
9.6. Contraste de Tres Condiciones Iniciales con odephas3 . . . . . . . . 243
2
9.7. Diagrama de Fase (t, x) de ẋ = b−atxx . . . . . . . . . . . . . . . . . 244
9.8. a) Diagramas de Fase (t, v) y (t, u) b) Diagrama de Fase (v, u) 247
9.9. a) Diagrama de Fase (t, v) b) Diagrama de Fase (t, u) . . . . . 250
9.10. Diagrama de Fase (v, u) . . . . . . . . . . . . . . . . . . . . . . . . . 251
9.11. Diagrama de Fase (t, kt ) . . . . . . . . . . . . . . . . . . . . . . . . . 256
viii
Índice de cuadros

1.1. Método Numérico para hallar x . . . . . . . . . . . . . . . . . . . . . 12


1.2. Algunos Comandos sobre Cadenas de caracteres . . . . . . . . . . . . 21
1.3. Algunos Comandos sobre Estructuras . . . . . . . . . . . . . . . . . . 23
1.4. Algunos Comandos para objetos Cell Array . . . . . . . . . . . . . . 25

2.1. Comandos para hipermatrices . . . . . . . . . . . . . . . . . . . . . . 33


2.2. Matrices generadas automáticamente . . . . . . . . . . . . . . . . . . 37
2.3. Algunos Comandos para Matrices Dispersas . . . . . . . . . . . . . . 38
2.4. Operaciones básicas entre matrices . . . . . . . . . . . . . . . . . . . 41
2.5. Comandos para analizar una matriz . . . . . . . . . . . . . . . . . . 43

9.1. Rutinas de MATLABr para solucionar IVPs . . . . . . . . . . . . . 234

ix
x
Introducción

En la academia a diario se producen desarrollos teóricos que más adelante llegan a


ser aplicados para la solución de una gran variedad de problemas reales. En particu-
lar, en economía y nanzas, se han producido desarrollos teóricos y prácticos para
abordar problemas económicos como el crecimiento, los ciclos y el diseño de política
económica, o nancieros como la valoración de activos nancieros y la cuanticación
del riesgo de un portafolio.

En general, para que tales desarrollos puedan ser utilizados se requiere hacer cálculos
matemáticos que en algunas ocasiones llegan a ser bastante complicados e incluso
imposibles de realizar analíticamente. Por otro lado, en la actualidad el uso de los
computadores para la solución de problemas se ha convertido en una práctica común
dada su gran capacidad de cálculo y precisión en comparación con los métodos tra-
dicionales.

Es posible entonces, en economía y nanzas, utilizar métodos computacionales para


realizar los cálculos que permitan aplicar los desarrollos teóricos y prácticos que se
producen en la academia. Por ejemplo, la estimación de modelos econométricos, la
calibración de modelos de equilibrio general, simulación de sistemas dinámicos, entre
otros, son desarrollos que necesitan utilizar métodos computacionales para la precisa
realización de los cálculos que estos requieren.

El presente texto ha sido desarrollado por GEDEM (Grupo de Estudios De Eco-


nomía Matemática) y tiene como objetivo facilitar a los estudiantes de las ciencias
económicas un primer acercamiento a la aplicación de métodos computacionales en
economía y nanzas. Especícamente, este libro va dirigido a estudiantes de Pre-
grado de carreras como Economía, Administración de empresas o Contaduría, ya
que utiliza aplicaciones en economía y en nanzas. En la mayoría de los casos los
libros que trabajan con herramientas computacionales en estas áreas están dirigi-
dos a estudiantes de Posgrado o de Doctorado, por lo cual pocas veces se enseña

xi
xii GEDEM - Versión Preliminar

el uso de herramientas computacionales como MATLABr en los cursos de Pregrado


relacionados con economía o nanzas matemáticas.

El texto se desarrolla con base en los temas básicos de la economía matemática como
son: Sistemas de ecuaciones lineales, matrices y vectores, rectas y planos, funciones,
cálculo diferencial e integral, optimización "libre" y restringida y sistemas dinámicos.
Cada uno de los temas mencionados es tratado en un capítulo en el que se presenta
el problema matemático a resolver y su correspondiente desarrollo computacional,
acompañado de ejemplos y ejercicios matemáticos y económicos que permiten una
plena comprensión del tema.

Existen temas más avanzados que no son objeto de estudio de este libro. En particu-
lar, temas como Optimización Dinámica, Ecuaciones Diferenciales y en Diferencias
Estocásticas, Optimización Dinámica 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 introducción a la utilización de métodos computacionales en Economía y
Finanzas, pero es útil en la medida que permite llenar el vacío existente entre las ma-
temáticas básicas que no se suelen enseñar computacionalmente y las matemáticas
avanzadas que casi siempre se tratan con este tipo de métodos.

El libro comienza con una breve introducción a los conceptos básicos de MATLABr en
el capítulo 1, y luego de ella, éste se divide en tres partes. La primera parte contiene
los Capítulos 2 y 3, y trata los temas relacionados con el Algebra Lineal. En el Ca-
pítulo 2 se trabajan las Matrices y los Vectores, junto con sus propiedades (inversa,
traspuesta, norma y traza, entre otros), y en el Capítulo 3, se estudian los sistemas
de ecuaciones y los diferentes métodos computacionales para resolverlos.

La segunda parte del libro está compuesta por los Capítulos 4, 5 y 6, y presenta el
análisis de funciones. El capítulo 4 muestra cómo utilizar MATLABr para visualizar
grácamente una función de una o de dos variables, y determinar a partir de este
gráco sus propiedades. Debido a las limitaciones en términos de dimensión y de
algunos cálculos especícos, en los capítulos 5 y 6 se abandona el método gráco
y se procede a analizar una función a partir del cálculo diferencial e integral. En
particular, en el capítulo 5 se explican en detalle las herramientas disponibles en
MATLABr para calcular numéricamente la derivada de una función en un punto o
en un conjunto nito de puntos, a partir de lo cual se pueden determinar regiones
INTRODUCCION xiii

en donde una función crece o decrece además de otras propiedades, mientras que en
el capítulo 6 se presentan los diferentes métodos numéricos que se pueden emplear
para calcular en MATLABr integrales denidas de cualquier tipo de función.

Finalmente en la última parte del libro se estudia el planteamiento computacional


de problemas de optimización estática y de sistemas dinámicos. En el capítulo 7
se presentan los métodos numéricos y la utilización de MATLABr para analizar la
concavidad y convexidad de una función. A partir de estos conceptos, en el capítulo 8
se muestra cómo resolver numéricamente en MATLABr problemas de optimización

estática, tanto restringida como no restringida o "libre"Finalmente, el capítulo ??


presenta las diferentes formas en que se puede hallar la solución numérica a sistemas
dinámicos, y a partir de ella analizar la existencia, unicidad y estabilidad de los
equilibrios que pueden tener este tipo de sistemas. Así, este último capítulo cierra el
libro pero es una buena introducción al planteamiento computacional de problemas
de tipo dinámico.

Todos los capítulos se desarrollan computacionalmente utilizando como herramien-


ta MATLABr . Existen otros programas para realizar cálculos matemáticos, como
por ejemplo C++, C, FORTRAN o JAVA. También, algunos autores han trabajado
en otras plataformas computacionales problemas especícos de economía. Por ejem-
plo, Thomas Rutherford ha trabajado la programación de Modelos de Equilibrio
General Computable en GAMS-MPSGE1 ; Hal R. Varian ha trabajado herramien-
tas matemáticas básicas y avanzadas utilizadas en economía por medio del lenguaje
Mathematica2 . Otros programas como Econometric Views, SPSS y SAS se enfocan
en trabajar computacionalmente la estadística y la econometría. Por otro lado, len-
guajes como Ox o Scilab trabajan de manera similar a MATLABr pero cuentan con
la ventaja de ser software de libre acceso.

En este texto hemos decidido trabajar con MATLABr por varias razones: en primer
lugar, muchos autores actualmente trabajan en MATLABr para resolver computacio-
nalmente problemas económicos. Por ejemplo, Thomas Sargent utiliza MATLABr para
modelos de política scal, inación y desempleo, y para resolver matemáticamente
juegos dinámicos y equilibrios de Nash, Filtro de Kalman y ecuación de Ricatti, entre
1
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.
xiv GEDEM - Versión Preliminar

otros. Uhlig3 desarrolla un conjunto de cheros en MATLABr que permite resolver


modelos dinámicos en tiempo discreto no lineales estocásticos. Muchos otros auto-
res trabajan sus cursos en MATLABr , como por ejemplo Olivier Blanchard y Finn
Kydland, y actualmente es utilizado en el Banco de la República para la construc-
ción de Modelos de Equilibrio General Computable. Además de esto, MATLABr es
muy común en el desarrollo de aplicaciones cientícas en otras ciencias naturales y
sociales.

En segundo lugar, la comunidad de usuarios de MATLABr constantemente está pro-


duciendo toolboxes de libre acceso por Internet que permiten utilizar MATLABr para
cierto tipo de problemas. Por ejemplo, en http://www.spatial-econometrics.
com está disponible un Toolbox que permite desarrollar modelos econométricos en
MATLABr . De esta manera, aunque existen programas especializados en el desa-
rrollo de ciertos temas, MATLABr también cuenta con aplicaciones que permiten
desarrollar en su plataforma este tipo de problemas.

Finalmente, a diferencia de otras herramientas computacionales, MATLABr permite


crear y editar rutinas especializadas en la solución 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. Además, su forma de programar es similar a la
de lenguajes tradicionales de programación como C++.

Debemos mencionar que esta es una version preliminar del libro, aunque el mismo ya
se encuentra registrado ante la Dirección Nacional de Derecho de Autor. Actualmente
el Grupo trabaja en la corrección del mismo. Cualquier comentario, corrección o
sugerencia por favor enviarla al correo electrónico grupogedem@yahoo.com.

3
Uhlig, Harald. A Toolkit for Analyzing Nonlinear Dynamic Stochastic Models Easily. CEPR
Capítulo 1

Conceptos Básicos
Diego Corredor, Norman Maldonado1

1.1. ¾Qué es MATLABr ?


MATLABr es un lenguaje de computación técnica de alto nivel y un entorno in-
teractivo para desarrollo de algoritmos, visualización de datos, análisis de datos y
cálculo numérico, es la abreviatura de MATrix LABoratory, y fue diseñado en los
70s como una interface que permitía la solución de grandes sistemas de ecuaciones
lineales. Desde entonces el software ha extendido su aplicación a diferentes campos
especícos, como la estadística, las redes neuronales, la lógica difusa, las nanzas, el
procesamiento de imágenes y sonido, etc., permitiendo manipular y solucionar sis-
temas dinámicos, datos estadísticos, información económica y nanciera, realizando
simulaciones de sistemas y estructuras en física, química y algunas ingenierías.

Este software se caracteriza por realizar sus cálculos utilizando matrices y vecto-
res, permitiendo manipular grandes cantidades de información de manera rápida y
sencilla, es una de las interfaces de mayor uso a nivel mundial, y actualmente se
trabaja con ella en Biotecnología, Medicina, Comunicaciones, Electrónica, Servicios
Financieros y Aeroespacio.

MATLABr dispone de un código básico y de varios toolboxes 2 , o librerías especiali-


zadas en el manejo y solución de problemas especícos, como por ejemplo, ecuaciones
diferenciales parciales, optimización restringida o en más de dos dimensiones, series
de tiempo, variables simbólicas, distribuciones de probabilidad, etc. Estos toolboxes
1
Favor enviar correcciones, comentarios o sugerencias a grupogedem@yahoo.com
2
Los toolboxes son paquetes de herramientas adicionales que el usuario tiene la posibilidad de
adquirir individualmente según sus necesidades particulares.

1
2 GEDEM - Versión Preliminar

son un conjunto de funciones compatibles con el código básico, y están diseñadas


para resolver problemas complejos que el programa inicialmente no puede solucionar
3.

Existen dos tipos de toolboxes: por un lado se encuentran los toolboxes diseñados
por el grupo creador de MATLABr (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 página web de
Mathworks Inc. 4 ). En este libro nos centramos en el código básico del programa y
en un toolbox de distribución gratuita denominado CompEcon5 aplicado a economía
y nanzas.

1.2. Ventanas de Matlab


Comenzamos por presentar las ventanas más importantes del programa. Al abrir
el programa por primera vez, se despliega un conjunto de ventanas como el que se
observa en la Figura 1.1.
Las ventanas desplegadas son: Command Window, Launch Path, Workspace, Com-
mand History y Current Directory6 ; cada una se explica a continuación.

1.2.1. Command Window


Esta ventana se encuentra ubicada en la parte derecha de la pantalla, y en ella
son digitados y ejecutados, simultáneamente, los comandos del programa. En esta
ventana también se muestran los resultados de todas las operaciones, tanto las de
MATLABr básico como las de los toolboxes. La ventana de comandos trabaja de la
siguiente forma: en la última línea que inicia con el símbolo (») se digita la instruc-
ción, y ésta es ejecutada al presionar la tecla `Enter'; luego de ello, en esta misma
ventana, son visualizados los resultados del procedimiento.

Por ejemplo si le decimos
1 + 5
al programa que realice la siguiente operación: 2 ; primero debemos digitar:
3
Dado que no está preprogramado para hacerlo.
4
La página web de The Mathworks Inc. es www.mathworks.com
5
Desarrollado por Paul Fackler y Mario Miranda, profesores de North Carolina State Univer-
sity y Ohio State University, respectivamente. Este toolbox se encuentra disponible en la dirección
www4.ncsu.edu/~pfackler/compecon/download.html y fue desarrollado como complemento del li-
bro Fackler y Miranda (2003)
6
El usuario puede cambiar la disposición de las ventanas en el menú de la barra de herramientas
view ⇒ desktop ⇒ layout. La Figura 1.1 corresponde a la opción Default de este menú.
CONCEPTOS BÁSICOS 3

Figura 1.1: Conjunto Inicial de Ventanas

(1+sqrt(5))/2

Luego presionamos `Enter'y el resultado es:

ans =
1.6180

Si por algún 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 aplicación.
En ella se señala cada uno de los elementos cargados en la iniciación del programa,
es decir, las herramientas de las cuales dispone el usuario para realizar sus cálculos.
Así, deben aparecer el código básico 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 MATLABr básico y algunos otros toolboxes (Communication Toolbox,
Control System Toolbox, Data Acquisition Toolbox, Database Toolbox, Datafeed
Toolbox, Filter Design Toolbox, etc).

A través de esta ventana, y desplegando el menú correspondiente a cada elemento


4 GEDEM - Versión Preliminar

Figura 1.2: Command Window o Ventana de Comandos

Figura 1.3: Launch Pad

(como se observa en la Figura 1.3) se puede acceder fácilmente a tutoriales, demos,


herramientas particulares, asi como a documentación referente a los elementos car-
gados.

1.2.3. Workspace
Esta ventana se encuentra en la misma posición del Launch Pad, y para acceder
a ella es necesario hacer click en la pestaña 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 sesión, en la columna Name se muestra el nombre de cada
una de las variables, en la segunda columna llamada Size se muestra el tamaño de
cada variable7 , en la tercera y cuarta columna se encuentran especicados el número
7
Dado que MATLABr trabaja con matrices, la especicación del tamaño de la variable es
CONCEPTOS BÁSICOS 5

Figura 1.4: Workspace

de bytes que ocupa cada variable y el tipo de variable u objeto8 .

1.2.4. Command History


Se encuentra ubicada en la parte inferior izquierda de la ventana principal y como su
nombre lo indica, su función 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 fácilmente 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 sesión son almacenados y
organizados por fecha, por medio del rótulo %-- Hora Fecha-- %

(Número de las × Número de columnas).


8
Los tipos de variables y sus características son presentados en la sección 1.5.3.
6 GEDEM - Versión Preliminar

1.2.5. Current Directory


También se encuentra en la parte inferior izquierda de la ventana principal. Para
acceder a Current Directory es necesario hacer click sobre la pestaña Current Directory
en la parte inferior izquierda de la pantalla, como se observa en la Figura 1.6.

Esta ventana permite que el usuario observe el directorio sobre el cual está traba-
jando, al igual que los archivos que se encuentran dentro de éste, como se muestra
en la Figura 1.6.

Figura 1.6: Current Directory

El lugar especicado por defecto para guardar los archivos del usuario es la carpeta
work, que se encuentra ubicada dentro de la carpeta principal del programa; si el
usuario guarda un archivo en alguna ubicación diferente (por ejemplo C:\Mis do-
cumentos), este no podrá ser abierto ni ejecutado, a menos que se le especique al
programa la ubicación del mismo.

Las anteriores son las ventanas básicas de trabajo. Existen otras de uso más especí-
co, como por ejemplo las ventanas de grácos o las de Demos; algunas de ellas las
describiremos a lo largo del libro.

1.3. M-File Editor


En algunas ocasiones, el usuario requiere utilizar varias líneas de comandos para
solucionar un problema especial. En estos casos no es recomendable utilizar la ven-
tana de Comandos, pues si algún error ocurre, es necesario volver a digitar todas las
instrucciones.
CONCEPTOS BÁSICOS 7

La ventana M-le Editor permite digitar los comandos en un programa o M-le que
recoge múltiples instrucciones, para ejecutarlas de manera secuencial (en orden de
líneas). 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

Además de permitir digitar múltiples instrucciones simultáneamente, un M-le puede


complementarse con comentarios, es decir, líneas que no son leídas por MATLABr pero
que sirven para construir de manera organizada estos programas colocando explica-
ciones luego de una o varias instrucciones. Para insertar un comentario, se digita el
símbolo  %  y luego se escribe el comentario. Cuando se comenta una línea, esta
aparece en color verde, como se observa en la Figura 1.8

Figura 1.8: Comentarios con %

En esta Figura podemos observar como, a medida que se va escribiendo el programa,


8 GEDEM - Versión Preliminar

se enumera cada renglón o línea en la parte izquierda de la pantalla. Al generarse un


error es posible ubicar donde se cometió, pues el programa indica la línea en donde
éste se encuentra. Adicionalmente, se observa que, para realizar comentarios, no es
necesario colocar siempre el símbolo  %  al comienzo de una línea, sino que también
se pueden colocar comentarios luego de una instrucción, como se observa en las líneas
3 y 4 de nuestro M-File.

Para comentar múltiples líneas, se deben seleccionar las líneas que se desean comentar
y luego de ello presionar Ctrl+R, o seleccionar en la parte superior del editor de M-
Files, Text ⇒ Comment. De manera similar, cuando se necesita quitar los  % de las
líneas 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 ubicación 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 operación 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 raíz 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 automáticamente antes de ser ejecutado): primero, presionando la tecla
F5; segundo, seleccionando Debug ⇒ Run en la parte superior del Editor de M-
Files; tercero, haciendo click sobre el ícono , en la ventana del editor; y cuarto,
9
Cuando no se ha guardado el archivo, al lado de esta ubicación aparece el símbolo  * , y una
vez guardado, éste desaparece.
CONCEPTOS BÁSICOS 9

escribiendo el nombre del M-le en la Ventana de Comandos y presionando Enter.


Los resultados de la ejecución 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 línea 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 corrección.
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 cálculo 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 líneas, pero solo muestra en la Ventana de Coman-
dos los resultados de aquellas líneas que NO terminan en ;. Así, cuando se
corren programas que crean matrices muy grandes o realizan cálculos extensos,
utilizar ; al nal de cada instrucción permite que el programa sólo ejecute
las instrucciones sin gastar tiempo en mostrar cálculos parciales o intermedios
(Siempre, mostrar los resultados parciales es computacionalmente ineciente).

Después de observar la salida es posible ejecutar el M-le varias veces y sigue


apareciendo el resultado anterior en la Ventana de Comandos MATLABr 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 - Versión Preliminar

por ejemplo, las nuevas ventanas que contienen grácos. 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 sucesión de
comandos análoga a la que se haría desde la Ventana de Comandos, este tipo de M-
les se conocen como cheros de comandos o Scripts , sin embargo existen otro tipo de
archivos .m que representan funciones . Una función, en términos computacionales, es
un programa que recibe unas entradas o inputs , y realizando cálculos matemáticos
y lógicos genera unas salidas u outputs . Todo el código básico de MATLABr y
los toolboxes están compuestos de M-les que son utilizados como funciones. Para
construir una función en un M-le, se debe colocar la sintaxis:

[salidas]=nombre(entradas)

donde salidas representa un vector de resultados que arroja la función a partir de


las entradas. En este caso, nombre corresponde al nombre de la función, y debe
ser también el nombre con el cual se guarda el M-le donde se construye la función.
Luego de esta primera línea deben aparecer otras líneas con las instrucciones para
realizar las operaciones matemáticas y lógicas que calculan las salidas u outputs de
la función. Para ilustrar estos conceptos veamos un ejemplo.

Un problema frecuente en álgebra es el de hallar las raíces o valores de x de una


ecuación cuadrática de la forma ax2 + bx + c = 0. Sabemos que las soluciones son:

−b ± b2 − 4ac
x1 , x2 =
2a
Podemos crear una función en un M-le de MATLABr , que calcule las raíces de
una ecuación cuadrática. Esta función, que llamaremos raiz, recibirá como input
o entradas los valores de a, b y c, y generará como output o salidas las 2 raíces o
valores de x. La sintaxis es la siguiente:

function [x1,x2]=raiz(a,b,c);
x1=(-b+(sqrt(b^2-4*a*c)))/(2*a);
x2=(-b-(sqrt(b^2-4*a*c)))/(2*a);

Una vez guardada la función (con el nombre raiz.m), ésta se puede invocar desde la
Ventana de Comandos o desde algún otro M-le. Por ejemplo, para hallar las raíces
de 2x2 + 4x + 1 = 0 podemos utilizar la función que creamos ejecutando la siguiente
instrucción en la Ventana de Comandos:
CONCEPTOS BÁSICOS 11

[x1,x2]=raiz(2,4,1)

Como resultado se obtiene:

x1 = -0.2929
x2 = -1.7071

Finalmente, hay que mencionar una característica adicional de la que disponen los M-
les. Cuando hay líneas que son muy largas, por ejemplo en fórmulas matemáticas
bastante complejas, MATLABr permite dividir estas líneas mediante tres puntos
suspensivos  ... que se deben colocar al nal de cada segmento. Por ejemplo,
veamos la partición de la fórmula cuadrática mencionada en el ejemplo anterior.
Para ello, coloquemos en la primera línea el numerador y en la segunda (separada
de la primera con puntos suspensivos) el denominador, así:

function [x1,x2]=raiz(a,b,c);
x1=(-b+(b^2-4*a*c)^0.5)...
/(2*a);
x2=(-b-(b^2-4*a*c)^0.5)...
/(2*a);

Cuando se colocan los puntos suspensivos de la manera correcta, el programa muestra


estos puntos de color azul oscuro. Los resultados que se obtienen con esta programa-
ción son exactamente los mismos que se obtienen con la anterior.

1.4. Procesos iterativos


Existen dos métodos para resolver problemas matemáticos: analíticos y numéricos.
Los métodos analíticos aplican conceptos matemáticos para hallar una solución. En
contraste, los métodos numéricos generalmente asignan valores a las variables invo-
lucradas en un problema y evalúan condiciones sobre tales valores para determinar
si se ha hallado la solución. Por otro lado, existen dos formas en que se pueden rea-
lizar los cálculos los cálculos, tanto analíticos como numéricos, para solucionar un
problema: manualmente y computacionalmente. Para entender cómo funciona cada
método, vamos a solucionar un problema muy sencillo: calcular el valor de x que
satisfaga la ecuación x + 5 = 4.

Analíticamente (utilizando álgebra) sabemos que para hallar x debemos colocar to-
12 GEDEM - Versión Preliminar

dos los números a la derecha de la igualdad y dejar solo la variable x a la izquierda,


reescribiendo la ecuación de la forma x = 4−5. Luego, debemos realizar las operacio-
nes aritméticas necesarias entre los valores que están 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
solución x = −1 por el método analítico, y realizando las operaciones manual y/o
computacionalmente.

Una manera alternativa de resolver este ejercicio es numéricamente. En este caso,


aplicar este método consiste en dar distintos valores a la variable x hasta que se
cumpla la igualdad x+5 = 4. Realizar este trabajo manualmente implicaría construir
un Cuadro similar al 1.1.

(1) Iteración (2) x (3) x+5 (4) = 4


1 -4 1 6= 4
2 -3 2 6 = 4
3 -2 3 6 = 4
4 -1 4 = 4

Cuadro 1.1: Método Numérico 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 coincidía con el lado derecho
de la igualdad (Columna 4). Este proceso es conocido como una iteración (Columna
1). Como en la primera iteración no se cumplía la igualdad, fue necesario volver a
realizar otra iteración, esta vez con x = −3. En total, se realizaron 4 iteraciones para
poder hallar el valor de x (x = −1). Nótese que este proceso se pudo haber realizado
manual o computacionalmente.

Los dos métodos (analítico y numérico) nos permitieron llegar a la solución. Sin
embargo, el método numérico, resultó ser poco eciente, es decir requirió de más
recursos (tiempo y programación). Además, fue más fácil realizar manualmente las
operaciones requeridas por el método analítico. En general resulta poco eciente el
cálculo manual de las operaciones que requiere un metodo numérico. Una herramienta
computacional como MATLABr elimina las limitaciones de cálculo, resolviendo este
tipo de problemas.
CONCEPTOS BÁSICOS 13

En el ejemplo anterior, el método numérico fue un camino largo para hallar la solu-
ción. Esto no siempre ocurre, hay algunos problemas que son imposibles de abordar
analíticamente y aunque podrían resolverse manualmente utilizando métodos numé-
ricos, se llevaría mucho tiempo realizar todos los cálculos, además es probable que
durante el proceso se cometan errores humanos.

El objetivo de este libro es presentar una herramienta computacional para resolver


problemas de economía matemática analítica y numéricamente. Para trabajar en
MATLABr el método analítico se trabaja con variables simbólicas, las cuales permi-
ten trabajar en el computador de la misma manera en que se suele trabajar en un
curso de álgebra (despejando variables, cambiando signos, etc.). MATLABr 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 más variables cuando las
expresiones en las que éstas se encuentran son complicadas.

Trabajar el método numérico requiere de expresiones conocidas como bifurcacio-


nes y bucles, que permiten resolver computacionalemnte procesos iterativos como el
del Cuadro 1.1. Las bifurcaciones permiten realizar una u otra operación según se
cumpla o no una determinada condición. Los bucles permiten repetir las mismas o
análogas operaciones sobre datos distintos.García de Jalón (2001). Algunas de estas
expresiones utilizadas por MATLABr son if, for, break, while, switch,
try y catch. A continuación explicamos los tres primeros, dado que son los que
vamos a trabajar en esta primera parte del libro, más adelante se presentará el resto
de las expresiones.

La sentencia if es una bifurcación, y realiza operaciones distintas dependiendo de


si se cumple o no una condición. La forma general para una condición es:

if condicion
sentencias1
else
sentencias2
end

En este caso, si se cumple la condición (if), se realizan las operaciones que componen
el primer grupo de sentencias (sentencias1). Si no se cumple la condición (else),
se ejecuta el segundo grupo de sentencias (sentencias2). En caso de omitir else
y sus respectivas sentencias (sentencias2) y además no se cumple la condicion,
14 GEDEM - Versión Preliminar

no se realiza ningún cálculo. Cuando existen múltiples 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 se-
cuencia de operaciones con un determinado conjunto de datos. Su forma más sencilla
es:

for i=1:n
sentencias
end

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

for i=vi:a:vf
sentencias
end

donde vi es el valor inicial del contador, vf es su valor nal y a es la magintud que


CONCEPTOS BÁSICOS 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 programación debe ser
de la forma:

for i=0.3:0.1:3.4
sentencias
end

Ilustremos estos comandos con el ejemplo anterior. Vamos a construir un programa


que resuelva numéricamente la ecuación x + 5 = 4. La idea es asignar valores a x
entre -4 y 4, evaluar el lado izquierdo de la igualdad y vericar si este resultado
coincide con el lado derecho.

for x=-4:1:4
li=x+5 % li=Lado Izquierdo
ld=4 % ld=Lado Derecho
if li==ld
break
end;
end
x

En la primera línea se establece que el proceso, en caso de no cumplir la condición, se


va a repetir 9 veces (número de valores entre -4 y 4 con intervalos de magnitud a=1).
En la primera iteración se asigna a x el valor de -4; luego, en la segunda línea, con este
valor de x se evalúa el Lado Izquierdo (li) de la ecuación, que en este caso es x+5,
y se dene el Lado Derecho (ld=4). En la tercera línea se evalúa, utilizando if, si
el Lado Izquierdo li es igual al derecho (4). Si se cumple la condición, la sentencia
if termina o rompe el proceso for por medio de la instrucción break; si no se
cumple la condición, la sentencia if no hace nada. Luego se continúa con la segunda
iteración en donde x toma el valor de -3, se repite el proceso, y así sucesivamente
hasta que se cumpla la condición o hasta que el programa haya evaluado todos los
valores de x.

Con este programa, MATLABr luego de cuatro iteraciones, encuentra la solución


x = −1. En procesos iterativos como el que se acaba de mostrar, no siempre se llega
a una solución, 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 habría llegado
16 GEDEM - Versión Preliminar

a una solución. 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 solución
x=-1. En el segundo caso, cuando x=[-3.5:0.2:3.5], el proceso pasa cerca de
la solución asignando a x valores de -1.1 y -0.9. A pesar de que estos valores son
cercanos a la solución x=-1, no satisfacen de manera estricta la condición x+4=5,
razón por la cual el proceso los descarta como posibles soluciones y nalmente no
converge.

La regla de iteración 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 solución de problemas por medio de métodos numéricos son más elaboradas
y permiten establecer condiciones para que el problema converja hacia una solución.
Estas reglas de iteración y métodos numéricos se mencionan más detalladamente en
capítulos posteriores 10 .

1.5. Otros Conceptos Básicos


1.5.1. Path
En el momento de ejecutar algún chero (M-le), se requiere que el archivo se en-
cuentre dentro de alguna carpeta que pueda reconocer el software. Para que una
carpeta pueda ser reconocida, se necesita que ésta se encuentre dentro de la ruta
de búsqueda del programa. En el Path solo están registradas las carpetas del direc-
torio C:\MATLAB6p1, incluyendo la carpeta Work. Sin embargo, cheros en otras
carpetas que no estén en el Path no serán reconocidos por MATLABr y generarán
errores de ejecución, a menos que se direccione el programa hacia la ubicación de esos
archivos. Por ejemplo, si se ejecuta el chero pcb.m ubicado en C:\GEDEM\pcb.m,
el programa arroja el siguiente error de ejecución:

??? Undefined function or variable ’pcb’.

Para añadir una carpeta al Path, se debe ir al menú File⇒ Set Path, en donde aparece
una Ventana similar a la Figura 1.10. Por medio de la opción Add Folder, se puede
agregar cualquier carpeta al Path. Una vez agregada la carpeta, es necesario guardar
los cambios en el Path orpimiendo el botón Save. Otras opciones disponibles en este
menú permiten eliminar carpetas del Path, colocar el Path que el software trae por
defecto o incluir todas las subcarpetas de una carpeta.
10
Se sugiere consultar algunos textos como Fackler (2003), Judd (1998) y Mora (2001).
CONCEPTOS BÁSICOS 17

Figura 1.10: Path de Matlab

1.5.2. Help y Doc


El comando help permite desplegar la ayuda de cada uno de los comandos y fun-
ciones. En esta ayuda, generalmente aparece la sintaxis del comando y las diferentes
opciones que este tiene. En la mayoría de casos, este comando se utiliza en la Venta-
na 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 información. Por ejemplo,
xlabel es un comando que permite colocar una etiqueta al eje x de una gráca. 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 MATLABr están organizadas por temas en diferentes carpetas. Por
ejemplo, en la carpeta C:\MATLAB6p1\toolbox\matlab\sparfun se encuen-
tran todas las rutinas para trabajar con un tipo especial de matrices que veremos
18 GEDEM - Versión Preliminar

más adelante, que son las matrices dispersas.

help también es útil para ver los comandos o rutinas disponibles para trabajar un
tema en particular, por ejemplo, ejecutando en la Ventana de Comandos la instruc-
ción help C:\MATLAB6p1\toolbox\matlab\sparfun, se muestran todos los
comandos o rutinas, que sirven para trabajar con matrices dispersas.

MATLABr también permite que el usuario pueda colocar una sección de ayuda (o
help) a los M-les que él construya. Si el M-le es un programa, esta opción es útil
porque permite colocar un comentario que describa la utilidad del programa que se
creó. Si el M-le es una función, con esta opción se puede diseñar un help similar
a los que tienen las rutinas del software, que describa tanto los inputs como los
outputs de dicha función. Para colocar una sección de ayuda en cualquier M-le, es
necesario colocarla al inicio de éste, en líneas consecutivas comentadas. Por ejemplo,
retomando el M-le pcb.m creado anteriormente, y colocando en él una sección de
ayuda, el M-le quedaría de la forma:

% Programa para crear la Matriz A y el Vector B


% Creado para el Capítulo de Conceptos Básicos
% Ya esta corregido

% Esto ya no es sección 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 líneas, que tienen el signo % al comienzo de la línea, y que no están
separadas por espacios. Esto quiere decir que la expresión

% Esto ya no es sección de Ayuda

no aparece en la salida porque se encuentra separada por un espacio del bloque de


líneas consecutivas que tienen el símbolo %. Las salida de MATLABr al ejecutar
help pcb se presenta en la Figura 1.11.

Para no entorpecer el trabajo en la Ventana de Comandos, dado que todas las ayudas
CONCEPTOS BÁSICOS 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 documentación en línea disponi-
ble en MATLABr sobre cualquier comando o rutina. Esta documentación contiene
información más detallada que la especicada en el help sobre la sintaxis y métodos
numéricos que utiliza cada rutina.

Para poder utilizar el comando doc se requiere que el usuario, durante el proceso de
instalación, haya instalado además del programa toda la documentación. La sintaxis
del comando es doc rutina, donde rutina corresponde al comando o rutina del
cual se quiere consultar la documentación. Por ejemplo, al ejecutar en la Ventana de
Comandos doc clc, MATLABr despliega la documentación para el comando clc
en una ventana nueva, similar a la que aparece en la Figura 1.12.

1.5.3. Objetos
MATLABr , 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 necesaria-


mente numéricos). Estas cadenas tienen múltiples funciones, entre ellas colocar
títulos o texto en grácas o modicar propiedades de otros objetos. Las fun-
ciones para cadenas de caracteres están en el sub-directorio:
20 GEDEM - Versión Preliminar

Figura 1.12: Documentación de clc

C:\MATLAB6p1\toolbox\matlab\strfun

Los caracteres de una cadena se almacenan en un vector, y cada caracter se


almacena en una de las posiciones del vector. Para introducirlas en MATLABr ,
éstas se deben colocar dentro de comillas simples ¿ 0 À. Por ejemplo, para
crear la cadena Eje x, la sintaxis es: 0 Eje x0 . 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 tamaño 1×5
como un objeto de tipo char array (character array) que ocupa 10 bytes en
el Workspace11 .

En algunas ocasiones se requiere que algún texto dentro de la cadena de ca-


racteres vaya entre comillas. Para ello, dichas comillas se representan por un
doble caracter comilla ¿ 0 0 À. Por ejemplo, para crear la cadena  Eje `x' ,
se debe colocar la instrucción: 0 Eje 0 0 x0 0 0 .

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 número de elementos. Cuando esto
no ocurre, es necesario completar con espacios las cadenas (las) más cortas.
Algunos de los comandos que nos permiten trabajar con cadenas de caracteres
11
En toda cadena de caracteres, cada caracter ocupa 2 bytes de memoria.
CONCEPTOS BÁSICOS 21

se presentan en el Cuadro 1.2.

Comando Características
char(c1,c2,...) Crea una matriz de caracteres a partir de las cadenas
c1, c2,..., completando con espacios las cadenas
más cortas.
deblank(c1) Elimina los espacios al nal de una cadena de caracte-
res c1.
c1==c2 Compara dos cadenas carácter a carácter. Devuelve un
vector o matriz de unos y ceros, dependiendo de si el
elemento es igual o diferente, respectivamente.
int2str(a) Convierte un número entero a en cadena de caracteres.
num2str(a,n) Convierte un número real a en cadena de caracteres.
Cuando el número tiene decimales, por defecto, se al-
macenan en la cadena solo cuatro cifras decimales. (el
número de decimales puede ampliarse o reducirse a n).
str2double(c1) Convierte una cadena de caracteres representando un
número real en el número real correspondiente.
c1=cellstr(C) Convierte una matriz de caracteres C en un vector de
celdas c1, eliminando los espacios al nal de cada ca-
dena.

Cuadro 1.2: Algunos Comandos sobre Cadenas de caracteres

Estructuras.

Una estructura (struct) es una agrupación de datos de diferente tipo bajo un


mismo nombre. Estos datos se llaman miembros (members) o campos (elds)12 .
Una estructura se dene en MATLABr 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 cápita y la participación
del consumo dentro del PIB del año 2000 para algunos países latinomaerica-
nos (Colombia, Argentina, Brasil y Paraguay). Para ello, necesitamos crear el
12
García de Jalón (2001)
22 GEDEM - Versión Preliminar

campo Variable (PIB per cápita o participación del consumo), y dentro de


este campo, denir otro para País. Para introducir los datos, se debe escribir
en MATLABr 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: Variable pcon=Partic. Consumo en PIB
pcon.col=67.93 % col=Colombia
pcon.arg=69.06 % arg=Argentina
pcon.bra=65.75 % bra=Brasil
pcon.pry=77.14 % pry=Paraguay

De esta manera se han creado dos estructuras: la primera contiene datos de


pib percápita para cuatro países de Latinoamérica y la segunda contiene datos
de participación en el consumo para el mismo grupo de países13 . Los cam-
pos (variable y país) están separados por  . . Al invocar en la Ventana de
Comandos estas dos estructuras, es decir, al ejecutar pibp,pcon, la salida de
MATLABr debería 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


13
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.
CONCEPTOS BÁSICOS 23

(structure array), y cada uno de ellos contiene campos relacionados con países
de Latinoamérica. Se puede acceder a la información que tiene cualquiera de
estos campos escribiendo su ubicación. Por ejemplo, para acceder a la partici-
pación 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 sof-
tware dispone de comandos que sirven para manipular estructuras. Algunos de
ellos se presentan en el Cuadro 1.3.

Comando Características
e=struct(0 campo10 ,valor1,...) Permite crear la estructura e en una
sola línea
rmfield(ES,e) Elimina el campo e de la estructura ES

Cuadro 1.3: Algunos Comandos sobre Estructuras

Anteriormente creamos la estructura pibp mediante cuatro instrucciones. Po-


demos utilizar el comando struct para crear esta estructura en una sola
instrucción, así:

pibp=struct(0 col0 ,5795.55,0 arg0 ,11729.08,...


0 bra0 ,7744.71,0 pry0 ,4801.30)

Como las estructuras son objetos que permiten almacenar datos, es de espe-
rar que éstas se puedan almacenar en matrices y vectores. Para ello, basta
con especicar la posición que debe ocupar la estructura dentro de una matriz
o un vector. Por ejemplo, para crear las dos estructuras del ejemplo anterior
(PIB percápita y participación del consumo para algunos países de Latinoa-
mérica, año 2000) y colocar estas estructuras en un vector lat, que contega la
información de estas variables para algunos países de Latinoamérica:

% Pib Percapita
pibp=struct(0 col0 ,5795.55,0 arg0 ,11729.08,...
0 bra0 ,7744.71,0 pry0 ,4801.30)

% Participacion Consumo en PIB


pcon=struct(0 col0 ,67.93,0 arg0 ,69.06,...
0 bra0 ,65.75,0 pry0 ,77.14)

lat(1)=pibp;
24 GEDEM - Versión Preliminar

lat(2)=pcon;

Con estas instrucciones, se crea un vector lat con dos columnas que contie-
ne campos (1×2 struct array with fields). En su primera columna
(lat(1)), este vector contiene el PIB percápita:
ans =
col: 5795.55
arg: 11729.08
bra: 7744.71
pry: 4801.30
mientras que en la segunda columna (lat(2)), contiene información sobre la
participación del consumo:

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

Vectores o matrices de celdas (cell arrays).


Un cell array es un objeto de tipo más general, ya que permite combinar
diferentes tipos de datos (numéricos, cadenas de caracteres, estructuras) en uno
solo. Esto implica que un cell array puede admitir, por ejemplo, en su primera
posición, una estructura, en su segunda posición una matriz y en la tercera una
cadena de caracteres14 . Un cell array se crea especicando la posición en que
se desea colocar el objeto dentro del cell array y colocando el objeto dentro de
llaves { }. Veamos un ejemplo:

ca(1)={[3 5 4]}; % Vector en la posicion 1


ca(4)={(’conceptos basicos’)} % Cadena de Caracteres en la
posicion 4

En este ejemplo hemos creado un cell array que contiene cuatro objetos: en su
primera posición, contiene un vector de 3×1, en la segunda y tercera contiene
matrices vacías, y en la cuarta una cadena de caracteres. Nótese que no es
14
Contrario a los otros objetos, que solo permiten un mismo tipo de datos en todas sus posiciones.
CONCEPTOS BÁSICOS 25

necesario introducir los elementos de un cell array en orden consecutivo: se


pueden introducir en cualquier posición y MATLABr automáticamente crea
objetos vacíos en las posiciones en las que no se introdujo ningún elemento.
Algunos de los comandos para trabajar con cell arrays se observan en el Cuadro
.
Comando Características
cell(m,n) crea un cell array vacío de m las y n columnas.
celldisp(ca) muestra el contenido de todas las celdas de ca
cellplot(ca) muestra una representación gráca de las distintas celdas
iscell(ca) indica si ca es un vector de celdas
num2cell() convierte un array numérico en un cell array
cell2struct() convierte un cell array en una estructura.
struct2cell() 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 mayoría 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 tamaño. MATLABr dispone
de rutinas que permiten tratar de manera especial estas matrices, con el pro-
posito de tener mayor eciencia computacional en los cálculos. Estas rutinas y
algunos ejemplos se presentan en detalle en el capítulo 2.

Para terminar este capítulo, debemos mencionar dos comandos que son fundamenta-
les para la presentación de resultados numéricos y grácos en MATLABr . 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 for-
ma pause, cualquier cálculo posterior a esta instrucción 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 MATLABr disponga de varias opciones
de formatos en los que desea ver los resultados numéricos. Algunos de ellos son
formato short (5 dígitos), long (15 dígitos) y bank (2 decimales)15 . El programa
utiliza por defecto el formato short. Algunas veces este último formato utiliza
15
Las totalidad de opciones se pueden ver utilizando el help de format o consultando la docu-
mentación.
26 GEDEM - Versión Preliminar

notación cientíca para satisfacer el requerimiento de colocar 5 dígitos Por ejemplo,


cuando se digita en la Ventana de Comandos el número 0.000015:
ans = 1.5000e-005
Para efectos prácticos, la mayoría de los resultados numéricos del libro serán presen-
tados en formato bank.

A partir de estos conceptos básicos, es posible presentar la estructura del libro que
se divide en tres secciones: Algebra Lineal, Cálculo y Optimización y Dinámica. En
la primera sección se trabaja con los conceptos de Matrices y Vectores (capítulo 2)
y Sistemas de Ecuaciones (capítulo 3). En la segunda sección se analiza el compor-
tamiento de una función a partir de herramientas grácas (capítulo 4) y de cálculo
diferencial (capítulo 5) e integral (capítulo 6). En la tercera sección se estudian las
condiciones sucientes (o de segundo orden) de un problema de optimización (ca-
pítulo 7) y los algoritmos para hallar puntos óptimos (capítulo 8). Finalmente, se
presenta una introducción a la solución numérica de sistemas dinámicos (capítulo
??).
Parte I

ÁLGEBRA LINEAL

27
Capítulo 2

Matrices y Vectores
Lida Quintero, Mario González, Eduardo Sánchez

Existen ciencias en donde el análisis de diferentes situaciones hace necesario en-


contrar una manera óptima de organizar grandes volúmenes de información. Las
matemáticas, a través del álgebra lineal, ofrecen una forma de representar de manera
organizada estas relaciones utilizando matrices. Es así como, en modelos económicos
como el de Leontie, las matrices expresan las relaciones entre los insumos y los pro-
ductos nales de las diferentes industrias, buscando establecer el nivel de producción
que satisface una demanda determinada.

El estudio del álgebra lineal es útil en áreas importantes para las ciencias económi-
cas tales como teoría de la optimización, teoría de las ecuaciones diferenciales y en
diferencia, estadística y econometría. El objetivo de este capítulo es estudiar las ca-
racterísticas básicas del álgebra lineal, utilizando MATLABr . En la primera sección
examinaremos el manejo básico 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 cálculo 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 ... amn

29
30 GEDEM - Versión Preliminar

El orden o tamaño de una matriz se dene como el número 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.

También 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 MATLABr para que sean almacenadas du-
rante la sesión. Este nombre puede ser una o varias letras, no obstante, se recomienda
que las matrices se denoten con letras mayúsculas, sin números o caracteres espe-
ciales 1 . Las matrices deben estar contenidas entre paréntesis 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 especícos de una matriz, utilizamos paréntesis circulares


( ) y, para introducir elementos tipo cell array 2 , se hace uso de los corchetes o
llaves {}.

Ejemplo 2.1. Generemos computacionalmente la matriz:


" #
1 3 9
A2×3 =
7 5 4
Para introducir la matriz A debemos introducir los elementos así:

A=[1,3,9;7,5,4]

O también de la forma:

A=[1 3 9;7 5 4]

MATLABr nos muestra entonces la matriz A:

A = 1 3 9
7 5 4
r
Cuando a la matriz no se le ha asignado un nombre, MATLAB utiliza un nombre de variable
1

por defecto (ans de answer) que contiene la respuesta de la última operación.


2
Una matriz de celdas o cell array es un arreglo cuyos elementos son cualquier tipo de variable,
por ejemplo, otras matrices, cadenas de caracteres, números, etc.
MATRICES Y VECTORES 31

Para efectos prácticos, utilizaremos a lo largo de la mayoría del libro la forma de


introducir matrices, en la cual separamos las las por ; y sus elementos por espacios.

2.1.1. Hipermatrices
Una extensión del concepto de matriz es el concepto de hipermatriz, denida como
una matriz de más de dos dimensiones. Por ejemplo, una hipermatriz de 3 dimensio-
nes3 es una hipermatriz de tamaño m × n × xk donde k es el número de matrices del
arreglo (es decir, la tercera dimensión: la profundidad de la hipermatriz), cada una
con m las y n columnas, visible en la Figura 2.1.

N
Figura 2.1: Hipermatriz de 3 dimensiones

Para introducir hipermatrices en MATLABr se sigue un procedimiento similar a


aquel para introducir una matriz. La idea básica es introducir cada una de las ma-
trices necesarias para conformar la hipermatriz y, simultáneamente, introducir la
posición que cada una de ellas ocupará dentro de la hipermatriz. Por ejemplo, gene-
remos una matriz de tamaño (3 × 3 × 2):

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


C(:,:,2)=[-4 6 0;0 1 1;8 3 5];

En la primera línea se crea una hipermatriz C de 3 dimensiones, y la información

3
MATLABr permite trabajar hipermatrices de cualquier dimensión.
32 GEDEM - Versión Preliminar

que se introduce corresponde a la primera de las dos matrices que conformarán la


hipermatriz C. De manera similar, en la segunda línea se introduce la información
correspondiente a la segunda matriz que compone la hipermatriz C. Como resultado,
MATLABr 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 dimensión dim. Por ejemplo deniendo las matrices:

A=[2 5 6;4 1 0;6 6 9];


B=[-4 6 0;0 1 1;8 3 5];

Podemos invocar el comando cat para construir la hipermatriz C que anteriormente


habíamos construido. Para ello, debemos tener presente que esta concatenación se
realiza en la tercera dimensión (DIM=3), ya que queremos crear una hipermatriz que
contenga 2 matrices de 3 × 3:

C=cat(3,A,B)

Obteniendo la hipermatriz C de (3 × 3 × 2) dimensiones. Los comandos relacionados


en el Cuadro 2.1 se pueden utilizar con hipermatrices.

Para ilustrar el uso de estos comandos, veamos un ejemplo.

Ejemplo 2.2. Supongamos que un analista desea organizar una serie de información
compuesta por los indicadores macroeconómicos de tres países (P1 , P2 , P3 ) durante
los últimos dos años (A1 , A2 ).

Es así como él obtiene los datos para el crecimiento del PIB, la variación en la Tasa
de cambio respecto al EURO, la inación y la variación en el nivel de desempleo:
MATRICES Y VECTORES 33

Comando Acción
size(A) Tamaño de la hipermatriz A
ndims(A) Número de dimensiónes de la hipermatriz A
squeeze(A) Elimina dimensiones iguales a uno
reshape(A,m,n) Distribuye los elementos de la hipermatriz A en una
matriz de tamaño m × n
permute(A) Permuta las dimensiones de la matriz A según los ín-
dices del vector v
ipermute(A) Permutación inversa

Cuadro 2.1: Comandos para hipermatrices

clear A(:,:,1)=[5 7 6;5.5 6 5] % ∆ PIB


A(:,:,2)=[6 8 10; 7 9 11] % ∆ TRM
A(:,:,3)=[4 7 10; 4 6 9] % ∆ Inflacion (π)
A(:,:,4)=[10 11 7; 8 11 10] % ∆ Desempleo

Esta matriz es almacenada y en el Command Window aparece de la siguiente forma:

A(:,:,1) = 5 7 6
5.5 6 5

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

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

A(:,:,4) = 10 11 7
8 11 10

El tamaño de la matriz A es (2 × 3 × 4). Este tamaño se puede obtener utilizando el


comando size con la sintaxis size(A), con el cual obtenemos:

ans = 2 3 4
34 GEDEM - Versión Preliminar

Sabemos también que la matriz A es una matriz de tres dimensiones (2 × 3 × 4).


Utilizando el comando ndims de la forma ndims(A) obtenemos:

ans = 3

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

B(:,:,1)=[-3;0]
B(:,:,2)=[5;3]
B(:,:,3)=[0;2]
B(:,:,4)=[7;2]

La matriz B es de tres dimensiones, y tiene cuatro matrices dos las por una columna
(2×1×4). Nótese que en este caso la segunda dimensión de la matriz no es necesaria,
ya que eliminando ésta dimensión no se modica el contenido de la matriz B. Así, la
matriz B que inicialmente es de tres dimensiones la podemos escribir como una de
dos dimensiones asi:

" #
−3 5 0 7
B2×4 =
0 3 2 2

MATLABr dispone del comando squeeze para eliminar dimensiones que son igua-
les 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 tamaño m × n. Sabemos, del tamaño 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 tamaño 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 tamaño (6 × 4), así:

4
Es posible crear cualquier matriz de tamaño m × n que cumpla la condición m × n = 24. Por
ejemplo, una matriz de (12 × 2).
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 macro-
económicos y en cada par de las, los datos correspondientes a cada uno de los
tres países, vemos como las dos primeras las corresponden al pais P1 , las dos las
siguientes al país 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 tamaño (2 × 3 × 4). Podemos utilizar
el comando permute para crear una matriz que contenga los mismos elementos de
A pero que sea de tamaño (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 MATLABr que coloque en la primera dimensión de la matriz C la dimensión


3 de la matriz A, en la segunda dimensión de la matriz C la primera dimensión de la
matriz A, y en la tercera dimensión de la matriz C la segunda dimensión de la matriz
A. Como resultado, tenemos una matriz C de tamaño 4 × 2 × 3, así:

C(:,:,1) = 5 5.5
6 7
4 4
10 8

C(:,:,2) = 7 6
8 9
7 6
11 11
36 GEDEM - Versión Preliminar

C(:,:,3) = 6 5
10 11
10 9
7 10

Cada una de estas matrices nos dejan analizar los datos de forma distinta, cada una
de ellas tiene, en las columnas, los años y las las corresponden a los indicadores,
cada una de estas expresiones podría entenderse como la información organizada por
país.

Por su parte, el comando ipermute realiza la operación 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 sección hemos observado como las hipermatrices sirven para manejar infor-
mación, sin embargo esta no es su única función, mas adelante veremos el papel que
juegan en la construcción del producto cartesiano y de grácas.

2.1.2. Tipos de Matrices


MATLABr ofrece comandos que generan matrices sin necesidad de especicar ca-
da uno de sus elementos, porque se trata de matrices con alguna característica es-
pecial. En general, para crear una de estas matrices se introduce el comando es-
pecíco del tipo de matriz que queremos, seguido por su tamaño entre paréntesis
circular ()5 con cada una de sus dimensiones separadas por comas6 , de la forma
A=comando(m,n). Asimismo, para una hipermatriz de tamaño m × n × k , la sin-
taxis es A=comando(m,n,k). Cuando se especica de la manera A=comando(n),
el programa crea una matriz cuadrada de dos dimensiones (n × n), mientras que
con la sintaxis A=comando, se genera un escalar. En el Cuadro 2.2 presentamos los
principales comandos para crear diversos tipos de matrices:

Matrices Dispersas
Un concepto de interés computacional son las matrices dispersas, matrices en las que
la mayoría de sus componentes son cero. Cuando se trabaja con matrices de gran ta-
5
Aunque también es posible con ([ ])
6
Si se utiliza "([ ])", las dimensiones también se pueden separar por espacios.
MATRICES Y VECTORES 37

Comando Forma una matriz


eye(m,n,...) Identidad*.
zeros(m,n,...) Nula o de Ceros.
ones(m,n,...) Unitaria o de Unos.
rand(m,n,...) De números aleatorios entre 0 y 1, con distribución
uniforme.
randn(m,n,...) De números aleatorios con distribución normal, de va-
lor medio 0 y varianza 1.
magic(n) Con los números 1,2,3,4,...,n×n, con la propiedad de
que todas las las y columnas suman lo mismo**.
* Este comando no genera hipermatrices; sólo matrices cuadradas
** Sólo para matrices cuadradas

Cuadro 2.2: Matrices generadas automáticamente

maño, resulta computacionalmente ineciente almacenar una gran cantidad de entra-


das de ceros, no solo por lo dispendioso que puede resultar digitarlos, sino también por
el espacio en memoria que estos datos ocupan. Por esta razón, MATLABr dispone
de los comandos relacionados en el Cuadro 2.3 para tratar este tipo de matrices.

Ejemplo 2.3. Consideremos la matriz:

D=[0 5 -6 0;3 0 0 0;9 0 -7 0;0 0 0 4]

Esta matriz es almacenada en MATLABr de la siguiente forma:

D = 0 5 -6 0
3 0 0 0
9 0 -7 0
0 0 0 4

Generemos la matriz dispersa correspondiente a D. El comando sparse nos permite


hacer esta conversión utilizando la sintaxis sparse(D), de la cual obtenemos:
38 GEDEM - Versión Preliminar

Comando Características
sparse(D) Convierte una matriz D a su forma dispersa, eliminando todos
los elementos en los que haya cero.
sparse(i,j) Crea una matriz de ceros de tamaño i × j .
sparse(i,j,s,m,n) Crea una matriz dispersa a partir de: i y j , que indican la po-
sición de los elemetos diferentes de cero en la nueva matriz; s,
que es el vector de elementos y m y n, que implican que es de
tamaño m × n.
speye(i,j) Forma una matriz dispersa de tamaño i × j con unos en la dia-
gonal principal.
spones(D) Genera una matriz con la misma estructura de dispersión de D,
pero reemplaza los elementos diferentes de cero por unos.
spdiags(D) Extrae todas las diagonales con elementos diferentes de cero de
la matriz D de tamaño (i,j). La nueva matriz tiene i las y tantas
columnas como diagonales diferentes de cero tenga D.
spdiags(D,d) Extrae las diagonales especicadas por d (donde d=0 correspon-
de a la diagonal principal) de la matriz D.
nonzeros(D) Vector columna con los elementos diferentes de cero de D.
[i,j]=find(D) Indica las posiciones (en las y columnas) de los elementos dife-
rentes de cero de D.
nnz(D) Número de elementos diferentes de cero en la matriz D.
issparse(A) Si el resultado de esta rutina es uno, indica que la matriz ha sido
guardada de tipo dispersa y, si es cero, de cualquier otra forma.

Cuadro 2.3: Algunos Comandos para Matrices Dispersas

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

MATLABr , en un empleo eciente de la memoria, sabe ahora que en las posiciones


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

[i,j,s]=find(D)
MATRICES Y VECTORES 39

i = 2
3
1
1
3
4

j = 1
1
2
3
3
4

s = 3
9
5
-6
-7
4

Estos tres vectores nos dicen la posición y el valor del elemento en esa posición.
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í sucesiva-
mente. Para generar la matriz dispersa, hacemos que corresponda al tamaño 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 número 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 habíamos hallado. Otro comando, spones, genera la misma
estructura de dispersión de spones(D), pero cambia los elementos diferentes de
cero (el vector b o el vector s) por unos, es decir, spones(D):
40 GEDEM - Versión Preliminar

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

Ahora bien, spdiags permite la construcción 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 3 0 0 0
0 0 0 5 0
0 0 -7 0 -6
0 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 demás
columnas de C se corresponden con las diagonales de D. Si en este ejemplo a la
sintaxis del comando le agregamos un número 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 análisis de dispersión 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 MATLABr la rutina sparse(3,2) generamos una matriz de
ceros de tamaño 3 × 2. El programa no muestra la matriz, pero sí nos indica que ya
existe:

All zero sparse: 3-by-2

Por último speye genera una matriz dispersa a partir de la matriz identidad, es
decir, en los lugares donde i = j hay unos, por ejemplo speye(3) genera la siguiente
matriz dispersa:
MATRICES Y VECTORES 41

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

2.1.3. Operaciones Básicas entre Matrices


Para realizar operaciones básicas entre dos matrices previamente denidas A y B y un
escalar n, es necesario indicar la operación 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 básicas.

Operación Comando o Función Operador


Suma plus(A,B) A+B
Resta minus(A,B) A-B
Multiplicación mtimes(A,B) A*B
Multiplicación elemento a elemento* times(A,B) A.*B
Potenciación mpower(A,n) A^n
Potenciación elemento a elemento* power(A,B) A.^n
División izquierda mldivide(A,B) A\B
División izquierda elemento a elemento* ldivide(A,B) A.\B
División derecha mrdivide(A,B) A/B
División derecha elemento a elemento* rdivide(A,B) A./B
*Las operaciones elemento a elemento aplican los operadores a cada componente
de la matriz

Cuadro 2.4: Operaciones básicas entre matrices

Ejemplo 2.4. Dadas las matrices A y B y el escalar 2, determinemos el valor de


A + B , A ∗ B , A. ∗ B , A2 , A.2 , A/B y A./B

   
2 3 −9 −5 4 −9
   
A = 7 −5 3  B= 6 2 3
8 −5 8 −1 −5 7

Paso 1. Introducimos las matrices en MATLABr :


A=[2 3 -9;7 -5 3;8 -5 8]
42 GEDEM - Versión Preliminar

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

Paso 2. Realizamos las operaciones invocando las rutinas pertinentes:


C=A+B

C = -3 7 -18
13 -3 6
7 -10 15

D=A*B

D = 17 59 -72
-68 3 -57
-78 -18 -31

E=A.*B

E = -10 12 81
42 -10 9
-8 25 56

F=A^2

F = -47 36 -81
3 31 -54
45 9 -23

G=A.^2

G = 4 9 81
49 25 9
64 25 64

H=A/B

H = -2.3973 -2.2329 -3.4110


-4.7123 -3.4521 -4.1507
-3.1918 -1.6986 -2.2329
MATRICES Y VECTORES 43

I=A./B

I = -0.4000 0.7500 1.0000


1.6667 -2.5000 1.0000
-8.0000 1.0000 1.1429

¾Cuál es la diferencia entre D y E, F y G y H e I? En D, le pedimos a MATLABr que


multiplicara ambas matrices, mientras que en E buscábamos 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 operación: A ∗ B −1 , y en I dividió cada componente de
A por su correspondiente en B .

2.1.4. Análisis de una Matriz


Existen otros comandos en MATLABr que nos permiten extraer información que
revela características 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 A’
Inversa inv(A)
Determinante det(A)
Norma norm(A)
Rango rank(A)
Traza trace(A)
Tamaño size(A) o length(A)
Dimensiones ndims(A)
Número de elementos numel(A)
Elementos de la diagonal diag(A)
Triangular Inferior tril(A)
Triangular Superior triu(A)

Cuadro 2.5: Comandos para analizar una matriz

Ejemplo 2.5. A partir del Cuadro 2.5, analicemos las caracterísiticas de la matriz
A:
44 GEDEM - Versión Preliminar

 
1 3 −2
 
A2×3 =  7 −5 4 
3 6 4

Paso 1. Introducimos la matriz A en MATLABr


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

Paso 2. Analizamos la matriz A de acuerdo al Cuadro 2.5:


C=A’

C = 1 7 3
3 -5 6
-2 4 4

D=inv(A)

D = 0.2136 0.1165 -0.0097


0.0777 -0.0485 0.0874
-0.2767 -0.0146 0.1262

e=det(A)

e = -206

f=norm(A)

f = 9.6869

g=rank(A)

g = 3

h=trace(A)
MATRICES Y VECTORES 45

h = 0

i=size(A)

i = 3 3

j=ndims(A)

j = 2

k=numel(A)

k = 9

m=diag(A)

m = 1
-5
4

N=tril(A)

N = 1 0 0
7 -5 0
3 6 4

P=triu(A)

P = 1 3 -2
0 -5 4
0 0 4
46 GEDEM - Versión Preliminar

De esta forma, C es la transpuesta de A, D es la inversa, e es el determinante y f


es la norma de la matriz. De acuerdo a g, A tiene 3 las y columnas linealmente
independientes, la traza de la matriz es h y, según i, A es de tamaño 3 × 3. Por
otra parte, j nos muestra el número de dimensiones de la matriz y k el número 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 fracción triangular superior de A.

2.1.5. Matrices Factorizables


Una matriz cuadrada es factorizable cuando puede reescribirse como el producto
de dos o más matrices. El objeto de estudio de esta sección son tres de las formas
de factorizar matrices: la factorización LU, Cholesky y descomposición en valores
singulares.

Factorización LU: PA=LU


Dada una matriz cuadrada A, esta es factorizable si existe una matriz L trian-
gular inferior, una matriz U triangular superior y una matriz de permutación
P de manera que P A = LU . En MATLABr es posible calcular las matrices
L,U y P que generan la matriz A a partir del comando lu. Por ejemplo, para
conocer la matriz L y U a partir de una matriz cuadrada, primero denimos
la matriz:

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

Ahora bien, para encontrar los elementos que componen las matrices L, U y
P , utilizamos la rutina lu:

[L,U,P]=lu(A)

L = 1.0000 0 0
-0.6667 1.0000 0
-0.3333 -0.2500 1.0000

U = -3.0000 1.0000 -1.0000


0 6.6667 3.3333
0 0 1.5000
MATRICES Y VECTORES 47

P = 0 1 0
0 0 1
1 0 0

Si operamos los resultados, tenemos entonces que L∗U = P ∗A. Debemos acla-
rar que no todas las matrices son factorizables: sólo aquellas cuyo determinante
es diferente de cero.

Cholesky
La descomposición de Cholesky factoriza una matriz A, simétrica 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 través
de la descomposición de Cholesky con el código chol. Veamos, por ejemplo,
la descomposición de Cholesky para la siguiente matriz:

A=[2 -1 0;-1 2 -1;0 -1 2]

Utilizamos entonces el comando chol:

U=chol(A)

U = 1.4142 -0.70711 0
0 1.2247 -0.8165
0 0 1.1547

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

Descomposición en valores singulares


Otra factorización de matrices es la denominada descomposición por valores
singulares y es útil a la hora de analizar si un proceso iterativo está convergiendo
a una solución.
Al igual que las otras formas de factorización, la idea básica consiste en reex-
presar una matriz Am×n como el producto de otras; en este caso de la siguiente
manera:
48 GEDEM - Versión Preliminar

T
Am×n = Um×m Sm×n Vn×n (2.1)

Donde U y V son matrices unitarias y S es una matriz diagonal. Los elemen-


tos aij pertenecientes a la diagonal de la matriz S son denominados valores
singulares de A. Dada la naturaleza de la factorización 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 métodos para descomponer matrices, hacemos énfasis en las
factorizaciones P A = LU y Cholesky debido a la utilidad que tienen para el análisis
y las soluciones de sistemas de ecuaciones.

2.2. Vectores
Los vectores son tipos especiales de matrices de tamaño n × 1 (vector columna) ó
1 × n (vector la) en el espacio <n . Geométricamente, pueden ser denidos como el
segmento de recta entre el origen y un punto que se caracteríza por poseer dirección,
magnitud y sentido.

2.2.1. Análisis de un vector


Magnitud de un vector
La magnitud o norma de un vector ~v se denota por k v k y se reere a la longitud
del vector. Su cálculo está basado en el teorema de Pitágoras, por ejemplo para un
vector en <2 :
q
k v k= v12 + v22 (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:
q
k a k= a21 + a22 + ... + a2n (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 cálculo 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

p
d= (b1 − a1 )2 + (b2 − a2 )2 + (b3 − a3 )2 (2.4)

En general, la distancia entre dos puntos P1 = (a1 , a2 , . . . an ) y P2 = (b1 , b2 , . . . bn )


en <n se dene como:
v
u n
uX
d = t (bi − ai )2 (2.5)
i=1

MATLABr calcula la magnitud de un vector ~a por medio del comando norm, cuya
sintaxis es norm(a). Por ejemplo para hallar la norma del vector c = (8 1 6 5)

En primer lugar, creamos el vector cy y luego, utilizamos el comando norm:

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

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

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

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

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

d=norm(p)

La distancia entre los puntos P1 y P2 es, entonces, d=27.7489. Grácamente 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 máximo de sus valores singulares. Ahora bien, los
valores singulares de una matriz son los elementos de la diagonal de la matriz S que
resulta de descomponer la matriz original en un producto de tres matrices tal que:
50 GEDEM - Versión Preliminar

4 P1

2
z
1
P2

0 15
10

−1 5

30 0
25
20 P
15 −5
10
5
−10
0 x
y

Figura 2.2: Distancia entre P1 y P2

A=U ∗S∗VT

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

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

El comando svd calcula la descomposición por valores singulares de la matriz A. Es


decir que es equivalente calcular la norma de la matriz o calcular el máximo de la
descomposición de A.7

Dirección de un vector
La dirección 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 dirección es el ángulo entre el segmento de recta y el eje x positivo8 . De esta
manera, para un vector l = [a, b] con a 6= 0, la dirección se calcula de la forma9 :
7
En otras palabras se cumple que: norm(A)=max(svd(A))
8
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 razón, generalmente se calcula la dirección sólo para
vectores en <2
9
Si a = 0,la dirección del vector depende del signo de b; cuando b > 0, la dirección es de 90o y
cuando b < 0 es de 270o
MATRICES Y VECTORES 51

b b
tan θ = ⇒ θ = tan−1 (2.6)
a a

Es posible calcular la dirección utilizando la función atan que corresponde a la inversa


de la tangente, es así como para determinar la dirección del vector l se utiliza la
sintaxis atan( ab ), cuyo resultado es un ángulo denido en radianes.

Veamos, por ejemplo, la dirección que corresponde al vector u = (7, −5). Así, intro-
ducimos en MATLABr la sintaxis para encontrar la magnitud del ángulo:

c=atan(-5/7)

La dirección 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 60
8

6
150 30
4

180 0

210 330
324.46°

240 300

270

Figura 2.3: La dirección del vector u = (7, −5)

2.2.2. Operaciones entre Vectores


Como los vectores son tipos particulares de matrices, a ellos aplican también sus
operaciones (ver Cuadro 2.4), siempre y cuando su tamaño lo permita. A continuación
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 proyección de un vector, el calculo de la matriz
ortogonal y las matrices creadas a partir de vectores.
52 GEDEM - Versión Preliminar

Producto Escalar
Dados dos vectores ~a = (a1 , a2 , ..., an ) y ~b = (b1 , b2 , ..., bn ) en <n , el producto esca-
lar10 a ¦ b es igual a:

a ¦ b = a1 ∗ b1 + a2 ∗ b2 + .... + an ∗ bn (2.7)

Para calcular el producto escalar entre dos vectores en MATLABr , existe la rutina
dot, cuya sintaxis es c=dot(a,b) (donde a y b son vectores del mismo tamaño).
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, MATLABr dispone del comando cross, cuya sinta-
xis es c=cross(a,b) (donde a y b son vectores en tercera dimensión11 ).

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

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

Paso 1. Introducimos los vectores a y b:

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

Paso 2. Invocamos el comando cross:

c=cross(a,b)

10
Sólo es aplicable para dos vectores en la misma dimensión, es decir, con el mismo número de
componentes.
11
MATLABr sólo calcula el producto cruz de vectores en <3 .
MATRICES Y VECTORES 53

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

c = 28.3600
8.8000
-24.8000

10

3
b
a
−4
z c
−11

−18

−25
0
20 2
4
10 6
8
0
y
x

Figura 2.4: Producto cruz entre a y b

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

Ángulo entre dos vectores

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

~l ¦ ~e ~l ¦ ~e
cos θ = ⇒ θ = cos−1 (2.9)
k ~l kk ~e k k ~l kk ~e k

Para calcular el ángulo en MATLABr , invocamos los comandos relacionados con la


norma y el producto escalar, junto con la función trigonométrica inversa del coseno
(acos) de la forma:

acos(dot(l,e)/((norm(l)*norm(e))))
54 GEDEM - Versión Preliminar

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

Proyección
Dados dos vectores a y b, la proyección de a sobre b está determinada por:

a¦b
proyb a = ∗b (2.10)
k b k2
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 cálculo de una proyección.

Ejemplo 2.8. Dados los vectores v = (1, 1) y u = (1, 2), encontrar proyb a

Paso 1. Introducimos los vectores en MATLABr :


v=[1;1], u=[1;2]

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


proy=(dot(u,v)/((norm(v))^2))*v

La salida de MATLABr muestra la proyección de v sobre u,

proy= 1.5000 1.5000

Esta respuesta es grácamente visible en la Figura 2.5 en la cual vemos como se


cumplen las dos condiciones entre los vectores y la proyección.

2.2.3. Matrices y Vectores


Utilizando los conceptos y herramientas computacionales que hemos trabajado hasta
el momento es posible presentar dos conceptos que se constituyen como corolarios
del análisis de matrices y vectores como son los de Matrices Ortogonales y Producto
Cartesiano.
12
Es decir, si a 6= 0 entonces b = α ∗ a para alguna constante α
MATRICES Y VECTORES 55

Proyección de (u) en (v)

2 Ortogonalidad entre v y
u menos la proyeccion

1.5

Diferencia entre u
Y
y la proyeccion

0.5

Vector v
−0.5 Vector u
Proyección

−0.5 0 0.5 1 1.5 2


X

Figura 2.5: Proyección de a sobre b

Matrices Ortogonales
Una matriz A se dice ortogonal si es invertible y AT = A−1 (es decir, AT A = I ,
donde I es la matriz identidad). Las matrices ortogonales tienen una característica
muy particular, sus columnas son vectores que constituyen una base ortonormal.
En otras palabras, dada la matriz Qn×n = [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 sólo si i 6= j ; y, segundo, bij = 1 únicamente si i = j .

MATLABr contiene una rutina que, mediante el proceso de Gram-Schmidt13 , cons-


truye matrices ortogonales a partir de otras matrices del mismo tamaño. 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
número de sus columnas es igual al rango de A tal que QT Q = I .

Ejemplo 2.9. Encontremos cuál es la matriz ortogonal de A:


 
−5 7 4
 
A =  8 6 −3
9 0 1

Introducimos la matriz A y luego invocamos el código orth:


13
Ver (Grossman 1996).
56 GEDEM - Versión Preliminar

A=[-5 7 4;8 6 -3;9 0 -1]


M=orth(A)

M es, entonces, la matriz ortogonal a A:

M =
-0.3884 0.8375 -0.3844
0.6588 0.5441 0.5196
0.6443 -0.0515 -0.7631

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

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

Ahora, veamos si los productos escalares cumplen con las características de una base
ortogonal:

y=dot(s,s)

y=

1.0000

u=dot(s,d)

u=

1.3878e-016

i=dot(d,d)

i=

1.0000

p=dot(d,f)

p=

2.4286e-016
MATRICES Y VECTORES 57

Recordemos que los números u=1.3878e-016 y p=2.4286e-016 están expresados


en notación cientíca y son muy cercanos a cero, comprobándose 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 demás resultados deben vericarse.

Matrices creadas a partir de Vectores


El producto cartesiano es una operación que sirve para obtener todas las combina-
ciones posibles entre todos los elementos de dos o más vectores. En MATLABr ,
para obtener el producto cartesiano entre vectores o matrices utilizamos el código
meshgrid14 . La sintaxis general del comando es:

[X,Y]=meshgrid(x,y)

donde x y y son dos vectores o matrices previamente denidos. Así, meshgrid


replica el vector x n veces, donde n es el número de componentes del vector x, cons-
truyendo 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

Nótese que meshgrid requiere que los vectores x y y tengan el mismo número de
componentes.

El comando meshgrid únicamente sirve para generar matrices a partir de tres vec-
tores (por ejemplo: [X,Y,Z]=meshgrid(x,y,z)). MATLABr permite generar
14
Este comando sirve sólo para vectores en <3 .
58 GEDEM - Versión Preliminar

Figura 2.6: a) Única Solución b) No Existe Solución c) Innitas soluciones

el producto cartesiano a partir de más 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 operación 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 cálculo del producto cartesiano de tres vectores, en cuyo
caso el resultado son hipermatrices. Sin embargo, el comando tiene restricciones para
más de tres dimensiones.

2.3. Rectas y Planos


Un sistema de ecuaciones como lo veremos más adelante, puede ser solucionado de
distintas formas,en esta sección vamos a presentar la idea que yace tras el concepto
de sistema de ecuaciones. En dos dimensiones (es decir, ecuaciones de dos variables),
cada ecuación representa una recta; en tres dimensiones, cada una constituye un
plano y, en general, para n dimensiones, cada ecuación es un hiperplano en <n para
todo n > 3. Por lo tanto, si existe solución al sistema, diremos que las rectas o los
planos se intersecan, si no existe solución es porque no existe un punto de corte; y,
cuando una de las rectas o los planos es paralelo a otro, existen innitas soluciones.
Esto es evidente en la Figura 2.6 para cada uno de los casos.

En esta sección estudiaremos con detalle los métodos computacionales usados para el
análisis de rectas y planos. Aunque no existen comandos especícos para su estudio,
MATLABr facilita el cálculo de algunos pasos intermedios, simplicando su método
MATRICES Y VECTORES 59

sustancialmente.

2.3.1. Rectas
Una recta es una sucesión innita de puntos en un espacio. Para establecer la ecuación
de una recta en dos dimensiones necesitamos de un punto y la pendiente de la línea
o, en ausencia de la pendiente, de dos puntos. En tres dimensiones, no obstante, para
hallar la ecuación de la recta el concepto de pendiente se hace inútil y precisamos de
un vector que describa una dirección 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 P~0 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

P~0 P = tv (2.11)

Y, como observamos en la Figura 2.7,

P~ = P~0 + P~0 P (2.12)

tv
P
PP
0
P0

P
P0

Figura 2.7: Una recta en tercera dimensión

Introduciendo la ecuación 2.11 en la ecuación 2.12, obtenemos:


60 GEDEM - Versión Preliminar

P~ = P~0 + tv

Que es, simplemente:


     
a d x
     
 b   e   y 
     
 c   f   z 
  + t =  (2.13)
 ..   ..   .. 
 .   .   . 
     
n l m

Estas son las ecuaciones paramétricas 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 dirección de la
línea, 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 ecuación 2.13, tenemos tres ecua-
ciones:
a + td = x
b + te = y
c + tf = z
Al despejar t de cada una de las ecuaciones, el resultado es:
x−a y−b z−c
t= t= t=
d e f
Como t es igual en cada uno de los casos, igualamos las tres ecuaciones:

x−a y−b z−c


= = (2.14)
d e f
Esta representación de la recta en la ecuación 2.14 se llama ecuación simétrica o
cartesiana. Aunque cambia la forma de la ecuación, siguen apareciendo los mismos
componentes necesarios para la construcción de una recta: el vector posición P~0 =
(a, b, c) y el vector director ~v = (d, e, f ), no obstante, ha desaparecido el parametro
t de la ecuación.

Ejemplo 2.10. Encontrar la ecuación paramétrica de la recta que pasa por los
puntos P0 = (−5, 6, 8, 7) y P1 = (9, −2, 0, −2).

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


MATRICES Y VECTORES 61

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

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


p0p1=p1-p0

p0p1=

14 -8 -8 -9

Como P0 P1 es el vector director de la recta, denimos la ecuación 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 denición más 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 dimensión.

Un rasgo fundamental del plano es que debe estar en tres dimensiones: áreas en más
de tres dimensiones son hiperplanos. La forma más común de hallar la ecuación del
plano es determinar un vector diferente de cero y perpendicular al plano, conocido
como normal y correspondiente a n en la denición de Grossman. En la Figura ??
observamos qué es grácamente 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 P~0 P = (x − a, y − b, z − c) es perpendicular al
vector normal ~n = (d, e, f ), es decir:

n · P~0 P = 0 (2.15)

reemplazando P~0 P y ~n en la ecuación 2.15, tenemos:

d(x − a) + e(y − b) + f (z − c) = 0 (2.16)

De la ecuación 2.16 se desprende la forma:


62 GEDEM - Versión Preliminar

~n

P0 y

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

dx + ey + f z = g (2.17)

Donde g = ad + be + cf . La ecuación 2.17 se llama la ecuación cartesiana de un


plano.

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

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


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

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

p0p1=p1-p0

p0p1=

[2,1,2]
MATRICES Y VECTORES 63

p0p2=p2-p0

p0p2=
[3,-1,-3]

Paso 3. Hallar el producto cruz entre P0~P1 y P0~P2 , cuya respuesta es el vector
normal al plano:

c=cross(p0p1,p0p2)

c=
-1 12 -5

Paso 4. Usando el punto P~ = (x, y, z) obtenemos el vector P~2 P que está incluido
en el plano:

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

Paso 5. Introducimos el vector normal y el vector contenido en el plano en la ecua-


ción cartesiana

(x + 1, y + 2, z + 4) · (−1, 12, −5) = 0

La ecuación cartesiana de este plano es x−12y +5z = 3. Cabe resaltar que, si existen
dos planos paralelos, entonces sus vectores normales son paralelos. En otras palabras,
el producto cruz entre los dos vectores tiene como resultado cero.

2.3.3. Distancia entre un punto y un plano


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

|ad + be + cf + g|
D= p (2.18)
d 2 + e2 + f 2
Veamos en el siguiente ejemplo cómo hallar computacionalmente la distancia entre
un punto y un plano.
64 GEDEM - Versión Preliminar

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


3x − 7y + 4z + 1 = 0

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

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

Paso 2. Ahora, determinamos el valor del denominador de la ecuación 2.18:


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

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

d=k/m

Así, llegamos a que el valor de la distancia entre el punto y el plano corresponde a


d: 2.0925.

2.4. Valores y Vectores Propios


Cuando solucionamos un sistema de ecuaciones de la forma Ax = b con única solu-
ción la transformación lineal de un vector x asigna una imagen a cada uno de sus
componentes. Sin embargo, algunas veces sólo conocemos la matriz y, para entender
el comportamiento de las variables que ésta representa, es necesario encontrar el vec-
tor que la generó o uno paralelo a él. Para hallarlo, establecemos una operación que,
a partir de una matriz A de n × n, nos permite determinar el vector m ~ mediante un
escalar λ, tal que λ es real o complejo que cumpla con la siguiente característica:

Am
~ = λm
~ (2.19)

Para garantizar que m~ 6= ~0, la solución de15 A − λI nunca debe ser trivial (es decir,
~ = ~0). Por tanto, la matriz generada al operar (A − λI) debe ser singular o, en
m
otras palabras, su determinante debe ser igual a cero.

Esta condición es conocida como la ecuación característica, y el polinomio que se


genera a partir de ella es el polinomio característico, denotado p(λ).
15
La ecuación (A − λI), donde I es la matriz identidad, resulta de despejar m
~ de la ecuación.
MATRICES Y VECTORES 65

p(λ) = det(A − λI) = 0 (2.20)


Las raíces de p(λ) son los valores propios asociados a A. Es a partir de ellos que
~ , conocido también como el vector propio relativo a λ.
encontramos el vector m

MATLABr 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 cómo trabaja la rutina con
el siguiente ejemplo:
Ejemplo 2.13. Calculemos los vectores propios de la matriz
 
1 −1 4
 
A = 3 2 −1
2 1 −1
Paso 1. Introducimos el input del comando: la matriz A:
A=[1 -1 4;3 2 -1;2 1 -1];

Paso 2. Teniendo ya el input, invocamos eig para hallar los valores y vectores
propios:
[V,L]=eig(A)
Así, el resultado de MATLABr es claro: L es la matriz de valores propios y
las columnas de V son sus correspondientes vectores propios, tal que V y L
cumplen, en efecto, la propiedad que A*V=V*L.

V = 0.4082 0.5774 0.2357


0.8165 -0.5774 -0.9428
0.4082 -0.5774 -0.2357

L = 3 0 0
0 -2 0
0 0 1

Cabe resaltar que si se especica sólo una única salida (B=eig(A)), esta corresponde
a un vector que contiene únicamente los valores propios de la matriz (matriz L).
66 GEDEM - Versión Preliminar

Ejercicios
1. Una empresa se especializa en la producción de cinco artículos. La información
que describe las unidades vendidas en diferentes meses del año, 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 multiplicación 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 ma-
trices aplique las operaciones de suma, resta, multiplicación, división izquierda,
derecha y potenciación.
 
  −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 MATLABr todas las


posibles matrices de tamaño 2 × 2.
MATRICES Y VECTORES 67

4. Halle la norma y dena las características de cada par de vectores; halle el


ángulo entre ellos y calcule proyv u y proyu v

a) u = (3, 2) v = ( 35 , 25 )
b) u = (3, 5, 6) v = (4, 3, 2)
√ √
c) u = ( 2, 3, 5) v = ( 3 2, 55 , 0)
à !
2 8
5. Con la matriz L = y el vector m = (2, 2)
5 4

a) Halle la inversa de L
b) Multiplique el vector m por la inversa de L
c) Ahora aplique división derecha y división izquierda entre L y m. Traspon-
ga 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 ecuación paramétrica 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, pág. 38)).

10. Genere una matriz aleatoria de distribución uniforme y una matriz cuyas las
y columnas sumen todas lo mismo, y con cada una:

a) Halle su polinomio característico a través de operaciones con matrices y


vectores en MATLABr .
b) Halle también los valores y vectores propios a través de operaciones y
contrástelos luego con los resultados que da eig.
68 GEDEM - Versión Preliminar
Capítulo 3

Sistemas de Ecuaciones
Norma Gómez, Eduardo Sánchez

Las relaciones entre diferentes variables que interactúan 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
.. .. .. . (3.1)
. . . = ..
am1 x1 + am2 x2 + ... + amn xn = bm

Este conjunto de ecuaciones, llamado sistema de ecuaciones lineales, se puede expre-


sar de forma matricial así:
    
a11 a12 ... a1n x1 b1
    
 a21 a22 ... a2n  x2   b2 
 .. .. ..  .. = ..  (3.2)
 ..    
 . . . .  .   . 
am1 am2 ... amn xn bm
o, de manera equivalente:

A~x = ~b (3.3)

donde A es la matriz de coecientes (las constantes que acompañan a las incógnitas


del sistema), ~x es el vector de variables, y ~b el vector de resultados. La solución al
sistema, conocida como vector solución, es un vector columna que contiene los valores
de las incógnitas que satisfacen todas las ecuaciones1 .
1
En el Capítulo 2 sección 2.3, vimos grácamente que, cada una de las ecuaciones del sistema

69
70 GEDEM - Versión Preliminar

Al resolver un sistema de ecuaciones lineales existen dos casos: primero, los sistemas
de ecuaciones denidos, en donde existe sólo un punto de corte, es decir, una úni-
ca solución; y segundo, los sistemas singulares, que pueden tener innitos puntos de
intersección, es decir innitas soluciones, o pueden no tener ningún punto de intersec-
ción, caso en el que no existe solución. Por otra parte, los sistemas normales denidos
cuyo punto de intersección es el origen, se conocen como sistemas homogéneos.

El objetivo de este capítulo es presentar las herramientas computacionales que provee


MATLABr , para solucionar problemas económicos expresados en forma de sistemas
de ecuaciones lineales, basados en los principios del algebra lineal. Estudiaremos dos
criterios de solución: de un lado, los métodos directos o analíticos, fundamentados
en las operaciones básicas con matrices, que brindan resultados exactos con calculos
nitos y que pueden ser utilizados sólo si la matriz de coecientes es invertible.

Por otro lado, están los métodos indirectos (también llamados iterativos o numéri-
cos), que generan una secuencia de aproximaciones a la respuesta del sistema 3.1,
después de repetir cierto tipo de operaciones previamente establecidas.

3.1. Métodos Directos o Analíticos


3.1.1. Eliminación Gauss-Jordan
Este método, soluciona el sistema 3.1 utilizando la matriz ampliada, denida como
M = [A ~b]:

 
a11 a12 ... a1n b1
 
 a21 a22 ... a2n b2 
M =
 .. .. .. .. .. 
 (3.4)
 . . . . . 
am1 am2 ... amn bm

Al llevar la matriz ampliada M a una forma escalonada reducida 2 , es posible en-


contrar la solución al sistema 3.2 por medio de un procedimiento de operaciones
aritméticas ordenadas entre las. MATLABr aplica este método con el comando
rref, cuya sintaxis es rref(M), donde M es la matriz ampliada. Además, existe el
3.1 representa una recta si ~x ∈ <2 , un plano si ~x ∈ <3 o un hiperplano si ~x ∈ <n , y su solución, si
existe, es la intersección entre ellos (según el caso).
2
Llevar una matriz a la forma escalonada reducida signica, transformar una matriz no cuadrada
en una aproximación de la matriz identidad
SISTEMAS DE ECUACIONES 71

comando rrefmovie que muestra paso a paso la reducción de la matriz ampliada


a su forma reducida. La sintaxis de este comando es rrefmovie(M).

Ejemplo 3.1. Solucionemos el siguiente sistema de ecuaciones:

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

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


sistema y, luego, construimos la matriz ampliada M1.

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

Paso 2. Utilizamos rref:


S1=rref(M1)

De acuerdo a la respuesta de MATLABr , la única solución al sistema es


S1, es decir, x = −2 y y = 5.

S1 =
1 0 -2
0 1 5

Ejemplo 3.2. Solucionemos el siguiente sistema de ecuaciones singulares:

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

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


sistema y, luego, construimos la matriz ampliada M2.

A2=[2 1 -1;3 2 4;5 4 14]


b2=[2;8;20]
M2=[A2 b2]
72 GEDEM - Versión Preliminar

Paso 2. Utilizamos rref:

S2=rref(M2)

Con el resultado de MATLABr , podemos armar que el sistema tiene innitas


soluciones denidas por x − 6z = −4 y y + 11z = 10:

S2 =

1 0 -6 -4
0 1 11 10
0 0 0 0

Ejemplo 3.3. Resolvamos el siguiente sistema de ecuaciones singulares:

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

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


sistema y, luego, construimos la matriz ampliada M3.

A3=[1 1 2;3 -2 7;2 7 3]


b3=[9;20;27]
M3=[A3 b3]

Paso 2. Utilizamos rref:

S3=rref(M3)

El resultado de MATLABr no es coherente dado que la última la indica que la suma
de todas las variables multiplicadas por cero es 1; por esta razsn, podemos concluir
que este sistema no tiene solución:

S3 =

1 0 2.2 0
0 1 -0.2 0
0 0 0 1
SISTEMAS DE ECUACIONES 73

Ejemplo 3.4. Solucionemos el siguiente sistema homogéneo:

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

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


sistema, y luego construimos la matriz ampliada M4:

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


b4=[0;0;0]
M4=[A4 b4]

Paso 2. Utilizamos rref:

S4=rref(M4)

La solución al sistema es x = y = z = 0, recordemos que en los sistemas homogéneos


solo hay dos posibles alternativas: la solución trivial, en la cual todas las variables
son cero, o existen innitas soluciones:

S4 =

1 0 0 0
0 1 0 0
0 0 1 0

3.1.2. Método de la Inversa


Este método 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 solución x que satisface el sistema, resolviendo la operación:

x = A−1 b (3.5)

No obstante, si la matriz es muy grande o dispersa, encontrar su inversa de forma


analítica puede llegar a ser un proceso muy complejo. MATLABr permite calcular
la inversa mediante el comando inv, cuya sintaxis es C=inv(A).
74 GEDEM - Versión Preliminar

Conociendo entonces la inversa de la matriz, la solución del sistema Ax = b está


dada por:
x = Cb (3.6)

Ejemplo 3.5. Solucionemos el siguiente sistema de ecuaciones por el método de la


inversa:

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

Paso 1. Introducimos la matriz de coecientes y el vector de resultados correspon-


diente al sistema:

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


b=[6;3;2]

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

C=inv(A1)

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

x=C*b

La solución al sistema de ecuaciones es:

x =

-1
1.6667
2.6667

3.1.3. Regla de Cramer


La regla de Cramer usa el determinante de la matriz de coecientes para llegar a la
solución del sistema 3.1. MATLABr calcula el determinante a través del comando
det. La sintaxis del comando es a=det(A).

El desarrollo de la regla de Cramer parte de la matriz de coecientes y el vector


de resultados: el procedimiento consiste en reemplazar el vector de resultados en las
SISTEMAS DE ECUACIONES 75

columnas de la matriz de coecientes formando matrices transformadas y calculando


los determinantes de cada una de ellas. La solución al problema se obtiene al dividir
los determinantes de las matrices transformadas sobre el determinnte de la matriz
de coecientes así:

b1 a12 ... a1n a11 b1 ... a1n a11 a12 ... b1


b2 a22 ... a2n a21 b2 ... a2n a21 a22 ... b2
. . ... . . . ... . . . ... .
bm am2 ... amn am1 bm ... amn am1 am2 ... bm
x= ,y= ,..., n =
a11 a12 ... a1n a11 a12 ... a1n a11 a12 ... a1n
a21 a22 ... a2n a21 a22 ... a2n a21 a22 ... a2n
. . ... . . . ... . . . ... .
am1 am2 ... amn am1 am2 ... amn am1 am2 ... amn

Ejemplo 3.6. Solucionemos el Ejemplo 3.5, ahora por la Regla de Cramer.

Paso 1. Introducimos la matriz de coecientes, calculamos su determinante y luego,


introducimos el vector de resultados:
A=[1 1 2;3 2 1;4 2 1];
a=det(A)
b=[6;3;2];

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


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

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


x=dA1/a
y=dA2/a
z=dA3/a

El programa muestra así los valores de cada variable que soluciona el sistema: la
única solución de este sistema de ecuaciones.
76 GEDEM - Versión Preliminar

x=

-1
y=

1.6667
z=

2.6667

3.1.4. Factorización de Crout o LU


Existen métodos directos que descomponen la matriz de coecientes en otras matrices
buscando que, para llegar a la solución del sistema 3.2, sólo se hagan operaciones
básicas entre ellas. Existen dos procesos para llegar a estas matrices: el primero de
ellos es un método que permite descomponer una matriz de coecientes A de tamaño
n×m, en dos matrices invertibles: L (triangular inferior) y U (triangular superior) de
la forma A = LU , conocido como factorización LU, donde L y U tienen las mismas
dimensiones de A. De esta forma, para resolver el sistema 3.2 Ax = b, lo replanteamos
como:

LU x = b (3.7)

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

Ly = b (3.8)

Solucionar el sistema 3.8, dado que la matriz L es triangular inferior, equivale a


realizar un proceso de sustitución hacia atrás, si reemplazamos la ecuación 3.8 en la
ecuación 3.7 obtenemos el sistema:

Ux = y (3.9)

cuya solución, por sustitución hacia atrás o mediante el método de la inversa, es:

x = U −1 y (3.10)

MATLABr proporciona un comando que encuentra las matrices pertinentes a la


factorización LU. La sintaxis de esta rutina es [L,U]=lu(A), cuyo input es la
SISTEMAS DE ECUACIONES 77

matriz de coecientes (A) y los resultados son una matriz triangular inferior y una
matriz triangular superior.

Las matrices L y U serán útiles para hallar los valores de los vectores x e y de las ecua-
ciones 3.7 a 3.10. Veamos en el siguiente ejemplo cómo trabajar con la factorización
LU.

Ejemplo 3.7. Solucionemos el sistema del Ejemplo 3.5 por factorización LU:

Paso 1. Introducimos la matriz A y el vector b:


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

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


[L,U]=lu(A)

Paso 3. Hallamos el valor de y :


y=inv(L)*b

Paso 4. Hallamos el valor de x:


x=inv(U)*y

La respuesta de MATLABr es L,U,y,x, siendo el vector x la única solución al


sistema de ecuaciones:

L=

0.2500 1.0000 1.0000


0.7500 1.0000 0
1.0000 0 0

U=

4.0000 2.0000 1.0000


0 0.5000 0.2500
0 0 1.5000

y=

2.0000
1.5000
78 GEDEM - Versión Preliminar

4.0000

x=

-1.0000
1.6667
2.6667

3.1.5. Factorización de Cholesky


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

U T U x = U T (U x) = b (3.11)

Al resolver este sistema por sustitución hacia atrás, obtenemos:

UT y = b (3.12)

luego, por sustitución hacia atrás:

Ux = b (3.13)

Para solucionar un sistema de ecuaciones mediante la factorización de Cholesky,


usamos el comando chol, cuya sintaxis es U=chol(A), similar a la factorización
LU porque, a partir de la matriz de coecientes, obtenemos la matriz U y resolvemos
las ecuaciomes 3.12 y 3.13.

Ejemplo 3.8. Solucionemos el siguiente sistema por Factorización de Cholesky

9x + 2y + 4z = 0
6x + 3y + 3z = 0
5x + 4z = 0
3
Esta matriz debe ser simétrica y denida positiva para que el sistema tenga solución. En caso que
la matriz no tenga esta característica recomendamos solucionar el sistema a través de la factorización
LU.
SISTEMAS DE ECUACIONES 79

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


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

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


U=chol(A)

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


y=inv(U’)*b

Paso 4. Reemplazamos el vector y en la ecuación 3.13 y despejamos el vector x:


x=inv(U)*y

El programa nos mostrará la matriz U, el vector y y x, el vector solución del sistema:

U=

3.0000 0.6667 1.3333


0 1.5986 1.3206
0 0 0.6916

y=

0
0
0

x=

0
0
0

3.2. Métodos Indirectos o Numéricos


Los métodos indirectos o numéricos estan diseñados como una secuencia de opera-
ciones que busca encontrar resultados aproximados a la solución de un sistema de
ecuaciones lineales. Estos métodos son especialmente buenos cuando los sistemas tie-
nen un gran número de incógnitas y son difíciles de resolver, es decir, si la matriz de
coecientes y el vector de resultados presentan características particulares.
80 GEDEM - Versión Preliminar

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

Qx = (Q − A)x + b (3.14)

La ecuación 3.14 sugiere un proceso iterativo o regla de iteración que se expresa


como:

Qxk ⇐ (Q − A)x(k−1) ; k > 1

En esta regla de iteración, queremos encontrar una sucesión de vectores xk que


solucionen el sistema 3.14, a través de un proceso iterativo. En este proceso, es
necesario establecer un vector inicial de valores para x0 , que puede ser arbitrario
pero, por lo general, se toma como aproximación inicial la nula o, en otras palabras,
aquella en la que x01 = x02 = ... = x0n = 0.

Nuestro objetivo es escoger una matriz Q de manera que se calcule fácilmente la


sucesión xk y que, además, converja rápidamente a la solución. En todo método
iterativo es importante especicar un criterio de convergencia δ , que permita llegar
a la solución más rapidamente, y un número máximo de iteraciones M . En este caso,
dado que x es un vector, estableceremos dos criterios de convergencia que se deberán
satisfacer simultáneamente:
¯ (k) (k−1) ¯
¯ k¯
1. ¯ kx kx
−x
kk ¯≤δ
¯ (k) (k−1) ¯
¯ ¯
2. ¯ xm −x m
(k) ¯ ≤ αδ , donde xm = M ax{xi } y α es un número determinado por el
xm
investigador que, comúnmente, es mayor o igual a 10. La precisión es mayor en
cuanto α tenga valores más altos.

Nuestro objetivo es presentar dos métodos iterativos para solucionar sistemas de


ecuaciones lineales: Gauss-Jacobi y Gauss-Seidel.

3.2.1. Matrices Débilmente Condicionadas


En los procesos que veremos adelante existe un riesgo, relacionado con la existencia
de sistemas de ecuaciones que presentan matrices de coecientes en las cuales una
4
Este resultado se obtiene al sumar el término Qx a ambos lados de la expresión Ax = b.
SISTEMAS DE ECUACIONES 81

pequeña variación de alguno de sus componentes, genera grandes cambios en el vec-


tor solución, aunque tanto los ejercicios propuestos, como los ejercicios planteados
parten de matrices que no tienen esta característica, es de esperar que haya casos
en los cuales la existencia de matrices débilmente condicionadas hagan que la uti-
lización de métodos numéricos sea ineciente, en tales casos recomendamos utilizar
el máximo nivel de precisión del computador, o plantear transformaciones sobre la
matriz original.

3.2.2. Gauss-Jacobi
El método de Gauss-Jacobi5 , muy útil cuando A es dispersa, resuelve el sistema
de ecuaciones de la forma Ax = b, sólo si la matriz de coecientes A es diagonal
dominante6 . Para hacerlo, utiliza una matriz de descomposición Q que debe ser
diagonal7 y cuyos elementos corresponden a los de la diagonal principal de A. La
regla de iteración para este método es:

Qxk ⇐ (Q − A)x(k−1) + b

Esta ecuación es una transformación de la regla de iteración general denida por la


ecuación 3.14. MATLABr 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 iteración esta determinada por la matriz de descomposición, la


distancia es entonces el cociente entre la ecuación lineal igualada a cero y la matriz
de descomposición. Después, 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 solución del problema, utilizando una serie de operaciones repetidas que se
valen de la matriz de descomposición como parámetro de convergencia. El número de
operaciones está limitado por la rapidez a la que la norma del vector δx se acerque
5
Para observar la deducción matemática del método y su regla de iteración, recomendamos ver
el apéndice de este capítulo.
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
X
|Aii | > |Aij |∀i
i=1
i6=j

7
Las matrices diagonales son aquellas que sólo tienen elementos diferentes de cero en su diagonal
principal.
82 GEDEM - Versión Preliminar

a un número positivo, muy cercano a cero8 .

El número de repeticiones puede ser establecido por el usuario y existen casos en don-
de el número de iteraciones propuestas no son sucientes. Por ende, recomendamos
utilizar un número de iteraciones alto, se recomiendan más de 1510.

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


la programación del método de Gauss-Jacobi:

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

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


solución inicial para que el programa empiece a iterar a partir de él. En este
caso, utilizamos el vector nulo:
A=[2 0 1;1 2 0;0 0.5 8];
b=[5;1.345;8.76];
x=[0;0;0];

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


Q=diag(A)
Paso 3. Establecemos la programación de las operaciones que realizará el programa
para llegar a una solución. A partir del comando for, determinamos el
número de veces que debe repetirse el procedimiento, presentamos las ope-
raciones a repetir y la condición para que MATLABr se detenga al llegar a
una solución:
for it=1:1600
dx=(b-A*x)./Q
x=x+dx
if norm(dx)<tol,break,end
end

Aquí it=1:n determina el número de veces que se repite esta operación, que va de
1 hasta n. En este ejemplo tomamos n = 1600, para saber cuál es el número de veces
que iteró el programa, digitamos it y luego enter.
8
Que la norma del vector sea cero implica que todos los valores de δx son positivos y se aproximan
a cero, esto sugiere que se ha llegado a una solución en la cual b − Ax = 0.
SISTEMAS DE ECUACIONES 83

tol es un número muy pequeño, cercano a cero, que sirve para establecer el nivel de
tolerancia de la solución o, en otras palabras, el valor máximo que puede tomar la
norma de δx. A tol se le puede asignar el valor que deseemos, no obstante, el más
pequeño que el software reconoce es sqrt(eps), que equivale a la raíz cuadrada del
valor de punto otante del programa (es decir, el número más grande que sumado a
uno da uno).

En esta salida aparecen todas las operaciones que hace el programa antes de llegar a
una solución. Si MATLABr no entrega la respuesta, bien puede necesitar un mayor
número de iteraciones o bien, quizá, menos iteraciones de las ya establecidas. Para
este ejemplo, la solución del sistema es entonces:

1.9432
-0.2991
1.1137

3.2.3. Gauss-Seidel
La iteración de Gauss-Seidel9 establece la matriz de descomposición Q como la parte
triangular inferior de A incluyendo los elementos de la diagonal. La regla de iteración
para este método es:

Qxk ⇐ (Q − A)x(k−1) + b

Aunque la regla de iteración es idéntica a la del método Gauss-Jacobi, la matriz de


descomposición no es la misma. Veamos en el siguiente ejemplo la diferencia entre
este y el método anterior:

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


es diagonal dominante y dispersa:

x+z =7
5x + 2y = 4
8z = 2

9
Para observar la deducción matemática del método y su regla de iteración vea el apéndice
matemático de este capítulo.
84 GEDEM - Versión Preliminar

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


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

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


inferior:

Q=tril(A);

Paso 3. Especicamos el límite de tolerancia, el número de iteraciones y programa-


mos las funciones del método, la regla de iteración y la condición para que
el programa se detenga y entregue una solución:

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 operación, es decir la solución, es el vector x:

7.0000
-15.5000
0.2500

Ejercicios
1. Resuelva los Ejemplos 3.2 a 3.7 utilizando:

a) Factorización LU

b) ¾Es posible solucionar estos problemas utilizando Cholesky?

2. Solucione Ax = b donde:
SISTEMAS DE ECUACIONES 85
¯ ¯ ¯ ¯
¯ 27 7 −5.5 1 ¯ ¯ 1 ¯
¯ ¯ ¯ ¯
¯ ¯ ¯ ¯
¯ 7 25 −2 17.5 ¯ ¯ 1 ¯
A = ¯¯ ¯
¯ b = ¯¯ ¯
¯
¯ −5.5 −2 27.5 11 ¯ ¯ 1 ¯
¯ ¯ ¯ ¯
¯ 1 17.5 11 47.5 ¯ ¯ 1 ¯

a) Utilizando descomposición LU
b) Gauss-Seidel
c) Gauss-Jacobi

¾Cuál procedimiento realiza más iteraciones?

3. La demanda por cierto producto está representada por medio de una función
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 función de la forma:

Qo = 100 + 5p (3.16)

Utilice un método directo y un método numérico para hallar el precio y la


cantidad de equilibrio de mercado de este producto.

4. Considere el caso de una economía cuya oferta esta compuesta por cuatro rmas
que ofrecen cantidades diferentes de cada mercancía y son precio-aceptantes. La
rma 1 ofrece 83 unidades de la mercancía 3 y 19 unidades de la mercancía 4.
La rma 2 ofrece 58 unidades de la mercancía 2, 30 unidades de la mercancía 3
y 42 unidades de la mercancía 4. La rma 3 ofrece 43 unidades de la mercancía
1 y 12 unidades de la mercancía 4. Por último, la rma 4 ofrece 48 unidades
de la mercancía 3 y 67 unidades de la mercancía 4. Cada rma debe alcanzar
una meta de ingresos especíca: 943, 786, 554, y 624 unidades monetarias,
respectivamente. ¾Cuáles son los precios óptimos para que todas las rmas
alcancen su meta de ingresos?

5. La economía 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 - Versión 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 situación como un ejemplo del Modelo de Leontief
y resuelva la ecuación de este modelo. ¾Cuáles 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, sería mucho mejor
si escogen el local en la calle con mayor ujo vehicular. El modelo de vías
con sus direcciones está indicado en la siguiente gura, en la cual se señala el
número de vehículos que circulan en una hora y pasan por las intersecciones
A, B, C, y D.

Figura 3.1: Modelo de vías

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) ¾Cuántas soluciones existen?, ¾Cuántas tienen sentido?.


b) ¾Usted que calle escogería para ubicar el local? Explique.

8. Una empresa de alimentos elabora varios productos, los más importantes son:
Helados, Ponqués, Pasteles de Pollo, Pasteles de Carne, Emparedados de Cor-
dero y Emparedados de Pavo. Cada uno de estos productos debe pasar por
SISTEMAS DE ECUACIONES 87

cada una de las seis etapas de producción de alimentos Compra a Proveedores,


Almacenamiento, Elaboración, Prueba de Calidad, Empaque y Distribución.
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. ¾Cuántas unidades se pueden producir si, dadas las características
de las empresa, se disponen de 2970 horas en Compra a Proveedores, 2950 en
Almacenamiento, 2990 en Elaboración, 2380 en Prueba de Calidad, 2350 en
Empaque y 2350 en Distribución.?

9. Los métodos iterativos presentados en este capítulo parten de una matriz de


descomposición. Siguiendo la presentación del método de Richardson en el
apéndice:

a) Solucione uno de los sistemas de ecuaciones presentados en este capítulo


describiendo la programación de este método en un M-le.
b) ¾Cuántas iteraciones realizó su programa?

3.3. Apéndice
El uso de métodos iterativos para la solución de un sistema de ecuaciones lineales
parte de la regla de iteración denida mediante la transformación del sistema Ax = b,
evidente en la ecuación 3.14:

Qx = (Q − A)x + b

Esta regla cambia según la propiedad de cada método iterativo.

3.3.1. Gauss-Jacobi
En el método de iteración de Gauss-Jacobi, la ecuación 3.14 puede escribirse como:

Qxk = (Q − A)x(k−1) + b (3.17)

si denimos una matriz R = (Q − A), la ecuación 3.17 se reexpresa como:

Qxk = Rx(k−1) + b (3.18)


88 GEDEM - Versión Preliminar

El producto de la matriz Q por el vector columna x(k) es un vector columna, asimis-


mo, el producto de la matriz R por el vector columna x(k−1) es también un vector
columna. La ecuación vectorial 3.18 se puede expresar mediante n ecuaciones es-
calares (una para cada componente del vector), de modo que, para un elemento i
cualquiera, se cumple la siguiente expresión:

n
X n
X
(k) (k−1)
qij xj = − rij xj + bi (3.19)
j=1 j=1

Si tenemos en cuenta que en la matriz Q todos los elementos fuera de la diagonal


son cero, en el primer miembro el único término no nulo de la sumatoria es aquel
que contiene el elemento diagonal qii, que es precisamente aii. Mas aún, debido a
que los elementos de la diagonal de R son cero, podemos eliminar el término i = j
de la sumatoria del segundo miembro, lo que dejaría la ecuación 3.19 de la forma:

n
X
(k) (k−1)
aii xi = aij xj + bi (3.20)
j=1
j6=i

de donde, despejando xi k , obtenemos:

n
X (k−1)
xi (k) = (bi − aij xj )/aii (3.21)
j=1
j6=i

que es la expresión que nos proporciona las nuevas componentes del vector xk en
función del vector anterior x(k−1) en la iteración de Jacobi. En resumen, el método
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 aproximación inicial para las soluciones al sistema de


ecuaciones y sustituimos estos valores en la ecuación 3.19 para generar una nueva
aproximación a la solución del sistema que, bajo ciertas condiciones, es mejor que
la aproximación inicial. Esta nueva aproximación se puede sustituir de nuevo en la
parte derecha de la ecuación 3.19 y, de esta misma forma, reemplazar sucesivamente
hasta que la solución 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
ecuación 3.14 se reescribe de la forma:

Qxk = Rx(k−1) + b (3.22)

Donde un elemento cualquiera, i, del vector Qxk esta determinado por la ecuación:

n
X n
X
(k) (k−1)
aij xj =− aij xj + bi (3.23)
j=1 j=1

Si tenemos en cuenta la composición 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
X n
X
(k) (k−1)
aij xj =− aij xj + bi (3.24)
j=1 j=i+1

i−1
X n
X
(k) (k) (k−1)
aii xi + aij xj =− aij xj + bi (3.25)
j=1 j=i+1

de donde, despejando xi k , obtenemos:

i−1
X n
X
(k) (k) (k−1)
xi = (bi − aij xj − aij xj )/aii (3.26)
j=1 j=i+1

Observemos que en el método de Gauss-Seidel los valores actualizados de xi sustitu-


yen de inmediato a los valores anteriores, mientras que en el método de Jacobi todas
las componentes nuevas del vector se calculan antes de llevar a cabo la sustitución.
En el método de Gauss-Seidel los cálculos deben llevarse a cabo en orden porque el
nuevo valor xi depende de los valores actualizados de x1 , x2 , ..., xi−1 .

3.3.3. Método de Richardson


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

Ixk = (I − A)x(k−1) + b = x(k−1) + r(k−1) (3.27)

donde r(k−1) es el vector residual denido mediante r(k−1) = b − Ax(k−1) . Replante-


emos la ecuación 3.27:
90 GEDEM - Versión Preliminar

xk = x(k−1) − Ax(k−1) + b = x(k−1) + r(k−1) (3.28)

en esta ecuación, un elemento cualquiera del vector r(k−1) vendra dado por la expre-
sión:

n
X
(k−1) (k−1)
ri xi = bi − aij xj (3.29)
i=1
Parte II

CÁLCULO

91
Capítulo 4

Funciones
Norma Gómez, Norman Maldonado

En la primera parte del libro abarcamos los conceptos básicos de álgebra lineal y el
planteamiento computacional de estos en MATLABr , con el objetivo de aplicarlos
a la solución de problemas económicos. El álgebra lineal permite construir espacios
vectoriales que cumplen con ciertas propiedades (cerradura bajo la suma y bajo la
multiplicación por escalar).

Una vez denido el espacio, sobre éste se pueden construir relaciones, que pueden ser
funciones o correspondencias. Este capítulo junto con los dos siguientes tienen como
objetivo utilizar herramientas computacionales para el análisis de funciones denidas
en espacios vectoriales. En particular, en este capítulo se muestra la manera en
que podemos utilizar MATLABr para analizar grácamente las propiedades de una
función, así como los cambios que se generan en ella cuando se modican parámetros.
Sin embargo, no es posible realizar un análisis gráco cuando las funciones tienen
más de tres variables, por lo que es necesario utilizar el cálculo diferencial e integral
para estudiar las propiedades de cualquier función. Este último es el propósito de los
capítulos 5 y 6.

En general, algunas variables económicas pueden afectar el comportamiento de otras,


y este tipo de relaciones se pueden representar mediante funciones, como por ejem-
plo, la relación que tiene la acumulación de factores con el crecimiento económico.
Por tanto, conocer los métodos para analizar una función y su planteamiento compu-
tacional, es útil para abordar problemas económicos.

En la primera sección de este capítulo se estudia el concepto de función univariada,


y la manera en que podemos gracarla en MATLABr para analizar sus propiedades.

93
94 GEDEM - Versión Preliminar

Además, establecemos las herramientas que ofrece MATLABr para añadir algunas
características adicionales al gráco de la función, tales como títulos, nombres de los
ejes, colores, entre otros.

En la segunda sección, realizamos el mismo análisis para funciones con dos variables,
es decir, presentamos el concepto matemático, visualizamos la función y añadimos
características a los grácos. También, utilizamos el concepto de curva de nivel para
visualizar grácamente los conjuntos contorno de una función de dos variables.

La tercera y cuarta sección explican cómo visualizar el cambio de funciones de una


y dos variables, respectivamente, cuando cambia el valor de alguno de sus paráme-
tros (simulaciones). Finalmente, la última sección estudia con estos métodos algunas
funciones económicas importantes.

4.1. Funciones de una Variable


Una función f de un conjunto X ⊆ R en otro Y ⊆ R (f : X ½ Y ), es una relación
que asigna a cada elemento x ∈ X exactamente un elemento y ∈ Y . Se dice que y
es la imagen de x y se notará como f (x). El dominio (o conjunto de salida) de f
es el conjunto X y su recorrido (rango o conjunto de llegada) consta de todas las
imágenes f (x) de los elementos x ∈ X .

En particular, una función de una variable se caracteriza porque cada elemento x ∈ X


es un escalar. Así, estas funciones tienen como conjunto de salida a R y como conjunto
de llegada a R (f : R ½ R).

4.1.1. Visualización de funciones de una variable


Para visualizar una función univariada f (x) en MATLABr , se siguen tres pasos:

Paso 1. Crear la función. Una función en MATLABr se puede denir de dos maneras
distintas. Por un lado, se puede crear un m-file en donde se dene la
forma de la función. 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 numérica del método gráco, no podemos
visualizar la función 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 función. Además, utilizando la


función que creamos en el Paso 1, generamos numéricamente las imágenes
de la función en el dominio.

Paso 3. Utilizar el comando plot de MATLABr 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 imágenes
de la función para cada valor de x. Así, plot une con una línea 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 sólo es útil para
funciones univariadas.

El comando plot permite especicar el color y tipo de la línea que se va


a usar, y los marcadores que se colocarán en cada punto. Por ejemplo, la
sintaxis plot(x,y,’r+:’) graca los vectores x e y con una línea 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 línea
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 función. Para los ejemplos del libro, los m-files que
contienen la función (Paso 1) se nombrarán de la forma fejc#, donde f indica que
es una función, ej ejemplo, c el capítulo correspondiente y # el número del ejemplo.
Similarmente, la programación de los pasos 2 y 3 se colocará en m-files nombrados
de la forma pejc#. Así, fmej3 indica una función (f) utilizada en el capitulo de
matrices y vectores (m) en el tercer ejemplo (3), y pejc es su programación o script.

Para ilustrar estos pasos veamos la función f : [−2, 5] ½ R, donde f (x) = x3 −


4x2 + 6. En primer lugar, debemos crear la función. Para ello, abrimos un m-file
en MATLABr y escribimos la función de la siguiente forma:

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

En la primera línea se dene la función ffej0 que tiene como entrada el vector x
y como salida el vector f. En la segunda línea se especica la forma funcional. Este
m-file debe ser guardado con el nombre que se asignó a la función, que en este
caso es ffej0. Por último, recordemos del capítulo 2 que el operador punto que se
96 GEDEM - Versión Preliminar

utiliza en la segunda línea 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 también permite especicar una función, expresándola como


una cadena de caracteres. Esta función, 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 programación de los otros pasos. En MATLABr podemos crearla de la
siguiente forma:

f=inline(’x.^3-4*x.^2+6’);

En este caso, la instrucción 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 función, 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 imágenes f(x). Ya que el ejemplo nos indica que la función va de los números
reales en el intervalo [-2,5], a los números reales, debemos denir estos valores para
x y f(x). En MATLABr , abrimos un nuevo m-file, en donde creamos los valores
de x e y utilizando la función 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 imágenes de la función en este intervalo1 .
Luego de crear los datos, MATLABr nos permite dibujar la función por medio de la
sintaxis plot(x,y).

Como resultado, y añadiendo algunas características adicionales que explicaremos


más adelante, MATLABr muestra el gráco de la Figura 4.1 en una nueva ventana
de guras (Figure Window). Veamos a continuación otro ejemplo, en el cual la función
1
Para crear las imágenes 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 función de la forma f=inline(’a*x’), en el momento de utilizarla para crear las imágenes
es necesario introducir los inputs en orden alfabético, es decir y=f(a,x).
FUNCIONES 97

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

30

20

f(x)
10

−10

−20
−2 −1 0 1 2 3 4 5
x

Figura 4.1: Función Cúbica

presenta discontinuidades.

Ejemplo 4.1. Gracar f (x) = 4


(x−1)2
en el conjunto de salida X = [0.8, 1.25].

Paso 1. Crear la función. En un m-file llamado ffej1:


function f=ffej1(x);
f=4./((x-1).^2);
o, utilizando inline
f=inline(’4./((x-1).^2)’);
Recordemos que en el caso de utilizar inline la función debe ser creada
en el mismo m-file de los pasos 2 y 3.

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


x=[0.8:0.01:1.25]; % Conjunto de Salida o Dominio
y=ffej1(x); % Conjunto de Llegada o Rango
En caso de utilizar la función inline f, sólo se debe modicar la segunda
línea de la forma y=f(x). Por simplicidad, de aquí en adelante todas las
funciones se crearán en m-files en vez de utilizar la instrucción inline.

Paso 3. Gracar la función.


plot(x,y,’r+-’)
98 GEDEM - Versión Preliminar

Como resultado se obtiene una gráca de la función de color rojo (r), con línea
segmentada (-) y con marcadores (+) en cada punto. Añadiendo algunas caracte-
rísticas al gráco, obtenemos la Figura 4.2. Observemos que esta función presenta
una discontinuidad cuando x = 1. En este valor de x, la función f es igual a 04 = ∞.
MATLABr permite trabajar con valores iguales a ∞, y los representa como inf. En
nuestro ejemplo, podemos ver que en la posición 21 del vector y, la función toma el
valor de inf.

4
x 10 f(x) = 4/(x−1)2
4

3.5

2.5
f(x)

1.5

0.5

0
0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25
x

Figura 4.2: Función Discontinua en x=1

Para que esto se observe en la gráca 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 MATLABr de tal forma que la función nunca toma esos valores, la gu-
ra cambia considerablemente. Veamos qué ocurre con nuestra función cuando 1 no
pertenece al dominio, por lo que ∞ no hace parte del rango o conjunto de llegada.

Ejemplo 4.2. Gracar f (x) = 4


(x−1)2
con x=[0.8:0.013:1.25], ∞ ∈
/ y.

Paso 1. Crear la función. Usamos la función creada en el m-file ffej1:

Paso 2. Crear los datos. Cambiamos el espaciamiento entre los valores del conjunto
de salida:
FUNCIONES 99

x=[0.8:0.013:1.25]; % Conjunto de Salida o Dominio


y=ffej1(x); % Conjunto de Llegada, Imagenes

Paso 3. Gracar la función.


plot(x,y,’ o-’)

4
x 10 f(x) = 4/(x−1)2
16

14

12

10
f(x)

0
0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25
x

Figura 4.3: Ejemplo 4.2

El resultado es la Figura 4.3, en donde la función se graca con color azul2 , con
línea continua (-) y con marcadores (o) en cada punto. En esta gura, la función
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 imágenes de los dos puntos más cercanos a 1 generando la gráca
de una función aparentemente continua. Por eso se recomienda siempre asegurarse
de incluir en el vector x los valores del dominio donde la función es discontinua.

4.1.2. Opciones adicionales para los grácos


Hemos observado que las diferentes grácas que han aparecido a lo largo del capítulo
tienen ciertas características en los ejes, ciertas fuentes para los títulos, determinados
2
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 línea continua (-) y ningún marcador.
100 GEDEM - Versión Preliminar

colores de línea, o posiciones de las guras. Todos estos aspectos pueden ser progra-
mados en MATLABr , y a continuación se explicará la manera de modicarlos.

text(x,y,’Texto’): ubica la cadena de caracteres Texto en las coordena-


das (x,y). Cuando x e y son vectores, el texto se repite en cada par de elementos
(xi , yi ). Con grácos en tres dimensiones, es necesario especicar coordenadas
(x,y,z).

Para colocar valores de una variable en algún texto se necesita convertirlos


primero en cadenas de caracteres. La instrucción num2str(a) convierte el
valor numérico a en una cadena de caracteres3 .

title(’Titulo’): añade la cadena de caracteres Titulo en la parte su-


perior del gráco. En la instrucción, 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


grácos 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 etique-


ta o rótulo de los elementos de un gráco, ya sean líneas, barras u objetos. Con
múltiples elementos, la sintaxis es legend(’leyenda1’,’leyenda2’,...).

texlabel: crea texto en formato TEX. También se puede colocar texto en


formato TEX colocándolo seguido de  \.

grid: crea una malla o cuadrícula en los grácos. Puede introducirse escri-
biendo grid on, y desaparece con grid off.

line: crea líneas. 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 tamaño, MATLABr dibuja una línea por columna. Para grácos en 3
dimensiones, se deben especicar vectores (o matrices) x,y,z.
3
Ver Cuadro 1.2.
FUNCIONES 101

axis: controla la escala de los ejes que se introducen en el gráco. Para grácos
de dos dimensiones, recibe como entrada un vector de cuatro componentes: el
valor mínimo del dominio sobre el eje x (xmin), el valor máximo sobre el eje x
(xmax); el valor mínimo de las imágenes de la función en el eje y (ymin), y su
valor máximo (ymax). La sintaxis es axis([xmin xmax ymin ymax]).

Cuando el gráco es de tres dimensiones, es necesario incluir las coordenadas de


los valores mínimo y máximo 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 ejem-
plo, axis auto ja los ejes automáticamente según el dominio de la función;
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 su-
perior 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 instrucción 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 instrucción axis on activa los ejes en un gráco, y axis
off los oculta.

view(az,el): especica la rotación de un gráco en tres dimensiones para


observar la gura desde un ángulo distinto. En su sintaxis, az representa el
acimut (azimuth en inglés) o ángulo horizontal de rotación, y el es el ángulo
de elevación 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 elevación de 90◦ , mientras que
view(3) genera una vista con un acimut de -37.5 y una elevación de 30. Para
observar el ángulo en el cual se está viendo una gura se utiliza la sintaxis
[az,el]=view, y MATLABr 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 número de las en que se divide la ventana,
c el número de columnas e i es el número de la subventana que quedará activa,
102 GEDEM - Versión Preliminar

es decir, la subventana en donde se gracarán las instrucciones inmediatamente


posteriores.

Cada objeto en una gura tiene características o propiedades que se pueden modicar
sólo si el objeto recibe un nombre. Por ejemplo, el título de un gráco es un objeto
que tiene como características, entre otras, el tamaño, tipo, grosor e inclinación de
la letra. Al colocar la instrucción ts=title(’Titulo’), MATLABr almacena
el objeto Titulo con el nombre ts, y con este nombre se pueden modicar sus
propiedades. A continuación explicaremos algunas propiedades de los objetos.

font: las opciones que comienzan con font, hacen modicaciones sobre el
texto. fontangle cambia el grado de inclinación de las letras del texto, entre
las opciones normal, italic, y oblique, que generan tipos de letra nor-
mal, itálica y oblicua respectivamente. fontname, cambia la fuente del texto.
fontunits especica la unidad en la que se mide el tamaño de la letra (pul-
gadas - inches, centimetros - centimeters, puntos - points o pixeles -
pixels). fontsize cambia el tamaño 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 alineación de los objetos;


la alineación horizontal (horizontalalignment) que tiene como opciones
alinear a la derecha (right), a la izquierda (left) o en el centro (center);
y la alineación vertical (verticalalignment) que puede ser arriba (top),
en el medio (middle) y abajo (bottom).

color: permite realizar cambios en el color de un objeto. MATLABr identica


la mayoría de los colores con su inicial en inglés: ’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
líneas del objeto. linestyle modica el estilo de la línea de un objeto. Tiene
como opciones línea continua ’-’, línea punteada ’:’, línea segmentada ’-’
y línea con punto ’-.’. linewidth modica la amplitud o grosor de la línea
del objeto (por defecto es 0.5).

marker: las opciones que comienzan con marker, hacen modicaciones sobre
los marcadores del objeto. marker especica algún tipo de marcador (+ o *
. x square diamond v ^ > < pentagram hexagram none). markersize
FUNCIONES 103

indica el tamaño 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 características de algún objeto ob, se utilizan los
comandos get y set. El primero muestra las propiedades del objeto, mientras que el
segundo las modica. La instrucción get(ob) el programa muestra la conguración
actual de las propiedades del objeto ob, mientras que con la instrucción set(ob)
muestra las opciones disponibles para cada propiedad del objeto. Con la instrucción
set(ob,’p’,’v’) MATLABr asigna el valor v a la propiedad p del objeto ob.
Para ilustrar estos comandos, en cada uno de los siguientes ejemplos se modicarán
las opciones de algunos objetos.

4.2. Funciones de dos variables


A diferencia de una función de una variable, una función de dos variables se carac-
teriza porque el conjunto de salida es el producto cartesiano de los vectores x e y
(x × y , x, y ∈ R), por lo que estas funciones tienen como conjunto de salida a R2
y como conjunto de llegada a R (f : R2 ½ R). Así, cada elemento del conjunto de
salida es una pareja ordenada de la forma (xi , yi ),

4.2.1. Visualización de Funciones de dos variables


Comencemos por retomar los pasos necesarios para visualizar una función en MATLABr y
adaptarlos al caso de funciones con dos variables:

Paso 1. Crear la función 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 dimensión.

Dados los conjuntos x = (x1 , x2 , . . . , xn ), y = (y1 , y2 , . . . , yn ), el dominio


sobre el cual se dene la función 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:
4
Como se estableció en el Capítulo 2, los vectores los denotamos con minúsculas mientras que
las matrices con mayúsculas.
104 GEDEM - Versión Preliminar

 
(x1 , y1 ) (x2 , y1 ) ... (xn , y1 )
 
 (x1 , y2 ) (x2 , y2 ) ... (xn , y2 ) 
 .. .. .. 
 .. 
 . . . . 
(x1 , yn ) (x2 , yn ) ... (xn , yn )

Grácamente, los puntos generados por esta matriz se pueden ver como
una malla en la parte izquierda de la Figura 4.4. Cada intersección de las
líneas punteadas corresponde a una de las posiciones de la matriz anterior,
generando el producto cartesiano necesario para denir el dominio o con-
junto de salida de la función. En la parte derecha de esta gura, se muestra
el espacio en donde se visualiza la función 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 función f (x, y).

0.9

0.8

0.7
0.8

0.6 0.6
f(x,y)

0.4
0.5

0.2

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

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


MATLABr esto se hace por medio de la instrucción meshgrid5 cuya sin-
taxis es:
5
Ver Capítulo 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
imágenes de f (x, y), se dene la matriz Z así:
Z=fej(X,Y)

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


comandos para gracar una función de dos variables:

plot3: Este comando es equivalente a plot utilizado para gra-


car funciones de una variable, y tiene la sintaxis plot3(X,Y,Z).
Cuando los elementos a gracar son vectores (x, y, z ), este coman-
do traza en el espacio R3 una línea que une los puntos generados por
las columnas de cada uno de los vectores. Así, siendo x, y, z vecto-
res de tamaño 1 × n, el comando traza una línea 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 di-


buja las líneas generadas por las columnas de las matrices X, Y, Z . Sien-
do X, Y, Z matrices de tamaño m × n, la instrucción plot3(X,Y,Z)
dibuja simultáneamente la línea generada por la primera columna

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

la línea generada por la segunda columna

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

y así sucesivamente hasta la línea generada por la columna n

(X1n , Y1n , Z1n ), (X2n , Y2n , Z2n ), . . . , (Xmn , Ymn , Zmn ).


mesh: Dibuja una malla en el espacio R3 que reeja la forma de la
función (matriz Z ) a lo largo del dominio denido por las matrices X
e Y . Las líneas que conforman la malla son dibujadas en colores previa-
mente 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 función (matriz Z ) a lo largo del dominio
106 GEDEM - Versión Preliminar

denido por las matrices X e Y . Las líneas 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 número n de curvas de nivel de la función 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 cálculos de cada una de las curvas de nivel o con-
tornos (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 número 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 utilización de cada comando se ilustran con el siguiente


ejemplo.

Ejemplo 4.3. Gracar la función f (x, y) = x + y en el dominio f : [5,20] × [5,20] ½


R.

Paso 1. Crear la función. La creamos en un m-file llamado ffej3, así:


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

Paso 2. Crear los datos. En el chero pej3, comenzamos por denir los valores para
los vectores x e y:
x=[5:1:20];y=[5:1:20];
Luego, necesitamos crear la malla (o dominio) sobre la cual está denida la
función, por medio del comando meshgrid, así:
FUNCIONES 107

[X,Y]=meshgrid(x,y);

Ahora, hallamos los valores de las imágenes de la función sobre este con-
junto, que se guardan en la matriz Z:

Z=ffej3(X,Y);

Paso 3. Gracar. Utilicemos los diferentes comandos que ofrece MATLABr para
visualizar la función 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 programación MATLABr nos muestra la Figura


4.5. A partir de esta gura podemos ver que el comando plot solo dibuja
líneas mientras que mesh y surf dibujan una malla. En el gráco de las
curvas de nivel, observamos que cada una de ellas tiene un color diferente
dependiendo del valor (α) al que se iguala la función. Para los grácos en
R3 también es posible utilizar el comando grid. En este ejemplo activamos
la cuadrícula con grid on después de plot3, ya que este desactiva la
cuadrícula por defecto, y luego la desactivamos al utilizar la instrucción
contour3.
108 GEDEM - Versión Preliminar

Plot3 Mesh

40 40

30 30

f(x,y)

f(x,y)
20 20

10 10
20 20
15 20 15 20
15 15
10 10
10 10
y 5 5 y 5 5
x x

Surf Contour3 (n=20)

40 40

30 30
f(x,y)

f(x,y)
20 20

10 10
20 20
15 20 15 20
15 15
10 10
10 10
y 5 5 y 5 5
x x

Figura 4.5: Comandos para gracar funciones de dos variables

4.2.2. Opciones adicionales para los grácos


Las características de la sección 4.1.2 pueden aplicarse a grácos en tres dimensiones.
Una característica adicional de grácos en R3 es el mapa de colores con el que se
gracan las supercies, que se modica con el comando colormap. Este comando
matiza entre un conjunto de colores para cada gura. Los colormaps mas utilizados6
son:

· hot: Blanco, negro, amarillo y rojo

· flag: Rojo, blanco, azul y negro.

· cool: Añil y magenta.

· autumn: Rojo y amarillo

· summer: Verde y amarillo.

· winter: Azul y verde.


6
Es posible construír numéricamente colormaps personalizados. Esto se puede consultar en la
documentación o en la ayuda de este comando.
FUNCIONES 109

Además, colorbar introduce una barra de colores que permite ver, según el mapa
de colores que se aplique, el color correspondiente a cada valor de la función, es decir,
a cada valor del eje z o eje vertical. Con los siguientes ejemplos se ilustrarán estas
opciones.

Ejemplo 4.4. Gracar la función f (x, y) = 16 (x + y)3 + 23 (x + y)2 − 500(x + y) +


10x2 + 10y 2 + 50x, sobre el dominio f : [−90,90] × [−90,90] ½ R.

Paso 1. Crear la función en un m-file llamado ffej4.


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

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


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

Paso 3. Gracar la función.


mesh(X,Y,Z)
title([’ x,y \in [’,num2str(min(x)),’,’,num2str(max(x))’]’]);
colorbar;
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);
view(50,34)

Como resultado, tenemos la Figura 4.6. Para este gráco se utilizaron las
instrucciones xlabel, ylabel y zlabel para colocar nombres en cada
uno de los ejes. Además, en el título se colocaron símbolos LATEX7 utilizando
\: la instrucción \in generó el símbolo ∈ .

La función de la Figura 4.6 aparentemente es creciente a lo largo de todo su dominio8 .


Sin embargo, debido a la escala que se está manejando (valores entre -90 y 90) se
pueden estar obviando detalles sobre el comportamiento de la función. Por esta razón
es necesario examinar en detalle el comportamiento de la función en varios dominios.
Para ello, las siguientes instrucciones gracan la misma función en cuatro conjuntos
de salida diferentes.
7
Para una mayor explicación de estos símbolos, consultar ?).
8
Recordemos que una función f (x, y) es creciente en su dominio S si para todo (x, y) ∈ S , los
elementos del gradiente (pendiente) son positivos.
110 GEDEM - Versión Preliminar

x,y∈ [−90,90] x 10
5

10

5
x 10
8

10
6
8

6
4
4

f(x,y)
2
2
0

−2
0
−4

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

y
x

Figura 4.6: Ejemplo 4.4

% Crear los cuatro conjuntos de datos


x1=[-90:9:90];y1=x1;
[X1,Y1]=meshgrid(x1,y1);
n=length(x1);
Z1=ffej4(X1,Y1);

x2=linspace(-70,70,n);y2=x2;
[X2,Y2]=meshgrid(x2,y2);
Z2=ffej4(X2,Y2);

x3=linspace(-50,50,n);y3=x3;
[X3,Y3]=meshgrid(x3,y3);
Z3=ffej4(X3,Y3);

x4=linspace(-30,30,n);y4=x4;
[X4,Y4]=meshgrid(x4,y4);
Z4=ffej4(X4,Y4);

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

subplot(2,2,2)
mesh(X2,Y2,Z2);view(50,34);
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);
title([’(x,y) \in [’,num2str(min(x2)),’,’,num2str(max(x2)),’]’]);

subplot(2,2,3)
mesh(X3,Y3,Z3);view(50,34);
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);
title([’(x,y) \in [’,num2str(min(x3)), ’,’num2str(max(x3)),’]’]);

subplot(2,2,4)
mesh(X4,Y4,Z4);view(50,34);
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);
title([’(x,y) \in [’,num2str(min(x4)), ’,’,num2str(max(x4)),’]’]);

x,y ∈ [−90,90] x,y ∈ [−70,70]


5 5
x 10 x 10

10
4
5
2
f(x,y)

f(x,y)

0 0

−5 −2

−50 −50
50 50
0 0
0 0
50 −50 50 −50
y y
x x

x,y ∈ [−50,50] x,y ∈ [−30,30]


4 4
x 10 x 10

3
15
2
10
f(x,y)

5 1

0
0
−5
−50
50 −20
20
0 0
0 0
20 −20
50 −50 y y
x x

Figura 4.7: Distintos conjuntos de salida

En la Figura 4.7, se presenta la misma función sobre los dominios [−90,90]×[−90,90],


[−70,70]×[−70,70], [−50,50]×[−50,50], [−30,30]×[−30,30]. A medida que se utilizan
112 GEDEM - Versión Preliminar

dominios con menor escala (intervalos de x e y más pequeños) se observa que la


función tiene una zona decreciente alrededor del punto (x, y) = (10, 10).

Ejemplo 4.5. Gracar la función f (x, y) = x2 − y 2 , sobre el dominio f : [−30,30] ×


[−30,30] ½ R.

Paso 1. Crear la función en un m-le llamado ffej5.


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

Paso 2. Crear los datos.


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

Paso 3. Gracar la función.


colormap(winter);

subplot(2,2,1)
contour3(X,Y,Z,30)
title(’Contour3, n = 30’);
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);

subplot(2,2,2)
[c1,h1]=contour(X,Y,Z,8);
clabel(c1,h1);
title([’Contour, Clabel, n=8’]);
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);

subplot(2,2,3)
[c2,h2]=contour(X,Y,Z,[-800 -600 -400 -200 200 400 600 800]);
clabel(c2,h2);
title([’Contour, Clabel’]);
xlabel(’x’);ylabel(’y’);zlabel(’f(x,y)’);

subplot(2,2,4)
cn = [-800 -150 0 150 800];
contourf(X,Y,Z,cn)
FUNCIONES 113

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

Contour3, n = 30 Contour, Clabel, n=8


30
−642.8571
.7143
1000 20 −1
28.5 −385

38

3
71

14
4

5.7
.71
500 10

38
43
f(x,y)

642.8571
128.5
71
0

y
0

642.85
−500

7
14
4
−10

1
57
−1000 14
.57

8.
28

12
−1 385.7143
20 −20
20
0 − −642
0 .8571
−20 −20 −30
−30 −20 −10 0 10 20 30
y x
x

Contour, Clabel Contourf


30 30
−2 −800
00 −600 0 00
20
−40 −2 20

10 10
0
20
400

400

800
800
y

0
y

0
600
600

0
20

−10 −10

−20 −20
−40 −2
00 −600 0 00
−2 −800
−30 −30
−30 −20 −10 0 10 20 30 −30 −20 −10 0 10 20 30
x x

Figura 4.8: Punto de Silla

El resultado es la Figura 4.8. Para este gráco 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 MATLABr , con
su respectiva etiqueta (indicando el valor de α). Estos comandos también
se utilizaron para gracar curvas de nivel predeterminadas (-800 -600 -400
-200 200 400 600 800). La instrucción contourf gracó otras curvas de
nivel diferentes (-800 -150 0 150 800), sin etiquetas, pero rellenando sus
contornos del mismo color de las curvas9 .

9
En el capítulo 7 se estudiará más a fondo el concepto de conjuntos contorno.
114 GEDEM - Versión Preliminar

4.3. Simulaciones en funciones de una variable


Una simulación es un ejercicio numérico que modica el valor de uno o varios pará-
metros de los que depende una función. Esto se hace para observar el cambio en el
comportamiento de la función al modicar (simular) los parámetros.

El procedimiento para realizar la simulación parte de los mismos pasos para dibujar
una función que hemos trabajado hasta ahora: crear la función, crear los datos y
gracar. Sin embargo hay dos modicaciones. La primera consiste en que al crear la
función, ésta debe recibir como entradas, además de las variables, los parámetros.
La segunda requiere que los pasos de crear los datos (especícamente, el rango o
conjunto de llegada) y gracar se repitan n veces (que pueden separarse por una
pausa), donde n es el número de valores del parámetro que se van a simular. Para
ilustrar este procedimiento veamos el siguiente ejemplo.

f(x) = x0.3 f(x) = x0.7


0.7 0.35

0.6 0.3

0.5 0.25

0.4 0.2
f(x)

f(x)

0.3 0.15

0.2 0.1

0.1 0.05

0 0
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2

x x

Figura 4.9: Simulación de una función 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 función f (x) = x0.7 ,
resultado de un cambio en el exponente de la variable (parámetro); ahora la función
presenta una curvatura mas suave, y tiende a ser lineal.

Estos cambios pueden ser observados estableciendo al interior de las funciones pará-
metros que puedan tomar diferentes valores. En el caso anterior, la forma general de
la función es f (x) = xa con a ∈ (0, 1), y se simuló el parámetro a para los valores
de a = 0.3 y a = 0.7. A continuación extendemos el anterior ejemplo, simulando el
parámetro 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 parámetro a en f (x) = xa , para a = {0.1, 0.4, 0.6, 0.9}.

Paso 1. Crear la función. En un m-file:

function f=ffej6(x,a); % Parametro como entrada


f=x.^a; % Forma funcional

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

x=[0:0.0025:0.2]; % Conjunto de salida


a=[0.1 0.4 0.6 0.9]; % Valores del Parámetro
n=length(a); % Numero de valores del parametro

for i=1:n;
y(i,:)=ffej6(x,a(i)); % Crear n conjuntos de llegada
end
Se crearon n conjuntos de llegada o rangos, donde n es el número de valores
que toma el parámetro (length(a)).

Paso 3. Gracar la función (repetir n veces):


for i=1:n;
subplot(2,2,i)
plot(x,y(i,:));
xs=xlabel(’x’);ys=ylabel(’f(x)’);
ts=title([’f(x) = x^a, a = ’,num2str(a(i))]);
set(ts,’Fontsize’,18,’Fontweight’,’Bold’,’color’,’b’)
set(xs,’FontSize’,14,’Fontweight’,’Bold’)
set(ys,’FontSize’,14,’Fontweight’,’Bold’)
end

El comando for repite el proceso 4 veces, que es el número de valores que toma el
parámetro a (n=length(a)). La instrucción y(i,:)=ffej6(x,a(i)) crea un
conjunto de imágenes de la función ffej6 para cada valor del parámetro a, y lo
guarda en la la i de la matriz y.

Una vez creados los datos, se utiliza la instrucción subplot(2,2,i), para hacer
un gráco que tenga dos las y dos columnas. En cada posición i del subplot, se
utiliza plot(x,y(i,:)) para gracar la imagen de la función cuando el parámetro
a toma el valor a(i). La salida de MATLABr se muestra en la Figura 4.10.
116 GEDEM - Versión Preliminar

f(x) = xa, a = 0.1 f(x) = xa, a = 0.4


0.9 0.7

0.8
0.6
0.7
0.5
0.6

0.5 0.4

f(x)

f(x)
0.4 0.3

0.3
0.2
0.2
0.1
0.1

0 0
0 0.05 0.1 0.15 0.2 0 0.05 0.1 0.15 0.2

x x

f(x) = xa, a = 0.6 f(x) = xa, a = 0.9


0.4 0.25

0.35
0.2
0.3

0.25 0.15
f(x)

f(x)
0.2

0.15 0.1

0.1
0.05
0.05

0 0
0 0.05 0.1 0.15 0.2 0 0.05 0.1 0.15 0.2

x x

Figura 4.10: Ejemplo 4.6

Con los comandos xlabel y ylabel se colocaron las etiquetas x y f(x) para
los ejes. La instrucción num2str(a(i)) convierte el valor numérico a(i) en una
cadena de caracteres, por lo que el título cambia para cada valor de a. Al crear la
gura se coloca nombre al título (ts) y a los ejes (xs,ys), para poder modicar
sus propiedades. Con el comando set se dene para el título un tamaño de letra 18,
grosor bold y color azul, y para los ejes un tamaño de letra 14 y grosor bold.

En este ejemplo se observa que el bucle for repite el proceso n veces, tanto al crear
las imágenes 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 función seno.

Ejemplo 4.7. Simular el parámetro a en f (x) = asen(x)


Paso 1. Crear la función. En un m-file:
function f=ffej7(x,a);
f=a.^(sin(x));
FUNCIONES 117

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


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

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

Paso 3. Simular el parámetro a:


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

Se utiliza un mismo bucle for para crear los rangos y para gracar.

Como resultado MATLABr graca secuencialmente la simulación de la función para


ocho valores del parámetro a. En la Figura 4.11 se muestra simultáneamente el
comportamiento de la función para cuatro valores de a (0.3 0.7 1.3 1.7).

A partir de la línea 7 se modican las propiedades de algunos objetos. Para el título


se establece tamaño de letra 16, grosor bold y color rojo. Las etiquetas de los
ejes tienen tamaño de letra 10, grosor bold, y por defecto el color de la letra es
negro. A diferencia del ejemplo anterior, la conguración de las características de
los ejes se hizo en una sola linea (y no en dos líneas diferentes), utilizando el vector
[xs,ys] en la instrucción set. Con line se colocó una línea 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 instrucción axis(v) se colocó una escala ja
al eje vertical de la gráca (entre -10 y 10).
118 GEDEM - Versión Preliminar

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


10 10

8 8

6 6

4 4

2 2

f(x)

f(x)
0 0

−2 −2

−4 −4

−6 −6

−8 −8

−10 −10
5 10 15 20 25 5 10 15 20 25
x x

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


10 10

8 8

6 6

4 4

2 2
f(x)

f(x)
0 0

−2 −2

−4 −4

−6 −6

−8 −8

−10 −10
5 10 15 20 25 5 10 15 20 25
x x

Figura 4.11: Ejemplo 4.7

En MATLABr podemos simular una función de una variable para un gran número
de valores de su parámetro, con grácos de tres dimensiones, en donde los valores
del parámetro se colocan en el eje z o eje vertical. Veamos un ejemplo.

Ejemplo 4.8. Simular el parámetro a en la función f (x) = asen(x) , con a = [0, 0.2]

Paso 1. Crear la función. Podemos utilizar la función ffej7.


Paso 2. Crear los datos.
x=[-10:0.1:6]; % Valores de x
a=[0:0.1:4]; % Valores del parametro
[X,A] = meshgrid(x,a); % Dominio
Y=ffej7(X,A); % Rango, Imagenes

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

ts=title([’f(x) = ’,t,’ a \in [’,num2str(min(a)),...


’,’,num2str(max(a)),’]’]);
set(ts,’Fontsize’,18,’Fontweight’,’Bold’);
set([xs ys zs],’FontSize’,14,’Fontweight’,’Bold’);

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

3.5

2.5

2
a

1.5

0.5

0
10

8
6
4
6
2
0
4 −2
−4
2 −6
−8
0 −10
f(x) x

Figura 4.12: Ejemplo 4.8

La salida de MATLABr se presenta en la Figura 4.12. Utilizamos la instrucción


texlabel para colocar la función como una expresión de LATEX y la incluimos
dentro del título. La instrucción title se segmentó en dos renglones con puntos
suspensivos (...) debido a su extensión. Además, se conguraron las características
de los ejes en una sola línea, utilizando el vector [xs ys zs] en la instrucción set.

Se observa que para valores de a cercanos a 1 la función tiende a ser lineal, pero a
medida que se aleja de este valor, las oscilaciones característricas de la función seno
se hacen más pronunciadas. Con la instrucción contour(X,Y,A,40) obtenemos
curvas de nivel que muestran el mismo resultado en el plano en donde está denida
la función (Figura 4.13).

Cuando se simulan pocos valores del parámetro de una función, no es necesario


utilizar bucles con subplots para gracar la simulación. Veamos un ejemplo en donde
la función que vamos a simular es de forma exponencial.

Ejemplo 4.9. Simular el parámetro a en la función exponencial f (x) = e(−ax) , con


a = {0.1, 0.4, 0.7, 1}
120 GEDEM - Versión Preliminar

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


9

f(x)
4

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

Figura 4.13: Ejemplo 4.8

Paso 1. Crear la función. En un m-file:

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

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


x=[0:0.01:20];
a=[0.1 0.4 0.7 1];

for i=1:length(a);
y(i,:)=ffej9(x,a(i)); % Conjuntos de llegada
end

Paso 3. Gracar la simulación.


p = plot(x,y(1,:),’r :’,x,y(2,:),’b -.’,...
x,y(3,:),’k -’,x,y(4,:),’m -’);
ls = legend([’a = ’,num2str(a(1))],[’a = ’,num2str(a(2))],...
[’a = ’,num2str(a(3))],[’a = ’,num2str(a(4))]);

% Caracteristicas adicionales
grid on;
xs=xlabel(’x’);ys=ylabel(’f(x)’);
FUNCIONES 121

ts=title([’f(x) = e^-ax a = [0.1 0.4 0.7 1]’]);


set(ts,’Fontsize’,16,’Fontweight’,’Bold’,...
’horizontalalignment’,’left’,...
’verticalalignment’,’baseline’);
set([xs ys],’FontSize’,12,’Fontweight’,’Bold’);
set(ls,’fontsize’,12,’fontname’,’times’,’location’,’north’);

1
f(x) = e−ax a = [0.1 0.4 0.7 1]
a = 0.1
0.9 a = 0.4
a = 0.7
a=1
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
x

Figura 4.14: Ejemplo 4.9

En la Figura 4.14 se observa el comportamiento de la función. Se utilizó plot para


colocar en una sola gura las cuatro simulaciones. Cada simulación se colocó con un
tipo de línea y color diferente. Se utilizó legend para colocar una leyenda con las
etiquetas de cada simulación, según sus colores y tipos de línea. Con set, el título
se alineó horizontalmente a la izquierda (derecha del usuario) y verticalmente sobre
la línea del gráco. También se utilizó para modicar tamaño y tipo de letra de la
leyenda y ubicarla en la parte superior central (north) del gráco.

4.4. Simulaciones en funciones de dos variables


En esta sección estudiaremos la forma de analizar el comportamiento de funciones de
dos variables cuando cambia alguno de sus parámetros. Para estas simulaciones, se
sigue el mismo procedimiento que con funciones univariadas, es decir, para simular
n valores de un parámetro debemos crear la función (incluyendo en las entradas al
122 GEDEM - Versión Preliminar

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

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


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

Paso 1. Crear la función con el parámetro a.


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

Paso 2. Crear los datos.


x=[-2:0.1:2];y=x;
[X,Y]=meshgrid(x,y); % Conjunto de Salida
a=[0.1 0.9 2 10]; % Valores del parametro
n=length(a);

for i = 1:n
Z{i} = ffej10(X,Y,a(i)); % n Conjuntos de Llegada
end
Para guardar las n matrices Z se utilizaron cell-arrays. Debido a que todos
los conjuntos de llegada son del mismo tamaño, también era posible utilizar
hipermatrices (Z(:,:,i)).

Paso 3. Gracar la función


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

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

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

A diferencia de los ejemplos anteriores, en este ejemplo se denieron previa-


mente los Parametros de fuente (tamaño, grosor y tipo) con números
y cadenas de caracteres. Algunas veces esto permite simplicar la progra-
mación, ya que basta sólo con cambiar el valor del parámetro una sola vez
para modicar la propiedad de varios objetos.

Como resultado obtenemos la Figura 4.15. Se observa que con valores de a cercanos
a 1 la función oscila en rangos muy pequeños, tendiendo a ser una función constante.
En la medida en que a se aleja de 1, aumenta el rango de las oscilaciones. La Figura
también muestra como MATLABr ajusta la escala del eje z en cada subplot, según
el rango de cada conjunto de llegada.

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

10 1.15

8 1.1
f(x,y)

f(x,y)

6 1.05

4 1

2 0.95

0 0.9
2 2
2 2
0 1 0 1
0 0
−1 −1
−2 −2 −2 −2
y x y x

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

2 10

8
1.5
f(x,y)

f(x,y)

4
1
2

0.5 0
2 2
2 2
0 1 0 1
0 0
−1 −1
−2 −2 −2 −2
y x y x

Figura 4.15: Simulación del parámetro a en f (x, y) = acos(xy)

Ejemplo 4.11. Simular el comportamiento de la función f (x, y) = x3 − ax2 y +


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

Paso 1. Crear la función con parámetros. Usamos la función ffej11.


124 GEDEM - Versión Preliminar

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

Paso 2. Crear los datos.


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

Paso 3. Gracar la función


for i = 1:n
Z(:,:,i) = ffej11(X,Y,a(i));
mesh(X,Y,Z(:,:,i));
ts=title({’f(x,y) = x^3-ax^2y+6xy^2-y^3’;...
[’a = ’,num2str(a(i))]});
set(ts,’Fontsize’,12,’Fontweight’,’bold’);
xs=xlabel(’x’);ys=ylabel(’y’);zs=zlabel(’f(x,y)’);
set([xs ys zs],’FontSize’,12);
pause(0.5)
end

Como resultado se obtiene una secuencia de grácos que muestran el cambio


de la función ante el cambio del parámetro a. Algunas de ellas se presentan
en la Figura 4.18. En la programación, se utilizaron hipermatrices para
guardar los conjuntos de salida (Z). Además, utilizando cell-arrays se colocó
un título con dos líneas, separadas entre si con ;.

4.5. Análisis de Funciones económicas


Generalmente los problemas económicos formulados matemáticamente requieren una
solución. El comportamiento de esta solución depende del comportamiento de las fun-
ciones que componen el problema (funciones económicas). El objetivo de esta sección
es utilizar la herramienta gráca de MATLABr para visualizar algunas funciones
económicas.

Un problema analizado en microeconomía es la elección de un consumidor entre


FUNCIONES 125

3 2 2 3 3 2 2 3
f(x,y) = x −ax y+6xy −y f(x,y) = x −ax y+6xy −y
a = −6 a = −2

2000 1000

1000 500

f(x,y)

f(x,y)
0 0

−1000 −500

−2000 −1000
5 5
5 5
0 0
0 0
−5 −5 −5 −5
y x y x

f(x,y) = x3−ax2y+6xy2−y3 f(x,y) = x3−ax2y+6xy2−y3


a=2 a=6

2000 2000

1000 1000
f(x,y)

f(x,y)
0 0

−1000 −1000

−2000 −2000
5 5
5 5
0 0
0 0
−5 −5 −5 −5
y x y x

Figura 4.16: Simulación del parámetro a en f (x, y) = x3 − ax2 y + 6xy 2 − y 3

diferentes canastas de bienes, para lo cualse asume que sus preferencias están repre-
sentadas por una función de utilidad. Una de ellas es la función Cobb-Douglas, que
modela el consumo de un agente sobre bienes que son sustitutos imperfectos, de ma-
nera que el consumidor preere gastar su presupuesto comprando combinaciones de
los bienes que tiene a su alcance, que gastarlo consumiendo sólo uno de ellos. Cuando
el agente consume dos bienes x e y , la función es de la forma U (x, y) = xa y 1−a ; donde
a ∈ (0, 1) representa la ponderación que da el agente a cada bien.

Para hacer la simulación del parámetro a, seguimos el mismo procedimiento que para
cualquier otra función: creamos la función, y en otro m-file creamos los datos,
programamos la simulación para diferentes valores de a y gracamos.

Ejemplo 4.12. Simular el comportamiento de la función Cobb-Douglas ante cambios


en el parámetro a.

Paso 1. Crear la función Cobb-Douglas con el parámetro a.


function f=ffej12(x,y,a);
f=(x.^a).*(y.^a);
126 GEDEM - Versión Preliminar

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


toman valores no negativos.
x=[0:0.5:10];y=x;
a=[0.1:0.1:0.9];
[X,Y]=meshgrid(x,y);

Paso 3. Simular el parámetro a y gracar la función


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

MATLABr modica el gráco en intervalos de 0.5 segundos, a medida que


va cambiando el valor del parámetro a. En la Figura 4.17 se presentan
algunas de las simulaciones.

Otra función utilizada en microeconomía (teoría del productor) es la función de


Elasticidad de Sustitución Constante (CES, por su sigla en inglés). La producción
en esta función depende de dos insumos capital (k) y trabajo (t), y un parámetro ρ.
1
La forma de la función es (k ρ + tρ ) ρ donde ρ < 1.

Al crear los datos de la función, tenemos en cuenta que el capital y el trabajo no


toman valores negativos, y la condición ρ < 1. Luego, simularemos el parámetro de
la función, representándolo con la letra p.

Ejemplo 4.13. Simulación de la Función CES

Paso 1. Crear la función CES con parámetros.


function f=ffej13(k,t,p);
f=((k.^p)+(t.^p)).^(1./p);
El parámetro p es una entrada o input de la función.
FUNCIONES 127

Cobb−Douglas, a = 0.2 Cobb−Douglas, a = 0.4

10 10

8 8

f(x,y)

f(x,y)
6 6

4 4

2 2

0 0
10 10
10 10
5 5
5 5
0 0 0 0
y x y x

Cobb−Douglas, a = 0.6 Cobb−Douglas, a = 0.8

10 10

8 8
f(x,y)

f(x,y)
6 6

4 4

2 2

0 0
10 10
10 10
5 5
5 5
0 0 0 0
y x y x

Figura 4.17: Función Cobb-Douglas

Paso 2. Crear los datos. Le damos valores positivos a los vectores de capital y tra-
bajo. Denimos los valores de ρ entre -15 y 1.
k=[0:1:30];t=k;
p=[-15:0.1:1];
[K,T]=meshgrid(k,t);

Paso 3. Simular el parámetro p y gracar la función


% Parametros de fuentes
tfs=10
fs=9
fw=’demi’
fn=’times’

for i=1:length(p);
Z=ffej13(K,T,p(i));
mesh(K,T,Z);
128 GEDEM - Versión Preliminar

xs=xlabel(’k’);ys=ylabel(’t’);zs=zlabel(’f(k,t)’);
ts=title([’Funcion CES \rho = ’,num2str(p(i))]);
set(ts,’Fontsize’,10,’Fontname’,times);
set([xs ys zs],’FontSize’,8,’Fontweight’,’bold’);
pause(0.1)
end

Como resultado, se tiene una secuencia de grácos que cambian de acurdo


a los cambios en el parámetro ρ. Se observa en esta secuencia que la función
de producción es de la forma Leontief, o Función mínimo cuando el valor
de ρ → −∞; cuando ρ → 0, la función de producción es Cobb-Douglas; y
cuando ρ → 1, la función de producción es Lineal. Entonces la CES genera-
liza diferentes comportamientos de las funciones de producción al cambiar
el valor de su parámetro, modelando bienes complementarios, sustitutos
imperfectos y sustitutos perfectos, respectivamente 10 . La simulación para
estos valores límite de ρ, junto sus curvas de nivel, se muestra en las guras
4.18 y 4.19.

En capítulos posteriores se utiliza la herramienta gráca para representar algunas


funciones y algunos resultados numéricos. Los grácos que se presentan contienen
títulos, etiquetas de los ejes y otras características que se explicaron en este capítulo.
Como estas características se crean con el mismo procedimiento que se mostró en
este capítulo, no se colocará explícitamente su programación.

Los capítulos, 5, y 6 analizan funciones utilizando cálculo (diferencial e integral)


y métodos numéricos. Estos métodos sirven para estudiar funciones que no pue-
den representarse grácamente, o cuando se requieren cálculos precisos en un punto
determinado. Esto será útil, ya que algunas funciones económicas presentan estas
características.

Ejercicios
En los grácos que debe realizar a continuación recuerde crear para todas las guras
un título, nombre para los ejes, líneas segemtadas en las asíntotas y características
especiales para cada objeto, diferentes en cada ejercicio.

10
Ver Nicholson (1997, pág. 214).
FUNCIONES 129

Funcion CES ρ = −100 Minimo

9
10 8

8 7

6 6
f(x,y)
5

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

Funcion CES ρ = 0.01 Cobb−Douglas


30
x 10
9
15 8

7
10
6
f(x,y)

y
5
4

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

Figura 4.18: Función CES

1. Graque en MATLABr las siguientes funciones denidas en R. Utilice como


conjunto de salida intervalos en donde la función presente cambios en su com-
portamiento:

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 n∈Z


y 2 − 2y 2 + 5y
f (y) =
y 0.5 − 2y + 4

0 si z ≤ 3
g(z) =
1 si z > 3
x
f (x) =
(x − 1)(x + 2)
130 GEDEM - Versión Preliminar

Funcion CES ρ = 1 Lineal

9
20 8

7
15
6

f(x,y)
10
5

y
5 4

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

Funcion CES ρ = 100 Maximo

9
10 8

8 7

6 6
f(x,y)

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

Figura 4.19: Función CES

2. Graque en MATLABr las siguientes funciones denidas en R2 . Utilice como


conjunto de salida intervalos en donde la función presente cambios en su com-
portamiento:

f (x, y) = x+y
y
g(x, y) = 2
x −1
h(z, w) = max{min{2z, 3w}, {3z, 2w}}
z(m, n) = |m3 − n3 |
p(x, y) = [[x + y]] = n si n ≤ x + y < n + 1 n∈Z
g ◦ (h, z)
· ¸0.4
ax2 + bx − c
3. Para la función f : R+ ½ R con f (x) =
dx + 5e

Simule los parámetros a, b, c secuencialmente en R2 ; para el parámetro


simulado, asuma valores en el intervalo [−3, 3] y para los otros parámetros
asuma el valor de 1.
FUNCIONES 131

Simule los parámetros d, e en R3 utilizando mesh; para el parámetro si-


mulado, asuma valores en el intervalo [−3, 3] y para los otros parámetros
asuma el valor de 1.

4. ?) presenta una versión lineal del modelo de hiperinación propuesto por ?).
Al resolver para los precios pt utilizando expectativas adaptativas, se halla una
ecuación en diferencias que para ser estable (no hiperinación) requiere que:
¯ ¯
¯ αλ + 1 − λ ¯
¯ ¯ (4.1)
¯ 1 + αλ ¯ < 1

donde λ ∈ [0, 1] es la velocidad de ajuste de las expectativas, y α representa la


relación entre la tasa de interés y la demanda de dinero (α < 0).
¯ ¯
¯ αλ + 1 − λ ¯
Graque la función f (λ, α) = ¯¯ ¯
1 + αλ ¯
Graque en R2 los valores de α y λ que generan hiperinación en el modelo
de Cagan. Interprete.
2
5. La ecuación (y − k) = (x−h)4a representa una parábola en el plano cartesiano,
con vértice en (h, k) y con una distancia a entre el vértice y el foco. Esta
ecuación se puede reescribir de tal forma que y sea una función de x y de los
parámetros h, k, a. Para la función y(x), realice una simulación en R3 para cada
parámetro, colocando una línea punteada en la directriz, asumiendo valores
para el parámetro simulado en el intervalo [−2, 2], y para los otros parámetros
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 repre-
sentarse por la siguiente función lineal: QD = a−P c, donde a, c son parámetros
y P es el precio del arroz. La cantidad ofrecida se representa por la función
lineal QO = b + P d

a) Graque, en una misma gura, las funciones de oferta y demanda, asu-


miendo a = 5, b = 1, c = 4 y d = 2.
b) Halle numericamente el equilibrio de mercado
c) Realice una simulación de cada parámetro, para incrementos en sus valores
en el intervalo [−1, 1]. ¾Qué ocurre con el equilibrioo de mercado en cada
simulación?. Explique brevemente.
132 GEDEM - Versión Preliminar

7. La función de elasticidad constante recibe este nombre, porque su elasticidad


1
de sustitución (σ = 1−ρ ) depende sólo del parámetro ρ.

a) Construya la función CES de producción tal que dependa del capital, el


trabajo y la elasticidad de sustitución (σ ).
b) Por medio de simulaciones numéricas, determine los valores límite de σ
con los que se obtienen las funciones Lineal, Mínimo y Cobb-Douglas.

8. Dos funciones utilizadas con frecuencia en economía 11 son la función CRRA


(Constant Relative Risk Aversion) y CARA (Constant Absolute Risk Aversion),
denidas como:

 1−γ

 ct

 γ > 0, γ 6= 1
1 − γ
CRRA : U (ct ) =




Ln(c ) γ=1
t

µ ¶
1
CARA : U (ct ) = − e−αc α>0
α

En estas funciones, el Coeciente de Aversión Absoluta al Riesgo está dado por


00 (c ) 00
− UU 0 (c t
t)
, y el de Aversión Relativa al Riesgo por − UU 0(c(ctt)c) t . Para cada función:

a) Calcule matemáticamente U 0 y U 00 .
b) Graque en una sola gura U , U 0 y U 00
c) Simule el comportamiento de U , U 0 y U 00 para diferentes valores de γ y α.

9. Graque la función de distribución y de distribución acumulada de las siguien-


tes 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]
(simulación)
c) Univariada de Laplace simulando α y β .
d) Bivariada Normal con media 0 y varianza 1
11
Monsalve (2005a), Blanchard (1989)
12
Ver ?).
FUNCIONES 133

10. La función de producción de una empresa que tiene como insumos capital (K) y
trabajo (L). Si se ha estimado que la empresa tiene una función de producción

de la forma F (K, L) = K + L.

a) ¾Cómo es esta función?


b) ¾Cómo son sus curvas de nivel?.
c) Graque estas guras en una sola ventana. (Sugerencia: Use el comando
subplot)

11. Graque la función f (x) = 3x+1


x−2 . Sabemos que esta función tiene una asíntota
en x = 2. Dibuje en la misma ventana la asíntota con un estilo de línea puntea-
da. (Sugerencia: Use el comando line). ¾Qué situación económica o nanciera
podría representar una función de este tipo?
134 GEDEM - Versión Preliminar
Capítulo 5

Derivación

En la pasada sección examinamos cómo evaluar computacionalmente diferentes fun-


ciones a partir de un criterio gráco, reconociendo distintas propiedades y observando
el proceso para llegar a su construcción. No obstante, la necesidad de estudiar ciertas
características de las funciones que involucran mayor precisión, nos lleva a conside-
rar nuevos conceptos que permiten hacer otro tipo de análisis. En este capítulo nos
enfocaremos entonces en la derivación.

Especícamente, para tener una aproximación a la solución de problemas cuya res-


puesta analítica es limitada, se ha desarrollado la derivación numérica. De esta ma-
nera, dando un marco conceptual, la derivada representa un cambio innitesimal en
la función con respecto a las variables de las que depende y la forma más natural de
establecer cuál es la aproximación numérica es mediante la siguiente denición:

f (x + h) − f (x)
f 0 (x) = lı́m (5.1)
h→0 h

Donde f 0 (x) es la derivada de la función f . Dado un intervalo I ∈ < y una función


f : I → <, si f tiene una derivada f 0 y f 0 es a su vez diferenciable, la derivada de
f 0 es la segunda derivada, es decir, la derivada de la derivada, que se denota por f 00 .
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 más allá de la primera se considera
derivada de orden superior y su existencia está sujeta al número de veces que pueda
ser diferenciada la función.

Para solucionar computacionalmente problemas que comprendan derivación, la si-

135
136 GEDEM - Versión Preliminar

guiente estructura determina cómo se han creado cada uno de los ejemplos contenidos
en este capítulo, buscando hacer un uso apropiado de cada una de las herramientas
disponibles:

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


que necesite MATLABr para iniciar el proceso de derivación, ya sea en un
M-le o de cualquier otra forma que reconozca el programa.

Paso 2: Crear los datos pertinentes y unirlos con las funciones y otros pará-
metros previamente jados en MATLABr para plantear la situación.

Paso 3: Identicar y llamar el código adecuado para resolver el problema.


En este proceso vale la pena recordar que existen diferentes formas de llegar
a la misma solución y, por lo tanto, hay distintas rutinas que son útiles para
alcanzar ese resultado, siendo importante evaluarlas y descartar aquellas menos
ecientes en hacerlo.

Siguiendo esta estructura, el capítulo está dividido en dos secciones: en la primera


examinamos con detalle las rutinas computacionales que permiten obtener derivadas
de primer orden y los métodos que las sustentan; y, en la segunda, aquellos comandos
útiles para llegar a las derivadas de orden superior de una función.

5.1. Derivación de primer orden


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

cn xn + cn−1 xn−1 + · · · + c2 x2 + c1 x + c0 (5.2)

Donde c es una constante que acompaña la variable x y el subíndice indica la posición


en la que se encuentra respecto a la variable. Para derivar un polinomio, MATLABr
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 derivación. Así, la derivada del polinomio (5.2) es:

[cn × n]xn−1 + [cn−1 × (n − 1)]xn−2 + · · · + [c2 × 2]x + c1

Ejemplo 5.1. Encontremos la derivada del polinomio g(x) = 5x4 − 9x3 − 41x + 32
Nombre del Capítulo 137

Paso 1: Escribimos en MATLABr el vector de coecientes del poli-


nomio que nos interesa derivar1
F=[5 -9 0 -41 32]

Paso 2: Ahora, invocamos a la rutina polyder


F1=polyder(P)

El resultado de esta operación es un vector F1 con los elementos [20 -27 0


-41], que son, en efecto, los coecientes del polinomio resultado del proceso de
derivación 20x3 − 27x2 − 41. Cabe resaltar que el vector resultante F1 es de tamaño
1 × n − 1, porque el último coeciente del vector F corresponde a x0 . En otras
palabras, el último sumando del polinomio es un escalar y su derivada es siempre
cero: MATLABr no muestra entonces su derivada2 .

Método de Diferencia Finita


Como ya hemos mencionado, la denición matemática de derivada permite calcular
numéricamente la derivada de una función. Esta forma de hallarla es conocida como
Diferencia Finita: sin importar la dimensión en que se encuentre, la idea subyacente
consiste en dividir las diferencias de las imágenes entre un número sucientemente
pequeño. Los distintos algoritmos que utilizan la diferencia nita para el cálculo de
la derivada varían de acuerdo a la forma como determinan las imágenes (aquellos
elementos del codominio) o establecen el valor del espaciamiento (el espacio entre los
elementos del dominio) y, quizá uno de los algoritmos más sencillos para encontrar
la derivada de esta forma, consiste en omitir el límite y utilizar un h sucientemente
pequeño en la ecuación (5.1), es decir,

f (x + h) − f (x)
f 0 (x) = + O(h) (5.3)
h
Donde O(·) es una función que prescribe el error entre la derivada y la aproximación
numérica, conocido como Error de Truncamiento. Esta función depende, en este
caso, de h1 (h → 0) y, por esto se considera de orden 1. Mediante la construcción
de un polinomio de Taylor de orden 2 y exigiendo que f sea tres veces diferenciable,
obtenemos un resultado con una aproximación más exacta a la derivada:
1
Nótese que el coeciente que acompaña a x2 es cero.
2
Por sus características, polyder sólo permite derivar en una sola dimensión, es decir, con
respecto a una sola variable.
138 GEDEM - Versión Preliminar

f (x + h) − f (x − h)
f 0 (x) = + O(h2 ) (5.4)
2h
En este caso, el error de truncamiento es de segundo orden - h2 . Muchas de las
rutinas utilizadas por MATLABr para encontrar derivadas se basan en el método
de diferencia nita por su facilidad de cálculo, veamos entonces los comandos más
comunes para la aproximación de derivadas numéricas (Mantilla 2004).

5.1.2. gradient
El Gradiente de una función es un vector que contiene sus primeras derivadas y, de
este modo, al evaluar la norma del gradiente, la dirección del vector nos señala si la
función crece o decrece. Así, para cualquier vector de variables ~x = x1 , x2 , . . . , xn , el
gradiente de la función f = f (~x) que depende de n variables corresponde a:
à !
∂f (~x) ∂f (~x) ∂f (~x)
∇f = , ,..., (5.5)
∂x1 ∂x2 ∂xn

MATLABr obtiene numéricamente el gradiente de una función hasta cierto número


de variables3 mediante el comando gradient, a partir del método de diferencia ni-
ta. Este comando calcula entonces las derivadas parciales de una función en cualquier
punto (~x) en el que se desee hacer algún tipo de análisis.

La sintaxis de gradient es: [FX,FY] = gradient(F,HX,HY) donde F es la


matriz de imágenes de la función a derivar de tamaño n×n y HX y HY corresponden
al espacio entre puntos a lo largo del eje X y al eje Y respectivamente (extendible
al número de dimensiones en las que se trabaje). El resultado del uso del comando
son dos matrices FX y FY que corresponden respectivamente a dF dF
dx y dy (también
extendibles al número de dimensiones en las que se trabaje).

Ejemplo 5.2. Calculemos el gradiente de la función f (x) = x4 (f : < → <2 )

La derivada de la función f (x) = x4 es f 0 (x) = 4x3 . De forma que, grácamente, la


función a derivar es una parábola y la derivada tiene la forma de una función cúbica.
Veamos qué sucede con la derivada aplicando gradient:

Paso 1: Crear la función que nos interesa derivar en un M-le:


3
La cantidad de variables depende de la capacidad de la máquina que haga el proceso.
Nombre del Capítulo 139

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

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


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

Paso 3: Calcular el gradiente numérico de la función mediante


gradient:
f1=gradient(z,1)

Donde el espacio denido entre cada valor de x es HX=1, es decir, el gradiente


calculado tiene la misma escala de las imágenes de la función. Si HX diere del
espacio existente entre elementos del vector x, la escala del gradiente es distinta a
aquella de las imágenes de la función original y, además, como aquí la función sólo
tiene una variable, la matriz que contiene las imágenes de la función es un vector de
tamaño 1 × n, cuya norma es 113.1592, o sea, la función es creciente entre -10 y 10.

A partir de los cálculos numéricos que hemos realizado y los métodos para gracar
del capítulo 4, la función f (x) = x4 y su derivada están en la Figura 5.1, donde
observamos que la derivada numérica de f (x) sí tiene una forma cúbica.

800

600

400

200
Y

−200

4
−400 f(x)=x
f´(x)=4x3

−600
−5 −4 −3 −2 −1 0 1 2 3 4 5
X

Figura 5.1: Gráca de f (x) = x4 y su derivada

Ejemplo 5.3. Calculemos el gradiente de la función f (x, y) = x2 + y 2 en <3


140 GEDEM - Versión Preliminar

Paso 1: Escribir un M-le ej3.m


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

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


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

Paso 3: Invocar el comando gradient


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

En este caso, HX y HY son diferentes al espacio ya denido entre cada valor de X e Y


y, por ende, el gradiente calculado (PX,PY) no tiene la misma escala de las imágenes
de la función (Z). A diferencia del Ejemplo 5.2, la función tiene más de una variable,
entonces, si n corresponde al número de elementos contenidos en x e y , la matriz de
imágenes de la función es ahora de tamaño n × n. Para apreciar mejor los resultados
del ejercicio, observemos la función f (x, y) = x2 + y 2 y su derivada en la Figura 5.2,
que es el resultado de gracar las matrices PX y PY en MATLABr .

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


Nombre del Capítulo 141

5.1.3. diff
A través del método de diferencia nita, el código diff hace también la derivación
numérica de una función. 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 función a derivar y la distancia entre las coordenadas
de la función, y el resultado que entrega MATLABr es la aproximación numérica a
la derivada de la función. Veamos en el Ejemplo 5.4 cómo se utiliza diff:
5
Ejemplo 5.4. Calculemos la derivada de la función f (x) = x 2

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


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

Paso 2: Invocar el comando di


F1=diff(x.^(5/2))/h
3
La respuesta F1 es una aproximación numérica a 52 x 2 : la derivada de la función
5
f (x) = x 2 (La norma del vector F1 es 68, lo que implica que es una función creciente).
De forma concreta, el resultado de invocar el comando diff lo observamos en la
Figura 5.3, que es el resultado de gracar la salida de MATLABr .
60

50

40

f(x)30

20

10
f(x)=x5/2
f´(x)=(5/2)x3/2

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x

5
Figura 5.3: Derivada de f (x) = x 2 mediante diff
142 GEDEM - Versión Preliminar

Al igual que gradient, la rutina diff es extendible a casos de derivación con más
variables. En el siguiente ejemplo observamos cómo realizar la derivación numérica
de una función compuesta por dos variables.

Ejemplo 5.5. Encontremos la derivada numérica de la función f (x, y) = x0.5 y 0.8

Paso 1: Crear la función a derivar en un M-le:


function q=ej5(x,y);
f=x.^.5.*y.^.8;

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


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

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


ZX=diff(Z,1,2)/h
ZY=diff(Z,1,1)/h

En la sintaxis del comando, al especicar diff(Z,1,2) MATLABr encuentra para


Z (primer término) la primera derivada (el 1 de la mitad) manteniendo ja la segunda
variable (derivada parcial respecto a x) y, al especicar diff(Z,1,1), calcula la
primera derivada parcial de la función respecto a y (mantiene ja la primera variable).
El resultado que MATLABr nos proporciona indica que las funciones obtenidas (las
derivadas parciales) son crecientes: la norma de las matrices ZX y ZY son mayores a
cero, en particular, 125.8730 y 126.5741.

5.1.4. fjac y fdjac

Una matriz jacobiana hace una generalización del gradiente al calcular, simultánea-
mente, las derivadas parciales de varias funciones respecto a diferentes variables,
organizándolas en una matriz. Supongamos un conjunto de m ecuaciones con n va-
riables:
Nombre del Capítulo 143

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

La matriz jacobiana J asociada al sistema anterior contiene, en cada una de sus las,
el gradiente de las funciones fi para todo i = 1, 2, . . . , m. Es decir,
 
∇f1
 
 ∇f2 
J =
 .. 
 (5.6)
 . 
∇fm
MATLABr calcula, por diferencia nita, los elementos de una matriz jacobiana
mediante los comandos fjac y fdjac4 . La sintaxis de la rutina fjac es:

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 función j respecto a la variable i5 , el vector a dene el punto
donde se va a calcular la derivada y P1,P2,..., etc son parámetros adicionales a
la función.

Aunque el método utilizado por fdjac es análogo 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
evalúa la derivada del sistema y P1,P2,... son parámetros adicionales aplicables
la función. Veamos un ejemplo de cómo 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
4
Estas rutinas pertenecen al toolbox COMPECON
5
Si por ejemplo se deseara calcular la derivada de la segunda ecuación con respecto a la primer
variable el vector debería ser [1,2].
144 GEDEM - Versión Preliminar

Paso 1: Crear la función que contiene el sistema de ecuaciones en un


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

Paso 2: En otro chero invocamos el comando y calculamos la jaco-


biana en (1,1):
H(1,:)=fjac(’ej7a’,[1,1],[1;1]);
H(2,:)=fjac(’ej7a’,[1,2],[1;1]);
H

Cabe notar que, en este ejemplo, la denición computacional de las variables es


distinta a aquella que hemos venido usando a lo largo del capítulo. El vector v, de
tamaño 1×2, tiene como primer elemento a la variable x y como segunda componente
a y (el tamaño está determinado por la cantidad de variables en el ejemplo). Esta
notación simplica sustancialmente el análisis porque, en el fondo, la matriz jacobiana
es la derivada de una matriz respecto a un vector de variables. Así, la matriz H está
constituida por dos vectores de derivadas respecto a x e y : el primer vector la
corresponde al gradiente de la primera ecuación y el segundo, al gradiente de la
segunda ecuación, ambas derivadas evaluadas en el punto (1,1). Ahora veamos cómo
encontrar la matriz jacobiana, en el mismo punto, a partir de fdjac:

Paso 1: Crear la función que contiene el sistema de funciones en un


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

Paso 2: En otro chero invocamos el comando y calculamos la jaco-


biana en (1,1):
H=fdjac(’ej7b’,[1;1])

En este ejemplo observamos que fdjac es una generalización de las propiedaddes


de fjac: mientras en fjac se requiere especicar qué ecuación se deriva respecto a
Nombre del Capítulo 145

qué variable y el punto de evaluación, en fdjac sólo se necesita denir el punto en


que se quiere calcular la jacobiana.

5.1.5. Aplicación: Una función de Producción tipo Cobb-Douglas


El análisis económico de las empresas llevó a muchos a estudiar la forma más sencilla
de abstraer la producción, de manera que se evitara caer en las complejidades técnicas
propias del proceso productivo. Los economistas han logrado hacer esa abstracción
por medio de la función de producción: una manera matemática de representar el
producto como una variable dependiente de diferentes factores de producción, visible
en la ecuación (5.7).

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

Donde q es la cantidad producida por la rma, K es el capital (uso de máquinas),


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
económico, es interesante observar cómo 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 función de producción simplicada de la forma q = f (K, L).

No obstante, las empresas no pueden producir innitamente debido a que existe una
restricción de recursos y capacidad que se lo impide. Intuitivamente, un aumento en
la cantidad de un factor (por ejemplo, capital), manteniendo constantes los demás
factores, debe producir más 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 sería 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 más meseros que mesas, el último mesero contratado
no tendrá a quien atender y, por tanto, su aporte a la producción es prácticamente
nulo. Supongamos entonces que una empresa tiene la siguiente función de producción:
1 1
f (K, L) = K 3 L 3 . Veamos grácamente su comportamiento y su forma en la Figura
5.4. Allí observamos que la función tiene rendimientos decrecientes en cada factor,
ya sea K o L.

La forma más sencilla para analizar el efecto de un aumento de un factor sobre


146 GEDEM - Versión Preliminar

f(K,L)
2

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

1 1
Figura 5.4: La función de producción f (K, L) = K 3 L 3

el producto es aislando ese factor de los demás por un instante. La contribución al


producto resultante de agregar una unidad más de factor se denomina Productividad
Marginal (P M g ) y su evaluación matemática se hace mediante derivadas parciales,
es decir, al estudiar la modicación de un factor, se dejan constantes todos los demás.
Su forma es descrita en la ecuación (5.8).

∂q ∂q
P M gK = P M gL = (5.8)
∂K ∂L
1 1
De esta manera, retomando nuestra función de producción f (K, L) = K 3 L 3 , el
análisis de la contribución de un factor lo hacemos mediante sus derivadas parcia-
les respecto a capital o a trabajo. Así, para hallar la derivada parcial invocamos
gradient cuando ya hemos creado la función:

Paso 1: Crear la función de producción en un M-le:


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

Paso 2: Crear los datos pertinentes a la función (no negativos) y


llamarla:
h=0.2
k=[0:h:10]; l=k;
a=1/3; b=a;
Nombre del Capítulo 147

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

Paso 3: Invocar el comando gradient:


[PK,PL]=gradient(Q,h,h)

Los resultados de esta operación son PK y PL, las derivadas parciales de la función
respecto a K y L respectivamente. Observamos estos resultados en la Figura 5.5,
donde tenemos que ambas derivadas son positivas (al incrementar los factores crece
el producto), sin embargo, son decrecientes (cada unidad más de cada factor aumenta
el producto en menos que esa proporción). Por ejemplo, la productividad marginal
del capital (la gura de la izquierda) muestra cómo, ante un aumento del capital en
algo más que cero (la parte más izquierda de la gráca), resulta en una gran cantidad
de producto (el eje vertical); de otro lado, un incremento muy grande (la parte de
más a la derecha) implica un crecimiento casi nulo del producto (la gráca de la
función se hace cada vez más cercana a cero).

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


Marginal del Trabajo.

5.2. Derivación de orden superior


Como ya hemos explicado, es posible derivar una función f : I → < más de una vez.
A partir de distintos métodos como polinomios o diferencias nitas, se establecen
148 GEDEM - Versión Preliminar

aproximaciones bastante precisas de las derivadas e, incluso, de las funciones mismas


en puntos particulares6 . En esta sección presentamos los códigos con los que es po-
sible hacer derivación de orden superior en MATLABr y cuya utilidad está atada a
aplicaciones económicas y a herramientas de gran utilidad para temas más avanzados
en economía y otras ciencias.

5.2.1. polyder
Al igual que la derivación de primer orden de un polinomio, polyder permite conti-
nuar derivando varias veces en una sola dimensión. A partir de la sintaxis ya denida
del comando, ahora es necesario que el input sea la derivada anterior o, en su defec-
to, para llegar a la derivada superior hay que invocar el código 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. Analíticamente, la primera derivada de f (x) es f 0 (x) = 20x3 + 27x2 + 16x + 3
y la segunda es f 00 (x) = 60x2 + 54x + 16. Observemos el resultado mediante el uso
de polyder:

Paso 1: Escribimos en MATLABr el vector de coecientes que nos


interesa derivar
P=[5 9 8 3 1]

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


Q=polyder(polyder(P))

El resultado que entrega MATLABr es [60 54 16], que corresponde al resul-


tado que habíamos hallado en la solución analítica. Hay que resaltar que MATLABr
cuenta de derecha a izquierda a partir de x0 , es decir, el último número en el vector
de respuestas es un escalar. La ventaja del uso de polyder radica en la facilidad
para hallar, en polinomios muy grandes, derivadas muy altas debido a la precisión
numérica de MATLABr y lo tedioso que signica hacer una gran cantidad de deri-
vaciones.

6
En particular, en este capítulo se aborda la aproximación de funciones por medio de la Expansión
de Taylor.
Nombre del Capítulo 149

5.2.2. gradient
Las derivadas de orden superior, en el caso de una sola variable, son fáciles de cal-
cular mediante el comando gradient. Así, para hallar la segunda derivada con
gradient, el nuevo input es el gradiente anteriormente encontrado.
2
Ejemplo 5.8. Hallemos la segunda derivada de la función f (x) = x 3 . Tras hacer
4
las dos derivaciones correspondientes, la última analíticamente es: f 00 (x) = − 29 x− 3 .

Paso 1: Crear la función a derivar en un M-le:


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

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


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

Paso 3: Calcular los gradientes numéricos de la función mediante


gradient:
PX2=gradient(gradient(z,1),1)

El resultado de aplicar gradient es evidente en la Figura 5.6, donde observamos


la igualdad existente entre el resultado analítico y el resultado numérico. Asimismo,
con gradient se obtienen resultados muy precisos para derivadas de orden superior
difíciles de calcular analíticamente, por ejemplo, al aplicar gradient a una función
multivariada, hallamos la matriz hessiana: una matriz que agrupa las segundas deri-
vadas de una función y tiene la forma puntualizada en la ecuación (5.9).

 
∂2f ∂f
 ··· 
 ∂x1 ∂x1 ∂xn 
 .. .. .. 
Hf (x̂) =  . . .  (5.9)
 
 ∂f ∂2f 
···
∂xn ∂x1 ∂xn

La forma más fácil de hallar la hessiana con gradient para, supongamos, una
función 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 más, pero esta vez introduciendo cada vez la matriz de imágenes
150 GEDEM - Versión Preliminar

2/3 2/3
Primera Derivada de f(x)=x Segunda Derivada de f(x)=x
1.8 6

1.6 5

4
1.4

3
1.2

2
1

PX2
PX

1
0.8
0

0.6
−1

0.4
−2

0.2 −3

0 −4
−10 −8 −6 −4 −2 0 2 4 6 8 10 −10 −8 −6 −4 −2 0 2 4 6 8 10
x x

2
Figura 5.6: Las dos primeras derivadas de f (x) = x 3

resultante de la primera derivación. Veamos entonces el Ejemplo 5.9 para observar


el uso de gradient en funciones multivariadas:

Ejemplo 5.9. Hallemos la matriz hessiana de la función descrita en el Ejemplo 5.3:


f (x, y) = x2 + y 2 . Analíticamente, tras hacer las sucesivas derivaciones, la matriz
corresponde a: Ã !
2 0
0 2

donde observamos que las derivadas cruzadas son iguales, algo característico de la
hessiana.

Paso 1: Crear la función a derivar en un M-le:


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

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


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

Paso 3: Calcular el gradiente numérico de la función mediante


gradient:

[PX,PY]=gradient(Z,1,1);
Nombre del Capítulo 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 MATLABr 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 más exteriores
para el caso de PXX y el de las las más exteriores para el caso de PYY dieran de
2 sucede porque, al ser gradient un método basado en diferencias, los resultados
de las esquinas no tienen otro término con el cual hacer diferencia y MATLABr
automáticamente les asigna una aproximación. Pero la la y la columna del centro
son concluyentes: el resultado de la derivación, en ambos casos, es 2, como observamos
en las matrices (5.10). Si generalizamos el resultado para más de cuatro elementos
a, por ejemplo, cien elementos, el resultado es mucho más fuerte y la mayoría de los
componentes de las matrices PXX y PYY serán 2.

PXX = 1 1.5 2 1.5 1 PYY = 1 1 1 1 1


1 1.5 2 1.5 1 1.5 1.5 1.5 1.5 1.5
1 1.5 2 1.5 1 2 2 2 2 2 (5.10)
1 1.5 2 1.5 1 1.5 1.5 1.5 1.5 1.5
1 1.5 2 1.5 1 1 1 1 1 1

En el caso de funciones univariadas, para calcular derivadas de más allá de segundo


orden, se replica el proceso de encontrar la segunda derivada: se determina la deriva-
da inmediatamente anterior a aquella que deseamos encontrar. Veamos el siguiente
ejemplo para establecer numéricamente cómo se halla la tercera derivada de una
función:
10
Ejemplo 5.10. Calculemos la tercera derivada de la función f (x) = x 3 . La primera
7 4
derivada de f (x) es f 0 (x) = 10 00 70 3
3 x , la segunda corresponde a f (x) = 9 x y la tercera
3
1
es f (3) (x) = 280
27 x . Veamos cuál es el resultado de la derivación numérica:
3

Paso 1: Crear la función a derivar en un M-le:


function f=ej10(x);
f=x.^(10/3);
152 GEDEM - Versión Preliminar

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


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

Paso 3: Calcular el tercer gradiente numérico de la función mediante


gradient:
PX3=gradient(gradient(gradient(z,1),1),1)

El resultado descrito por la matriz PX3, cuya norma es positiva e igual a 129.4025 (o
sea, la tercera derivada de la función es creciente), es la respuesta numérica a invocar
tres veces gradient sobre la función f (x). El resultado de gracar PX3 lo obser-
vamos en la Figura 5.7, donde el resultado analítico y el numérico son ligeramente
distintos a causa del error de truncamiento inherente a la aproximación numérica
(O(h2 )).

Tercera Derivada Numerica Tercera Derivada Analitica


10 10

9 9

8 8

7 7

6 6
PX3

5 5
y

4 4

3 3

2 2

1 1

0 0
−10 −8 −6 −4 −2 0 2 4 6 8 10 −10 −8 −6 −4 −2 0 2 4 6 8 10
x x

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

5.2.3. diff
La rutina diff también es útil para hallar derivadas de orden superior, no obstan-
te, para determinar la derivada de orden superior para, por ejemplo, una función
univariada, hay que introducir al comando la derivada inmediatamente anterior (si
queremos hallar la cuarta derivada, el input es la tercera derivada y así sucesivamen-
te). El siguiente ejemplo muestra claramente cómo se trabaja con diff en funciones
univariadas.
Nombre del Capítulo 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 función:


F1=diff(x.^(5/2))/h

Paso 2: Invocar nuevamente el comando:


F2=diff(F1)/h
5
La salida F2 es la segunda derivada numérica de la función x 2 que es una función
creciente (la norma del vector es 86.0233). Para examinar funciones multivariadas,
hay que especicar de qué orden y en qué dimensión es la derivada (o sea, si está
derivando respecto a x o a y ). En el Ejemplo 5.12 es evidente cómo es el uso de diff
en el caso de más de una variable.

Ejemplo 5.12. Calculemos la segunda derivada de la función del Ejemplo 5.9:


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

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


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

Paso 2: A partir de estas derivadas, encontrar las derivadas respecto


a cada variable:
ZXX=diff(Z,2,2)
ZYY=diff(Z,2,1)

Paso 3: Establecer las derivadas cruzadas:


ZXY=diff(ZX,1,1)
ZYX=diff(ZY,1,2)

En este ejemplo apreciamos el uso de los números de acuerdo al orden de la derivada


que se siga. En el Paso 2 tomamos Z derivándolo respecto a x dos veces (el valor
correspondiente a ZXX) y, después, haciéndolo respecto a y dos veces (el valor de
ZXY). De otro lado, en el Paso 3 tenemos las derivadas cruzadas: a partir del Paso 1
obtenemos la derivada de Z respecto a x para luego derivar con y (ZXY) y, el siguiente
paso es el caso exactamente inverso (ZYX). Cabe anotar que el primer número de la
sintaxis está determinando el orden de la derivación, mientras el segundo establece
cuál es la variable respecto a la que se deriva, además, los resultados son los mismos
154 GEDEM - Versión Preliminar

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

ZXX = 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)
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2

5.2.4. fdhess
Hallar hessianas con gradient o diff puede ser tedioso y, como ya vimos, impreci-
so cuando se asignan pocos datos al proceso. Existe otro algoritmo que encuentra de
manera más exacta la hessiana: fdhess7 permite hallar en MATLABr la segunda
derivada de una función calculada en uno o varios puntos. La sintaxis de este coman-
do es H=fdhess(f,x,varargin), donde f corresponde al nombre de la función
del modo fval = f(x); x es el punto de evaluación y varargin son argumentos
adicionales para f (opcional). El resultado del comando es H, es decir, la segunda
derivada en el punto de evaluación.

Ejemplo 5.13. Obtengamos la segunda derivada de la función f (x, y) = x3 − 3xy 2


en el punto (10,-9) y hagamos su análisis.

Paso 1: Crear la función a derivar en un M-le:


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

Paso 2: Calcular la segunda derivada de la función mediante


fdhess:
H=fdhess(’ej11’,10,-9)

MATLABr muestra un resultado numérico que nos permite analizar la forma de


la función en el punto (10,-9): al observar la gráca de la función en la Figura
7
Esta rutina pertenece al toolbox COMPECON.
Nombre del Capítulo 155

5.8 vemos que, en el punto (10,-9), la función es creciente y, al cotejarla con la


solución de MATLABr tras la ejecución de fdhess (60), esta respuesta nos dice
algo evidente: la función en el punto (10,-9) crece a una tasa creciente y la magnitud
del resultado nos da la dimensión de ese crecimiento, es decir, conforme se evalúe
fdhess en un punto donde la pendiente sea muy grande, el resultado del comando
es progresivamente mayor.

Figura 5.8: La función f (x, y) = x3 − 3xy 2

Ejemplo 5.14. Observemos cuál es la forma de la función f (x) = x3 + y 3 en el


punto (0,0)

Paso 1: Crear la función a derivar en un M-le:


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

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


fdhess:
H=fdhess(’ej12’,0,0)

Tras aplicar fdhess en este ejemplo, vemos que el resultado del cálculo es cero.
MATLABr conrma lo que grácamente observamos en la Figura 5.9: la función
x3 + y 3 en (0,0) es plana, por lo que se concluye que allí la función no es creciente ni
decreciente y que su tasa de crecimiento es exactamente igual a cero.
156 GEDEM - Versión Preliminar

Figura 5.9: La función f (x) = x3 + y 3

5.2.5. Expansión de Taylor


A diferencia de las funciones, los polinomios son mucho más manejables desde la
perspectiva del cálculo operacional y nos permiten un acercamiento más sencillo al
problema que se esté tratando. Por eso, es muy común aproximar funciones hallando
sus derivadas superiores y organizándolas por medio de polinomios. Una forma de
hacerlo es, para un x cercano a a:

f 00 (a) f 000 (a) fn


f (x) = f (a)+f 0 (a)(x−a)+ (x−a)2 + (x−a)3 +· · · (x−a)n +E(x, a, n)
2! 3! n!
(5.12)

que es llamado desarrollo de la función con una Expansión de Taylor. El término


E(x, a, n) determina el error de la aproximación a la función f (x). Cuando lı́m E(x, a, n) =
n→∞
0 se dice que el desarrollo del polinomio alrededor de a converge a f(x) (Monsalve,
2005).
2
Ejemplo 5.15. Veamos la función f (x) = 5x 3 − 32 y su aproximación de grado tres
por polinomio de Taylor alrededor del punto x = 12.

Paso 1: Crear la función a derivar en un M-le:


function f=ej13(x)
f=5*x.^(2/3)-32;
Nombre del Capítulo 157

Paso 2: En otro chero determinar el punto donde se aproxima y los


datos pertinentes de la función:
xa=[-2:0.1:18];
x=12*ones(size(xa));
X(1,:)=ej13(xa);

Paso 3: Construir las derivadas de la función mediante un proceso


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

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


for k=1:4
POL(k,:)=(((X(k,:).*(xa-x).^(k-1)))/factorial(k-1));
end
poltaylor=sum(POL,1)

El resultado es una aproximación de Taylor de grado tres, evidente en la Figura 5.10


junto a la gráca de la función. La diferencia entre ambas grácas está determinada
por un término de error que es inversamente proporcional a aumentos en el orden de la
aproximación, es decir, si incrementaramos arbitrariamente el número de derivaciones
obtendríamos una aproximación más precisa a la función en el punto 12 y su vecindad.
De esta forma, la aproximación es útil para acercarse a la función solamente en un
punto previamente establecido y su vecindad porque, al alejarse de ese punto, los
errores crecen y la aproximación pierde sentido.

5.2.6. Aplicación: El Equilibrio en el Modelo de Cournot


Consideremos un mercado compuesto por dos rmas que producen un bien homogé-
neo y que enfrentan una función 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 función de
q2
costos cuadrática de la forma 2i . Supongamos que las rmas son racionales y desean
maximizar benecio. ¾Cuál es el equilibrio de esta economía?
158 GEDEM - Versión Preliminar

30
f(x)
Aproximacion
20 Punto x

10

−10

f(x)−20

−30

−40

−50

−60

−70
−2 0 2 4 6 8 10 12 14 16 18
x

2
Figura 5.10: La función f (x) = 5x 3 − 32 y su aproximación de grado tres

Primero debemos establecer cuál 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 también 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 cálculo, el valor de la variable que hace que la primera


derivada sea cero es un punto crítico de la función (léase máximo, mínimo o simple-
mente un cambio en la forma de la función). Si derivamos parcialmente la función
de benecio de la rma (o sea, la derivada es parcial porque la rma 1 controla la
producción de sus fábricas pero no la cantidad de la rma 2) y lo igualamos a cero,
obtenemos un punto crítico de la función. No obstante, para saber si este resultado
es un máximo o un mínimo debemos recurrir a la segunda derivada: si es positiva,
estamos hablando de un mínimo, si es negativa, un máximo. Veamos entonces cuál
es la función de benecio común para esta economía:

qi2
π = (100 − Q)qi − (5.14)
2
Como el problema es maximizar la ecuación (5.14), establezcamos la primera y la
segunda derivada de la función para la rma 1:

Paso 1: Escribir un M-le cournot.m


Nombre del Capítulo 159

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

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


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

Paso 3: Invocar el comando gradient para las derivadas


[PX,PY]=gradient(Z,1,1);
[PXX,PYX]=gradient(PX,1,1)
[PXY,PYY]=gradient(PY,1,1);

Como nuestro interés es la derivada parcial de la ecuación (5.14) respecto a la variable


bajo el control de la rma 1 (q1 ), debemos observar cuáles son los signos de los
elementos de PXX para saber si estamos encontrando un máximo o un mínimo. La
conclusión es la esperada: cada componente de PXX es negativo, es decir, el punto
crítico que hallemos para el problema es un máximo. De otro lado, el resultado de
ambas derivadas cruzadas es el mismo y es negativo, por tanto, el bien producido
por una de las rmas es sustituto de la otra, resultado que habíamos supuesto desde
el principio al armar que ambas hacían el mismo producto (en otras palabras, ante
cualquier eventualidad con el producto de la rma 1, el consumidor puede desplazar
su preferencia hacia el producto de la rma 2, dado que son la mismo tipo de bien).

Al igualar PX a cero determinamos cuál es la respuesta óptima de la rma 1 ante


cambios en la producción de la 2, entonces la primera derivada de una función igua-
lada a cero es la Función de Mejor Respuesta de la rma, que ja cuánto es óptimo
producir ante cualquier estrategia de su competidora. Cada una de las funciones de
mejor respuesta de este problema están descritas en la Figura 5.11, gráca que se
obtiene de hacer la curva de nivel de la primera derivada en (0,0) con contour
(QU,QD,PX,[0 0]).

El equilibrio de este modelo está caracterizado por el punto de corte entre ambas
funciones de mejor respuesta: esa es la cantidad a producir de cada una de las rmas,
evidente en la Figura 5.11 con el punto negro. Como el problema es simétrico (ambas
rmas maximizan la misma función de benecio), una buena posibilidad de encontrar
el equilibrio computacionalmente es suponer de antemano que la cantidad producida
160 GEDEM - Versión Preliminar

100

90 Funcion de mejor respuesta Firma 1

80

70

60

q
2 50

40

30
q*
2
Funcion de mejor respuesta Firma 2
20

10

0
0 10 20 30 40 50 60 70 80 90 100
q*1 q
1

Figura 5.11: El duopolio de Cournot

de ambas rmas es la misma, por ende, se establece dónde están los puntos de la
curva de nivel de PXX en (0,0), para después determinar cuáles de los componentes
de los vectores posición en la matriz de datos iniciales son iguales. Esta forma es la
que se desarrolla en el siguiente script para localizar el equilibrio:

[i,j]=find(PX==0);

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

Así, el equilibrio qi∗ es l=q1∗ = 26 y m=q2∗ = 26, o sea, cada una de las rmas produce
una cantidad igual a 26 unidades. Este resultado es exactamente el mismo que aquel
que se logra si, en vez de analizar todo el problema a partir de la rma 1, trabajáramos
con la rma 2. La diferencia radica en la variable de control de la rma en cuestión,
que sería entonces q2 y, de esa forma, al tomar el gradiente para la primera derivada,
aquella matriz que habría que examinar sería la segunda.
Nombre del Capítulo 161

5.3. Ejercicios
1. Una empresa tiene unos costos en función de la cantidad de la forma c(q) =
5q + 15. Encuentre numéricamente los costos marginales de la rma. ¾Cuánto
es su costo jo? ¾Son estos costos marginales constantes? Si así lo son, ¾Qué
tipo de rendimientos presenta esta empresa?

2. Encuentre numéricamente la derivada de f (x) = 0.025x3.71 −4x mediante diff


y graque el resultado en MATLABr .
1 2
3. Una empresa tiene la siguiente función de producción: q = K 3 L 3

a) Graque este función en MATLABr .


b) Derive la función respecto al capital y al trabajo con gradient.
c) Encuentre todas las segundas derivadas.
d) ¾Qué tipo de rendimientos presenta? ¾Qué relación tienen los coecientes
de la función con los rendimientos?

4. Tres rmas producen un bien homogéneo. 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 MATLABr las funciones de mejor respuesta de


cada rma.
b) Halle por métodos numéricos el equilibrio de Cournot de esta economía.
c) ¾Que sucede si las rmas 1 y 2 se unen? Graque nuevamente y encuentre
el equilibrio.

5. En la Figura 5.10 la aproximación da ciertos saltos alrededor de cero. ¾Podría


explicar por qué la función tiene este comportamiento? ¾Qué sucede en la
aproximación cuando está alrededor de cero?

6. Es muy común 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 aversión al riesgo,
se recurre a una medida conocida como Coeciente de Aversión al Riesgo de
Arrow-Pratt, que se dene como:
cu00 (c)
σ=−
u0 (c)
162 GEDEM - Versión Preliminar

En otras palabras, el coeciente de aversión al riesgo depende de las primeras


dos derivadas de la utilidad. La siguiente función de utilidad es muy utilizada en
medición de la aversión al riesgo y se llama la función de Aversión Constante
Relativa al Riesgo CRRA por sus siglas en inglés (Constant Relative Risk
Aversion): 
 c1−θ Si θ > 0, θ 6= 1
u(c) = 1−θ
ln c Si θ = 1
Si θ = 0.6, determine las dos primeras derivadas numéricas de la función
CRRA, encuentre el coeciente de aversión al riesgo de Arrow-Pratt y gra-
que en MATLABr . ¾Qué puede establecer a partir de las grácas?

7. Haga una programación que realice una aproximación de grado seis para la
1
función f (x) = x2 − 4x 3 en el punto x = −9.

8. En la función determinada en el Ejemplo 5.13 evalúe con fdhess los puntos


(75,-100) y (-75,100). ¾Qué puede decir respecto a las tasas de crecimiento de
la función? Comparando los resultados con la Figura 5.8, ¾Qué puede concluir
de la forma de la función? ¾Es cóncava? ¾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


1
IS = (−c0 dT + I 0 dr + dG) − dy (5.15)
1 − c0
µ µ ¶ ¶
1 M dM dW
LM = − − mr dr − dy (5.16)
my − FFLL M
2 P
P M W
L

representan el equilibrio de los mercados de bienes, monetario y de trabajo


en una economía y se llaman IS-LM. IS es la ecuación (5.15) y representa el
equilibrio en el mercado de bienes (producto de la economía igual a demanda de
cada sector) y LM, la ecuación (5.16), es el equilibrio en el mercado monetario
(oferta de dinero igual a demanda de dinero), además, y representa al producto
y dy son sus cambios. Así, T son los impuestos, G el gasto público, r la tasa
de interés, 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
función de producción (F (K, L)) respecto al trabajo. Las variables exógenas,
es decir, aquellas cuyo valor se establece por fuera del modelo son dT, dG, dM y
dW y las variables endógenas (cuyo valor se determina al cambiar una variable
Nombre del Capítulo 163

exógena) son dy y dr. Suponiendo que las variables exógenas no cambian (dT =
dM = dW = 0) y que c0 = 0.4, I 0 = −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. Apéndice
Otra forma de derivar en MATLABr es con el toolbox Symbolic que crea un
objeto simbólico, es decir, una estructura de datos que almacena una representación
característica del símbolo. El comando syms permite construir variables y expresio-
nes simbólicas, de forma que, analíticamente, se puedan hacer diferentes operaciones
matemáticas con ellas. En el caso de las derivadas, la rutina que permite obtenerlas
es diff. Veamos entonces cómo se puede derivar con objetos simbólicos.

Ejemplo 5.16. Derivemos la función f (x, y) = x3 mediante una expresión simbólica

Paso 1: Denir la expresión simbólica


syms x

Paso 2: Introducir la función a derivar


f=x^3

Paso 3: Invocar el comando di


diff(f)

El resultado de este proceso es la derivada de f respecto a x, 3*x^2. Cuando que-


remos hallar la segunda derivada de la función, se invoca al mismo comando, pero
especicando el grado de la derivación: diff(f,2). En este caso, el 2 muestra de
qué orden es la derivada que MATLABr está calculando. Para encontrar la derivada
de una constante también debe denirse la constante como una expresión simbólica:

Ejemplo 5.17. Derivemos c = 7 mediante una expresión simbólica.

Paso 1: Denir la expresión simbólica:


c=sym(’7’)
164 GEDEM - Versión Preliminar

Paso 2: Invocar el comando di:


diff(c)

El resultado de este proceso es ans=0. Si se hubiese ejecutado directamente diff(7)


la respuesta sería [], porque 7 no es una expresión simbólica. Veamos la forma en la
que se trabaja el comando cuando buscamos hallar derivadas parciales de expresiones
con más de una variables:

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


mediante expresiones simbólicas

Paso 1: Denir las expresiones simbólicas


syms x y z

Paso 2: Introducir la función que queremos derivar


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

Paso 3: Invocar el comando di


diff(f,y)

MATLABr mostrará entonces 5*x^3*y^4+z que es, simplemente, la derivada par-


cial de f respecto a y . diff también permite encontrar la derivada de matrices
constituidas por elementos simbólicos de la siguiente manera:

Ejemplo 5.19. Hallemos la derivada de la matriz


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

Paso 1: Denir las expresiones simbólicas


syms m x

Paso 2: Introducir la matriz que queremos derivar


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

Paso 3: Invocar el comando di


diff(A)
Nombre del Capítulo 165

El resultado de invocar diff es la derivada de la matriz A respecto a x, determinado


en la ecuación (5.17), tras haber simplicado el resultado. Aquí, el comando ejecu-
tó una derivación elemento a elemento tomando como input la matriz A. Además
cuando, como en este caso, no se especica respecto a cuál variable el usuario quiere
derivar, automáticamente MATLABr lo hará con x y, si x no existe en la función,
el default del programa es derivar con la variable más cercana a x entre las presentes
en la función.
 
2 m
5 35 −m sen(x)
 x  (5.17)
− sen(m) 3

De otro lado, también es posible hacer Expansiones de Taylor analíticamente con


el comando taylor. La sintaxis de esta rutina es, en primera instancia, denir la
expresión simbólica, para luego invocar el código con la función a aproximar, el orden
y el punto alrededor del que se hace la aproximación. Veamos el siguiente ejemplo
para observar el uso de taylor:
3
Ejemplo 5.20. Aproximemos la función f (x) = x 5 − 7x alrededor de 6 mediante
una Expansión de Taylor de tercer orden.

Paso 1: Denir la expresión simbólica


syms x

Paso 2: Invocar el comando, llamar la función y determinar el orden


y el punto de aproximación:
F1=taylor((x^(3/5)-7*x),3,6)
3 ¡ ¢ 3
1
La respuesta es F1, es decir, 6 5 − 42 + 1/10 63/5 − 7 (x − 6) − 300 6 5 (x − 6)2 , que
es la Expansión de Taylor de tercer orden alrededor de 6 para f (x).
166 GEDEM - Versión Preliminar
Capítulo 6

Integración
Lida Quintero, Diego Corredor

Introducción

En matemáticas observamos cómo a cada operación le corresponde una inversa. Así,


la suma tiene la resta, la multiplicación la división, y la derivación, la integración. En
el capitulo anterior vimos la derivación y ahora nos corresponde exponer su inversa,
la cual tiene dos interpretaciones:

La integración como un proceso para determinar la función cuando se conoce su


derivada, lo que equivale formalmente a:

Z
f 0 (x)dx = f (x)

Y por otro lado, como herramienta para determinar áreas de regiones cuyos límites
no son rectas.

En economía la integración es útil para, determinar el impacto de un proyecto sobre


el bienestar a partir de los excedentes del consumidor y productor; hallar una función
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 dinámica de sistemas económicos, entre
otras aplicaciones.

167
168 GEDEM - Versión Preliminar

Directos

Algebraico Sustitución

Indenida Métodos Partes


(Antiderivada) de solución
polyint

Computacional1
Syms int

Integración Directos

Algebraicos
(evaluados) Sustitución

Partes
Denida Métodos
(Área bajo la curva) de solución
Regla del Trapecio trapz

Numéricos Regla de Simpson quad


(computacional)

quad8

Cuadratura Gaussiana
quadl

Para hallar integrales existen varios métodos: los analíticos o algebráicos como son
los de sustitución y por partes, y los numéricos como regla del Trapecio y regla de
Simpson. Sabemos que los métodos útiles computacionalmente son los numéricos,
por tanto, en este capítulo estudiaremos los principales métodos numéricos de inte-
gración que MATLABr utiliza y que desde luego nos sirven sólo para la integración
denida. En cuanto a la indenida, veremos en la primera sección la integración por
regla del exponente y otro método en el apéndice de este capítulo. En la segunda
sección introducimos ya un método numérico: la Regla de Trapecio; en la tercera
abordaremos la regla de Simpson; y por último, el cálculo de integrales dobles.

6.1. Integración por Regla del Exponente


Es uno de los procedimientos directos de integración indenida algebraica más sim-
ples, y es aplicable únicamente a expresiones cuyo exponente es constante2 :

Z
xn+1
xn dx = +C
n+1
1
Apéndice de este capítulo
2
Excepto cuando n = −1.
INTEGRACIÓN 169

Con el comando polyint, MATLABr descompone el polinomio a integrar en varios


monomios y aplica a cada uno esta regla. Sin embargo este procedimiento presenta
la restricción 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 integración3 . 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
R
a calcular: (x4 − 8x2 + 3x)dx

Paso 1. Introducimos los coecientes del polinomio como vector


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

Paso 2. Utilizamos el comando polyint


in=polyint(p) % Sintaxis

Y obtenemos
in = 0.2 0 -2.6667 1.5 0 0

Basados en este resultado, sabemos que:


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

Ejemplo 6.2. Vamos a calcular los costos variables de una empresa cuyos costos
marginales están dados por la siguiente función:

q3
CM g(q) = + 2q + 5
3
R 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, MATLABr asume k=0.
170 GEDEM - Versión Preliminar

Paso 1. p=[1/3 0 2 5]; % Costo Marginal


Paso 2. CV=polyint(p) % Sintaxis con k=0

Obtenemos:
CV = 0.0833 0 1 5 0

Hemos hallado la función de costos variables CV (q) = 0.0833q 4 + q 2 + 5q por medio


de una antiderivada, es decir, integrando la función de costo marginal correspondien-
te.

6.2. Regla del Trapecio


La Regla del Trapecio es considerada como un método de aproximación lineal porque
utiliza líneas rectas para aproximarse a una función dada f (x), lo que permite calcular
Rb 4
a f (x)dx, de la forma como se muestra en la Figura 6.1.

Regla del Trapecio

y0=f(x0)

yn

yn−1

−− ∆ x −−

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 imágenes consecutivas, formando un trapecio. De esta manera, el
4
Esta notación no es la misma que utilizamos en los capítulos anteriores, en los que x0 , x1 , . . . , xn
eran variables. Aquí los utilizamos para representar valores numéricos de la variable x, siguiendo a
Draper (1979).
INTEGRACIÓN 171

área del primer trapecio está dada por:

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

Z " n−1
#
b
1 X
f (x)dx ' ∆x (y0 + yn ) + yi
a 2
i=1

que es conocida como la regla del trapecio para la integración aproximada.

MATLABr aplica este método por medio del comando trapz. Para utilizarlo es
necesario denir un vector x que determina el intervalo de integración [a, b] y la
distancia entre los nodos (∆x) 5 . Además es necesario denir la función a integrar
f (x)6 y las imágenes y de la función. Así, la sintaxis completa sería:

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); % Función 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 función resulta
muy útil para calcular probabilidades en estadística hallando el área bajo la curva
de la función de densidad acumulada.

Ejemplo 6.3. Vamos a calcular


Z 7
x4 (49 − x2 )1/2 dx
2

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


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

Paso 2. Denimos el vector imagen que corresponde a la función que vamos a inte-
grar
y=(x.^4).*(49-x.^2).^(1/2);
5
MATLABr tiene predeterminado ∆x = 1 (h=1).
6
con inline o en un M-file
172 GEDEM - Versión Preliminar

Paso 3. Utilizamos el comando trapz para hallar el área bajo la función y:


in=trapz(y)*h

Utilizando h=0.1, el área bajo la curva de x4 (49 − x2 )1/2 es igual a 11447.90.


Entre más pequeño sea el valor de ∆x (h), mayor será el número de nodos y por lo
tanto el resultado será más exacto. Es así como con un h=0.01 el área es igual a
11504.92 y con h=0.000001 el área es igual a 11506.69.

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


producto donde p∗ = 4 y cuya función inversa de demanda está implícitamente dada
por:
p(q 2 + 4q + 3) = 192

Ejemplo 7.4
11

10

9 Excedente del Consumidor

6
p

4 (q*,p*)

0 1 2 3 4 5 6 7 8 9 10 11
q

Figura 6.2: Excedente del Consumidor

Dado que p∗ = 4 y q ∗ = 5 debemos hallar:


Z 5
192
dq − (4 ∗ 5)
0 q2 + 4q + 3

Paso 1. Creamos el vector q en el intervalo de integración


q=[0:5];

Paso 2. Denimos el vector imagen (función inversa de demanda)


p=(192)./(q.^2+4.*q+3);
INTEGRACIÓN 173

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


el intervalo y restando el área por debajo del precio de equilibrio, como lo
podemos ver en la Figura 6.2.
xco=[trapz(p)]-20 % 20=5×4

Utilizando h=1, el excedente del consumidor es igual a 64.2857, con h=0.01 el


excedente es igual a 57,85 y con h=0.000001 el área es igual a 57.8493.

Otra forma de calcular integrales en MATLABr haciendo uso de la Regla del Tra-
pecio es por medio del comando qnwtrap que hace parte del Compecon Toolbox.
Este comando calcula un vector x que contiene los elementos (x0 , x1 , . . . , xn−1 , xn )
asociados a los nodos (ver Figura 6.1) y su vector de pesos o ponderaciones7 w.

Para calcular la integral de la función f (x) en [a, b], obtenemos las imágenes de cada
uno de los nodos y las multiplicamos por un vector de ponderaciones.

La sintaxis del comando es:

[x,w]=qnwtrap(n,a,b)

Donde n es el número de nodos a,b representa el límite de los intervalos, x es el


vector de abscisas y w es un vector de ponderaciones.
Ejemplo 6.5. Para observar las diferencias entre trapz y qnwtrap, solucionaremos
la integral del Ejemplo 6.3 con 51 nodos.

Paso 1. Sintaxis del comando.


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

Paso 2. Vector imagen:


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

Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderacio-


nes 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 número de
nodos en qnwtrap es equivalente a un h cada vez mas pequeño en el comando
trapz.
7
En la Regla del Trapecio, la ponderación o peso del área del primer y último sub-intervalo
((x0 , x1 ) y (xn−1 , xn )) es ∆x
2
y es ∆x para los demás.
174 GEDEM - Versión Preliminar

6.3. Regla de Simpson


La Regla de Simpson, conocida también como cuadrática o parabólica, hace por lo
general una mejor aproximación que la regla del trapecio8 , porque logra una aproxi-
mación a la función dada por medio de arcos parabólicos de eje vertical9 , que pasan
por tres imágenes equidistantes (separadas entre sí por h).

Regla de Simpson

y1
y2
y0

yn
yn−2
yn−1

y
a=x0 x1 x2 . . . xn−2 xn−1 xn=b

Figura 6.3: Regla de Simpson

El área de la primera parábola sería:

∆x
(y0 + 4y1 + y2 )
3
La suma de todas las áreas del intervalo [a, b], constituye la integral denida de la
función es decir:
Z b · ¸
∆x
f (x)dx ' y0 + 4y1 + 2y2 + . . . + 2yn−2 + 4yn−1 + yn
a 3
que es la regla de Simpson para la integración aproximada10 .
8
Sin embargo, la regla del trapecio resulta más precisa en casos en los que el integrando pre-
senta discontinuidad en la primera derivada, lo cual puede ocurrir en aplicaciones económicas con
soluciones de esquina.
9
Ver Monsalve (2005a)
10
Esta notación sigue a Draper (1979). Para una revisión más profunda ver Leithold (1979).
INTEGRACIÓN 175

Este método de integración es calculado por MATLABr a través del comando quad.
Su input son los límites [a, b] y la función a integrar f (x), ya sea como objeto inline,
expresión o chero como lo vimos en el capítulo 4; de aquí en adelante utilizaremos
la primera:
y=inline(’f(x)’)
in=quad(’y’,a,b)

Ejemplo 6.6. Determinar el área bajo la curva, de √ 1


1+x2
es decir, calcular:
Z 1
dx

0 1 + x2
Paso 1. Debemos crear la función inline:
y=inline(’1./(1+x.^2).^(1/2)’);

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


in=quad(y,0,1)

El área bajo la curva formada desde cero hasta uno de la función es: in = 0.8814.

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

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


Z 7.8875
q2
dq
0 (q + 1)

Paso 1. Debemos crear la función, en este caso lo haremos como expresión, directa-
mente 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 MATLABr 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 análogos.
176 GEDEM - Versión Preliminar

Ejemplo 7.4

12

10

p 6

Excedente del Productor

0 2 4 6 8 10 12
q

Figura 6.4: Excedente del Productor

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

Paso 1. Utilizamos la sintaxis del comando:


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

Paso 2. Creamos el vector imagen:


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

Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderacio-


nes w por el vector y:
in=w’*y

Obtenemos:
in= 0.8814

6.4. Integrales Dobles


Son las inversas de la diferenciación parcial, por tanto se utilizan cuando tenemos
funciones de dos variables (en tres dimensiones). Así, lo que se evalúa en este caso es
el volumen localizado bajo la supercie de la función (si ésta es positiva), por encima
de la región del plano xy (ver Figura 6.5).
INTEGRACIÓN 177

d
c
a b

Figura 6.5: Integración 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 .

Z bZ d
f (x, y)dydx
a c

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 operación, MATLABr utiliza el comando dblquad, el cual requie-
re como inputs f (x, y) y los intervalos de integración para cada variable. De acuerdo
con la fórmula 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)

11
Ver (Monsalve 2005b).
12
La función puede ser denida como explicamos para el comando quad, es decir como expresión,
objeto inline o M-file.
178 GEDEM - Versión Preliminar

Ejemplo 6.9. Evaluar:


Z 3Z 2
(x + y)dxdy
1 0

Creamos la función 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 cúbicas ya que corresponde al volúmen existente en los inter-


valos dados.

Ejemplo 6.10. Evaluar:


Z 3 Z 7
x3 + 2xy dydx
−2 5

Creamos la función, utilizando a la vez el comando dblquad, y sus respectivos


intervalos:
ind=dblquad(’x.^3+2.*x.*y’,-2,3,5,7)

Obteniendo como respuesta:


ind = 92.5
unidades cúbicas.

Ya hemos visto en este capítulo los métodos que tiene MATLABr para integrar, y
con él concluimos la parte correspondiente a Cálculo del libro. Pero las integrales
son mucho más de lo que hasta aquí conocemos, pues ellas también son utilizadas
para evaluar funciones en diferentes contextos como en optimización, también en
los métodos de solución de ecuaciones diferenciales. De estos y otros temas, nos
ocuparemos en la siguiente parte del libro.

Ejercicios
1 Un mercado de competencia perfecta tiene una función inversa de demanda dada
por p = 10 − 2q y oferta p = 32 q + 1
13
Teniendo en cuenta que a,b son los límites del intervalo de x; c,d los de y
INTEGRACIÓN 179

a. Encuentre Precio y Cantidad de Equilibrio14


b. Encuentre Excedente del Consumidor y del Productor, utilizando:
• Fórmulas de área triangular.
• Método trapz y qnwtrap
• Método quad y qnwsimp
c. Calcule con los mismos métodos, los nuevos excedentes si se coloca un im-
puesto al producto de este mercado, que hace aumentar el precio a 6.

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


R0 2
1 x ln xdx
R0 3 √
2
2 t / 4+t
R π/2 x
π/8 xe /(1 + x2 )

3 La oferta de un mercado está dada por QO = −10 + 11 2


p−1 p y la demanda por
QD = 80 − p3

a. Determine los Excedentes del Consumidor y del Productor por los métodos
qnwtrapz y qnwsimp, para hacerlo es necesario determinar el precio y la
cantidad de equilñibrio.
b. Si un impuesto aumenta el precio a 13, calcule la pérdida irrecuperable de
eciencia.

4 El costo marginal de una empresa de Plásticos CM g como función de los metros


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

5 La propensión marginal a consumir en cierta economía cerrada, esta dada por


C(Y ) = 2005.9876+1.2(Y 1.7 ), donde Y representa el ingreso. Determine la función
de consumo de esta economía.

APENDICE
Además de los métodos numéricos para hallar integrales denidas, existen métodos
algebraicos para hallar integrales indenidas como se observa en el diagrama que se
14
Podemos utilizar rref del Capítulo 2, por tratarse de ecuaciones lineales.
180 GEDEM - Versión Preliminar

presenta en este capítulo. Debido a la naturaleza de este último tipo de problemas,


es necesario trabajar con expresiones simbólicas. Para ello, como se explicó en el
capítulo anterior, MATLABr 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:
R
x4 (49 − x2 )1/2 dx

Primero creamos las variables simbólicas 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 función 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 simbó-
licas y la función 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 métodos de integración se puede realizar el cálculo de probabilida-


des. Sin embargo, esto también se puede realizar utilizando Statistical Toolbox, para
lo que recomendamos estudiar los manuales disponibles en la Web.
Parte III

OPTIMIZACIÓN Y DINÁMICA

181
Capítulo 7

Concavidad y Convexidad
Norma Gómez, Norman Maldonado

Generalmente en economía matemática se trabajan problemas de tipo estático y de


tipo dinámico. Los problemas estáticos implican certidumbre (determinísticos), mien-
tras que los dinámicos pueden ser de certidumbre o de incertidumbre (estocásticos).
En cada problema existen funciones y algoritmos de optimización. Por ejemplo, en
un problema de tipo estático y determinístico existen funciones que pueden ser cón-
cavas, convexas, cuasicóncavas y cuasiconvexas1 , y algoritmos de optimización como
la programación lineal, el teorema de Lagrange y el teorema de Kuhn-Tucker. Otro
ejemplo es un problema de tipo dinámico y determinístico, en donde existen funcio-
nes como las ecuaciones diferenciales y en diferencias, y algoritmos de optimización
como el cálculo de variaciones y la teoría del control óptimo.

Este capítulo tiene como objetivo analizar las propiedades de las funciones utilizadas
en problemas de optimización estática. Especícamente, vamos a abordar el análi-
sis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una función a
partir de herramientas computacionales.

El capítulo 8 presentará el uso de estas herramientas para el desarrollo de algoritmos


de optimización estática,y el capítulo ?? analiza las funciones utilizadas en problemas
determinísticos dinámicos, es decir, las ecuaciones diferenciales y las ecuaciones en
diferencias. Tanto los algoritmos de optimización dinámica en problemas determinís-
ticos como las funciones y los algoritmos de optimización en problemas estocásticos

1
Existen otros tipos de funciones. Se utiliza esta clasicación por su utilidad para ubicar máximos
y mínimos.

183
184 GEDEM - Versión Preliminar

no son nuestro objeto de análisis2 .

En la primera sección se exponen las deniciones de función cóncava, convexa, cuasi-


cóncava y cuasiconvexa, sus criterios de clasicación y los métodos computacionales
para realizar esta clasicación. En la segunda se utilizan estos conceptos y criterios
para estudiar funciones univariadas. En la tercera se extiende el análisis a funciones
con dos variables y nalmente en la última sección se analizan funciones multivaria-
das.

En cada sección se explicarán las herramientas de las que dispone MATLABr para
analizar una función por diferentes métodos, y se darán algunos ejemplos. Al nal
del capítulo se plantean algunos ejercicios que servirán al estudiante para desarrollar
agilidad en el análisis de funciones a partir de métodos numéricos y en la aplicación
de este análisis para la solución de problemas de optimización estática en economía.

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

7.1.1. Deniciones
Concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una función.

Dados una función f (~x) = f (x1 , x2 , ..., xn ) denida en un conjunto convexo


S ∈ Rn , dos puntos P1 , P2 ∈ S , y un parámetro λ ∈ [0, 1], se tienen los
siguientes tipos de funciones según su forma:

Cóncava: f (λP1 + (1 − λ)P2 ) ≥ λf (P1 ) + (1 − λ)f (P2 ) (7.1a)


Convexa: f (λP1 + (1 − λ)P2 ) ≤ λf (P1 ) + (1 − λ)f (P2 ) (7.1b)
Cuasicóncava: f (λP1 + (1 − λ)P2 ) ≥ M in{f (P1 ), f (P2 )} (7.1c)
Cuasiconvexa: f (λP1 + (1 − λ)P2 ) ≤ M ax{f (P1 ), f (P2 )} (7.1d)

Además, se dice que la función es estricta si estas desigualdades son estrictas


y se satisfacen para P1 6= P2 y λ ∈ (0, 1).

Matriz Hessiana
2
Ver ?), Fackler (2003) y Judd (1998).
CONCAVIDAD Y CONVEXIDAD 185

 
fx1 x1 fx1 x2 . . . fx1 xn
 
 fx2 x1 fx2 x2 . . . fx2 xn 
Hf (~x) = 
 .. .. .. .. 
 (7.2)
 . . . . 
fxn x1 fxn x2 . . . fxn xn

Matriz Hessiana Orlada

 
0 fx1 fx2 . . . fxn
 
 fx1 fx1 x1 fx1 x2 . . . fx1 xn 
 
 fx2 fx2 x1 fx2 x2 . . . fx2 xn 
Ĥf (~x) =   (7.3)
 .. .. .. .. .. 
 . . . . . 
 
fxn fxn x1 fxn x2 . . . fxn xn

Curvas de Nivel y Conjuntos Contorno


Sea f (~x) una función denida en un conjunto convexo S de Rn . Para cada
número real α se dene una curva de nivel CNα por la relación:

f (~x) = α (7.4)

Además, para cada número real α se dene el Conjunto Contorno Superior


CSα por la relación:

CSα = {~x ∈ S : f (~x) ≥ α} (7.5)

Similarmente, para cada número real α se dene el Conjunto Contorno Inferior


CIα por la relación:

CIα = {~x ∈ S : f (~x) ≤ α} (7.6)

7.1.2. Criterios de clasicación


Sean S un conjunto convexo abierto y no vacío, f : S −→ R doblemente diferenciable.
Entonces se tiene que:

Proposición 7.1. La función f es cóncava (estrictamente cóncava) si −f es convexa


(estrictamente convexa).
186 GEDEM - Versión Preliminar

Proposición 7.2. La función f es cuasicóncava (estrictamente cuasicóncava) si −f


es cuasiconvexa (estrictamente cuasiconvexa).

Proposición 7.3. Si f es cóncava (convexa), entonces f es cuasicóncava (cuasicon-


vexa).

Proposición 7.4 (Función Cóncava). La función f es cóncava (estrictamente cón-


cava) si y solamente si la matriz hessiana Hf es semidenida negativa (denida
negativa) en todo punto x de S .

Proposición 7.5 (Función Convexa). La función f es convexa (estrictamente con-


vexa) si y solamente si la matriz hessiana Hf es semidenida positiva (denida
positiva) en todo punto x de S .

Proposición 7.6 (Función Cuasicóncava - Ĥ ). Una condición suciente para que


f (~x) sea cuasicóncava 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
Ĥ .

Proposición 7.7 (Función Cuasicóncava - Conjuntos Contorno). La función f (~x)


es cuasicóncava si el Conjunto Contorno Superior CSα = {~x ∈ S : f (~x) ≥ α} es
convexo para todo número α.

Proposición 7.8 (Función Cuasiconvexa - Ĥ ). Una condición suciente para que


f (~x) sea cuasicóncava 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 Ĥ .

Proposición 7.9 (Función Cuasiconvexa - Conjuntos Contorno). La función f (~x) es


cuasiconvexa si el Conjunto Contorno Inferior CIα = {~x ∈ S : f (~x) ≤ α} es convexo
para todo número α.

7.1.3. Métodos
En funciones continuamente diferenciables, la segunda derivada permite analizar la
concavidad y convexidad de una función, y una combinación de la primera y la
segunda derivada permite determinar la cuasiconcavidad y cuasiconvexidad de una
función. Para analizar la forma de una función en MATLABr vamos a utilizar cuatro
métodos diferentes3 :
3
Todos los métodos llegan a la misma conclusión
CONCAVIDAD Y CONVEXIDAD 187

1. Gráco. Consiste en visualizar grácamente la función y las deniciones 7.1,


y dependiendo de qué desigualdades se satisfacen, se concluye sobre la forma
de la función (cóncava, convexa, cuasicóncava o cuasiconvexa). Este método
presenta la limitación 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 aproximación numérica del valor de


la matriz hessiana de una función en un punto determinado, repetir el mismo
proceso para un conjunto nito de puntos, y a partir del análisis apropiado
de estos valores en cada punto concluir sobre la concavidad o convexidad de
una función en el conjunto nito de puntos. Este método aplica para funciones
multivariadas y su única limitación se presenta cuando se trabaja con funciones
no muy bien comportadas (por ejemplo, funciones discontinuas o con esquinas),
en las que la aproximación numérica de la Hessiana puede producir grandes
errores de aproximación.

3. Conjuntos Contorno. Consiste en gracar las curvas de nivel de la función


y a partir de éstas determinar la convexidad del conjunto contorno superior
o inferior4 , y así concluir sobre la cuasiconcavidad y cuasiconvexidad de la
función. Este método tiene una limitación similar a la del método gráco. Las
curvas de nivel de una función de una variable se visualizan en R1 , las de
una función de dos variables se visualizan en R2 y las de una función de tres
variables se visualizan en R3 . Por lo tanto, en funciones que posean más de tres
variables no se pueden visualizar las curvas de nivel, y no es posible analizar
grácamente la convexidad de los conjuntos contorno.

4. Matriz Hessiana Orlada. Esta matriz se utiliza para analizar la cuasiconcavi-


dad y cuasiconvexidad de una función multivariada. Computacionalmente, el
método es análogo al de la matriz Hessiana5 : se aproxima numéricamente 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 función)
y se concluye sobre cuasiconcavidad y cuasiconvexidad de la función en ese
conjunto.

4
Recuérdese que la convexidad de un conjunto es un concepto diferente al de convexidad de una
función.
5
Por lo que sus limitaciones son las mismas.
188 GEDEM - Versión Preliminar

7.2. Funciones Univariadas


Una función univariada f (~x) se dene como una función cuyo dominio y rango están
denidos en R1 . Una función univariada y sus derivadas pueden ser visualizadas
en R2 . Para analizar las deniciones 7.1 en una función univariada utilizaremos el
método gráco, las derivadas de la función6 y los conjuntos contorno.

1. Método gráco. Retomando conceptos del capítulo 4, analizar grácamente una


función univariada en MATLABr requiere 3 pasos:

Paso 1. Crear la función. Esto se puede hacer creando un m-file que con-
tenga la función o utilizando el comando inline.
Paso 2. Crear los datos de la variable x y de la función f (x).
Paso 3. Invocar la rutina plot para gracar.

2. Derivadas de la función. En MATLABr , podemos obtener información de la


segunda derivada de una función, de diferentes formas: calcular manualmente
fxx y gracarla, calcular el gradiente numérico de f y analizar su pendiente,
calcular sucesivamente gradientes numéricos y por último utilizar la función
fdhess o fhess de Compecon. En todos los métodos puede ser útil gracar
los resultados numéricos.

3. Conjuntos Contorno. En funciones univariadas, las curvas de nivel son puntos


ubicados en la recta real. Podemos utilizar MATLABr para ver grácamente
las curvas de nivel y los conjuntos contorno.

Ejemplo 7.1. Analizar la concavidad y convexidad de la función f (x) = Ln(x) por


el método gráco.

Paso 1. Crear la función en un M-file llamado fej1, así:

function f=fej1;
f=log(x)

Paso 2. Crear los datos de la variable x y de la función f (x):


x=[1:0.02:15];
y=fej1(x); % f(x)
6
El análisis de estas derivadas corresponde, en el caso univariado, al análisis de Matriz Hessiana
y Hessiana Orlada del caso multivariado.
CONCAVIDAD Y CONVEXIDAD 189

Paso 3. Invocar la rutina para gracar:

plot(x,y)
b=0.2
c=0.1
line([3.5,13.5],[f(3.5),f(13.5)],’color’,’r’,’LineStyle’,’-’)
text(3.5-b,f(3.5)+b,’P_ {1}’,’Fontsize’,10,’Fontweight’,’Bold’)
text(13.5+c,f(13.5)-c,’P_ {2}’,’Fontsize’,10,’Fontweight’,’Bold’)

f(x) = ln x
3

2.5 P
2

2
f(x)

1.5 P1

0.5

0
0 5 10 15
x

Figura 7.1: Método gráco

MATLABr arroja como resultado la Figura 7.1. Tomando los puntos P1 y P2 de la


gráca, se observa que se cumple la denición de función cóncava en 7.1. Se observa
también que con culaquier par de puntos esta denición se satisface. Por lo tanto
podemos decir que la función es cóncava.

Ejemplo 7.2. Analizar la concavidad y convexidad de la función f (x) = x3 − 4x2 +


8 por el método de derivadas (calculando el gradiente numérico y analizando su
pendiente).

Paso 1. Crear la funcion


f=inline(’x.^3-4*x.^2+8’)

Paso 2. Crear los datos


190 GEDEM - Versión Preliminar

h=0.01 % Amplitud de x y del gradiente


x=[-2:h:5];
y=f(x);

Paso 3. Calcular el gradiente numérico


fx=gradient(y,h)

Mediante la instrucción plot(x,y,x,fx) se pueden visualizar grácamente los


resultados, como en la Figura 7.2.

3 2
Gradiente Numérico − f(x) = x − 4x + 8
40
f
fx

30

20
f(x)

10

−10

−20
−2 −1 0 1 2 3 4 5
x

Figura 7.2: Gradiente numérico

Como se mencionó anteriormente, la segunda derivada fxx es la pendiente de la


función fx . Por esta razón, si la primera derivada de la función fx es creciente (o
decreciente) está indicando que la segunda derivada de f es positiva (o negativa) y
por lo tanto la función es convexa (o cóncava).

En la gura 7.2 se observa que la primera derivada de la función f (es decir, fx ,


representada en el gráco con fx) es decreciente (f es cóncava) hasta un punto de
inexión p ∈ [1, 2]. ¾Cómo determinar cuál es ese punto?. Notemos que el punto de
inexión es el valor mínimo de fx , y que los valores numéricos de x y de la primera
derivada de la función fueron guardados en las variables x y fx en MATLABr ,
respectivamente. Por tanto, para saber cuál es aproximadamente el punto de inexión
basta con hallar el valor de x que corresponde al más pequeño de todos los números
contenidos en el vector fx, para lo cual podemos utilizar el comando min, así:
CONCAVIDAD Y CONVEXIDAD 191

[p,i]=min(fx) % Mínimo de fx
pinf=[x(i) p] % Punto de inflexion

La primera línea encuentra el más pequeño de todos los valores de la primera derivada
de f (fx ), guarda este valor en p y la posición que éste valor ocupa dentro del vector
fx la guarda en i. La segunda línea guarda en pinf el valor mínimo de la primera
derivada (p) y su correspondiente valor en x (x(i)). Este procedimiento arroja como
resultado:

pinf = 1.3300 -5.3332

El valor 1.333 (equivalente a 86 ) es el punto x en el que la función f (x) pasa de ser


cóncava a ser convexa.

Ejemplo 7.3. Analizar la concavidad y convexidad de la función f (x) = x por el
método de derivadas (analizando la segunda derivada de la función).

Paso 1. Crear la funcion


f=inline(’sqrt(x)’)
fxx=inline(-0.25x^(-1.5)

Paso 2. Crear los datos


h=0.00001;
x=[0:h:2];
y=f(x);
y2=f2(x);

Paso 3. Gracar la función y su segunda derivada


plot(x,y)
hold on
plot(x,y2)

Para hacer el análisis de la concavidad y convexidad de esta función, calculamos


la segunda derivada y la introducimos como otra función en el programa (y2). En
la Figura 7.3 observamos que la segunda derivada es decreciente, indicando que la
función es cóncava.

Ejemplo 7.4. Analizar la concavidad y convexidad de la función f (x) = x7 por
el método de derivadas (calculando gradientes de la función sucesivamente).
192 GEDEM - Versión Preliminar

3.5 4.5 1.5 2.5


f=x − 0.25x − fxx = 8.75x − 3.15x
30

20

10

f(x)
0

−10

−20

f
fxx
−30
0.5 1 1.5 2 2.5 3 3.5 4
x

Figura 7.3: Gradiente numérico

Paso1. Crear la función f y su segunda derivada fxx


f=inline(’x.^3.5)’);

Paso2. Crear los datos


h=0.001;
x=[0.2:h:4]; y=f(x);

Paso3. Calcular el gradiente numérico


yxx=gradient(gradient(y,h),h)

Paso4. Gracar la función y su segunda derivada (calculada numéricamente)


plot(x,y)
hold on
plot(x,yxx)

A partir de los conceptos vistos en el capítulo 5, el comando gradient en el pro-


grama permite calcular numéricamente la segunda derivada de la función como el
gradiente de la primera derivada. Gracando simultáneamente esta segunda derivada
con la función, obtenemos la Figura 7.3. De esta gura sabemos la segunda derivada
fxx es positiva en el intervalo en que la función es convexa. Existe un punto de
inexión en el intervalo x = [2.5, 3.5] en donde la función pasa a ser cóncava.
CONCAVIDAD Y CONVEXIDAD 193

El cálculo de la segunda derivada numérica está almacenado en el vector yxx. El


punto de inexión es el valor de este vector más cercano a cero7 y su posición dentro
de ese vector.

ind=find(yxx>-10*h&yxx<10*h);
pinf=[x(ind);yxx(ind)];

En la primera línea, el comando find encuentra la posición 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 línea 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 método es que el cálculo de la segunda derivada es
numérico, por lo que no requiere que se introduzca explícitamente la forma funcional
de la segunda derivada.

Ejemplo 7.5. Analizar la concavidad y convexidad de la función f (x) = x


2x2 +3
por
el método de derivadas (utilizando fhess).

Paso 1. Crear la función f


f=inline(’x./(2*x.^2+3)’);

Paso 2. Crear los datos


h=0.001;
x=[-2:h:2];
y=f(x);

Paso 3. Calcular la segunda derivada por medio de fhess


for i=1:length(x)
fxx(i)=fhess(f,[1,1],x(i));
end;
7
Se selecciona el más cercano a cero porque el cálculo del vector yxx es numérico, y por lo tanto
ninguno de sus componentes es exactamente igual a cero.
8
Aunque este valor puede ser menor, notemos que el elemento más pequeño (en valor absoluto)
del vector yxx es 0.0032, por lo que si estableciéramos un criterio menor (por ejemplo 0.001),
no encontraríamos el punto de inexión.
194 GEDEM - Versión Preliminar

Paso 4. Gracar la función y su segunda derivada


plot(x,y)
hold on
plot(x,fxx)

2
Segunda Derivada Numérica − f(x) = x/(2x +3)
0.4
f
fxx
0.3

0.2

0.1
f(x)

−0.1

−0.2

−0.3

−0.4
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x

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 función es convexa hasta el punto de inexión x = 0, y a partir de allí la función
se hace cóncava y se segunda derivada negativa.

Ejemplo 7.6. Analizar la cuasiconcavidad y cuasiconvexidad de la función f (x) =


x2 por medio de sus conjuntos contorno.

Para ver grácamente la cuasiconcavidad o cuasiconvexidad de esta función, en pri-


mer lugar tenemos que trazar una curva de nivel de referencia, por ejemplo, tomemos
f = 9. Luego de ello trazamos otras dos curvas de nivel: una mayor (f = 16) y una
menor (f = 4). Por último determinamos los conjuntos contorno. El conjunto con-
torno superior es aquel conjunto hacia el cual crecen las curvas de nivel, mientras
que el conjunto contorno inferior se ubica en aquella región hacia la cual decrecen
las curvas de nivel. Grácamente, se tiene la Figura 7.5.

A partir de la curva de nivel de referencia f = 9, el conjunto contorno superior


corresponde al conjunto [−5, −3] ∪ [3, 5]9 , porque en esta dirección están las curvas
9
Siendo rigurosos, el conjunto contorno superior en este caso corresponde a [−∞, −3] ∪ [3, ∞].
CONCAVIDAD Y CONVEXIDAD 195

2
f(x) = x
25

20

y=16

15
f(x)

10
y=9

5
y=4

0
−5 −4 −3 −2 −1 0 1 2 3 4 5
x

Figura 7.5: Conjuntos Contorno de f (x) = x2

de nivel de mayor valor (f = 16). Este conjunto está señalado en la gráca 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á señalado en la gráca
con el marcador  * . De estos dos conjuntos, solo el conjunto contorno inferior es
convexo, por lo cual podemos concluir que la función es cuasiconvexa.

Ejemplo 7.7. Analizar la cuasiconcavidad y cuasiconvexidad f (x) = x3 − 4x2 + 6


por medio de sus conjuntos contorno.

De nuevo, tenemos que jar tres curvas de nivel: una de referencia (f = 1) y dos
que se ubican por encima (f = 4) y por debajo (f = −2) de la curva de nivel de
referencia. Luego de ello, señalamos grácamente los conjuntos contorno superior (o)
e inferior(*) y determinamos cuál de estos dos conjuntos es convexo.

El conjunto contorno inferior, donde se ubican las curvas de nivel de menor valor
(f = −2), está señalado con  *  y corresponde al conjunto [−1.5, −1]∪[1.38, 3.61]10 .
El conjunto contorno superior, donde se ubican las curvas de nivel de mayor valor

Hemos asumido el conjunto [−5, −3] ∪ [3, 5] para ilustrar el ejemplo de manera precisa en la gráca.
10
Ver nota 7
196 GEDEM - Versión Preliminar

3 2
f(x) = x − 4x + 6

y=4
4

2
f(x)

y=1

y=−2
−2

−4

−6

−1 0 1 2 3 4
x

Figura 7.6: Conjuntos Contorno

(f = 4), está señalado con  o  y corresponde al conjunto [−1, 1.38] ∪ [3.61, 4.2].
Ninguno de estos dos conjuntos es convexo, por lo que la función no es cuasicóncava
y tampoco es cuasiconvexa.

De aquí en adelante asumiremos como convención que el método de análisis de deri-


vadas corresponde al cálculo numérico de la segunda derivada mediante las rutinas
fhess y fdhess.

7.3. Funciones con dos variables (Bivariadas)


Una función de dos variables (o bivariada) f (x, y) se dene como una función cuyo
dominio está denido en R2 . Numéricamente, la segunda derivada de una función de
una variable es un vector que en cada posición contiene un escalar. En funciones de
dos variables, cada componente de ese vector es una matriz hessiana (ver ecuación
7.2). Esto implica que se debe extraer los menores principales y los valores propios
de cada matriz hessiana (hessiana orlada) para poder concluir sobre la concavidad o
convexidad (cuasiconcavidad o cuasiconvexidad) de la función (ver Sydsaeter (1996)
y Mora (2001)).
CONCAVIDAD Y CONVEXIDAD 197

Para determinar la concavidad y convexidad utilizaremos el método gráco y el


cálculo numérico de la matriz Hessiana, mientras que para cuasiconcavidad y cuasi-
convexidad utilizaremos el método gráco, la matriz hessiana orlada y los conjuntos
contorno.

Ejemplo 7.8. Analizar la convexidad y concavidad de f (x, y) = x2 + y 2 + (x + y)2


por el método gráco.

Sabemos que la función f (x, y) es convexa si:


A B
z }| { z }| {
f (λP1 + (1 − λ)P2 ) ≤ λf (P1 ) + (1 − λ)f (P2 ) (7.7)

y cóncava si

A B
z }| { z }| {
f (λP1 + (1 − λ)P2 ) ≥ λf (P1 ) + (1 − λ)f (P2 ) (7.8)

Estas desigualdades tienen dos partes: la parte A es la imagen de la combinación


lineal de los puntos P1 y P2 , y la parte B es la combinación lineal de las imágenes.
Para analizar la concavidad y convexidad de cualquier función por este método vi-
sualizamos las partes A y B de las ecuaciones 7.7 y 7.8 en la gráca de la función.
En nuestro ejemplo:

Paso 1. Crear la función en un M-file llamado fej1:


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

Paso 2. Crear los datos:


x=[-100:10:100];y=x;
[X,Y]=meshgrid(x,y);
F=fej8(X,Y);

Paso 3. Gracar
mesh(X,Y,F)

Como se observa en la Figura 7.7, se añadió una línea 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 línea continua está por debajo de la línea
discontinua, lo cual implica que A≤B, es decir, que la denición de función convexa
198 GEDEM - Versión Preliminar

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

4
x 10

6
P1 P2
5

f(x,y)
3

0
−100
100
−50
50
0
0
50 −50
100 −100
y
x

Figura 7.7: Método Gráco - Concavidad y Convexidad

se cumple para estos dos puntos. Además se observa que esto ocurre para cualquier
pareja de puntos del dominio de la función. Por esta razón podemos concluir que la
función es convexa estricta.

Ejemplo 7.9. Analizar la cuasiconvexidad y cuasiconcavidad de f (x, y) = x2 + y 2 +


(x + y)2 por el método gráco.

Sabemos que la función f (x, y) es cuasiconvexa si:


A B0
z }| { z }| {
f (λP1 + (1 − λ)P2 ) ≤ M ax{f (P1 ), f (P2 )} (7.9)

y cuasicóncava si

A B00
z }| { z }| {
f (λP1 + (1 − λ)P2 ) ≥ M in{f (P1 ), f (P2 )} (7.10)

Para estas desigualdades la parte A es la imagen de la combinación lineal de los


puntos P1 y P2 , la parte B0 es la imagen más pequeña y la parte B00 es la imagen
más grande. Para analizar la cuasiconvexidad y cuasiconcavidad de cualquier función
por este método visualizamos las partes A, B0 y B00 de las ecuaciones 7.9 y 7.10 en
la gráca de la función.
CONCAVIDAD Y CONVEXIDAD 199

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

4
x 10

5
P2

4
f(x,y)

3
P1
2

0
−100
100
−50
50
0
0
50 −50
100 −100
y
x

Figura 7.8: Método Gráco - Cuasiconcavidad y Cuasiconvexidad

En la gura 7.8 se observa que todos los puntos de la línea continua (parte A de la
denición 7.9) son más pequeños o iguales al punto P2 (parte B de la denición 7.9).
Como esto ocurre para cualquier par de puntos podemos concluir que la función es
cuasiconvexa.

Ejemplo 7.10. Analizar la convexidad y concavidad de la función f (x, y) = x0.5 y 0.5

Paso 1. Crear la función 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 vec-
tores x e y, y el producto cartesiano entre ellos utilizando la instrucción
meshgrid. Además, es necesario almacenar en un vector p todas las pare-
jas ordenadas de la forma (x, y) en las que se va a calcular numéricamente
la matriz hessiana. Esto se hace con la última instrucción11 .
x=[0.1:10:100.1];
y=x;
11
Para una explicación de la sintaxis X(:) para una matriz X, ver el capítulo 2
200 GEDEM - Versión Preliminar

[X,Y]=meshgrid(x,y);
p=[X(:)’;Y(:)’];

Paso 3. Calcular la matriz Hessiana y determinar si es denida, semidenida o in-


denida. Con operaciones matriciales podemos calcular los menores princi-
pales dominantes y arbitrarios de la matriz hessiana, y con el comando det
podemos hallar el determinante de estas submatrices. También podemos ha-
llar los valores propios de la matriz Hessiana con el comando eig. A partir
de estos cálculos podemos establecer si la matriz hessiana, calculada en un
punto, es denida positiva o negativa, o semidenida positiva o negativa.
Repitiendo el proceso en m puntos y teniendo en cuenta las proposiciones
7.4 y 7.5 podemos concluir sobre concavidad o convexidad.
for m=1:length(p);
H=fdhess(’fej9’,p(:,m));
vp(1:2,m)=eig(H);
end

Una vez calculamos la matriz hessiana de la función en un punto, podemos


repetir el proceso para un conjunto nito de puntos y luego utilizar alguno
de los criterios denidos anteriormente con el n de determinar si la función
es cóncava (estricta) o convexa (estricta). Por ejemplo, con operaciones ma-
triciales podemos calcular los menores principales dominantes y arbitrarios de
la matriz hessiana, y con el comando det podemos hallar el determinante de
estas submatrices. También podemos hallar los valores propios de la matriz
Hessiana con el comando eig. A partir de estos cálculos podemos establecer
si la matriz hessiana, calculada en un punto, es denida positiva o negativa, o
semidenida positiva o negativa. Repitiendo el proceso en m puntos y teniendo
en cuenta las proposiciones podemos concluir sobre concavidad o convexidad.
Siguiendo nuestro ejemplo, comencemos por calcular en MATLABr la matriz
hessiana de f (x, y) = x2 + y 2 + (x + y)2 . Sabemos que su matriz Hessiana es:
" #
4 2
Hf (x, y) =
2 4

La matriz Hessiana es constante para todo punto (x, y). Para calcularla en
MATLABr debemos:

1. Denir la función en un M-file llamado fej72.


CONCAVIDAD Y CONVEXIDAD 201

function f=fej72(v);
y=v(2);
x=v(1);
f=x.^2+y.^2+(x+y).^2;

Nótese que la función recibe como input un vector v (y no dos variables


separadas x,y ), el cual contiene, en su primera posición, el valor de la
variable x y en la segunda posición el valor de la variable y .
2. Denir el punto en el cual va a calcular la Hessiana. Aunque en nuestro
ejemplo sabemos que la Hessiana es constante, es necesario determinar un
punto. La razón de ello es que la matriz hessiana es calculada por medio
de métodos numéricos. Utilicemos el punto v = (x, y) = (4, 5).

v=[4;5];

3. Invocar la rutina fdhess:

H=fdhess(’fej72’,v)

o, en el caso de fhess:

H=fhess(’fej72’,[1,1],v)

La salida de MATLABr es:


H = 4 2
2 4

Aunque los procedimientos numéricos y los resultados son los mismos, para
nuestro propósito es más práctico 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 ade-


cuadamente extraer la información que ésta nos ofrece. Para ello, podemos
utilizar las proposiciones que citamos al comienzo de esta sección. Más especí-
camente, podemos calcular los menores principales dominantes o arbitrarios
y calcular su determinante con la instrucción det, o hallar los valores propios
de la matriz hessiana por medio de la instrucción eig. Aunque es fácil calcular
en MATLABr los menores principales dominantes de una matriz de cualquier
tamaño, es difícil calcular los menores principales arbitrarios. Por simplicidad,
en este caso utilizaremos el criterio de valores propios. Los valores propios de
202 GEDEM - Versión 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 función f (x, y) es estrictamente convexa.

Conjuntos Contorno. En el capítulo 4 estudiamos la instrucción contour y


contour3, que son útiles para visualizar las curvas de nivel y los conjuntos
contorno de una función de dos variables f (x, y). Recordemos que la instrucción
contour sirve para visualizar las curvas de nivel de nuestra función f (x, y) en
en plano x, y (R2 ), mientras que la función contour3 sirve para visualizar las
curvas de nivel en el plano x, y, f (R3 ). También recordemos de este capítulo
la instrucción subplot, que muestra diferentes grácos simultáneamente.

Una vez creada la función y los datos (pasos para grácar) podemos analizar
la cuasiconcavidad y cuasiconvexidad de nuestra función 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 función 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, además
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 grácas que los conjuntos contorno inferiores de la función
f (x, y) son convexos, por lo cual podemos armar que la función es cuasiconve-
xa. Era de esperarse, puesto que ya habíamos visto que la función es convexa,
y además sabemos por la proposición ?? que toda función convexa es cuasi-
convexa.

Matriz Hessiana Orlada. Un último criterio para determinar la cuasiconcavidad


y cuasiconvexidad de la función es la matriz Hessiana Orlada (Ĥf (x, y)) deni-
da en (??). Para nuestro ejemplo, podemos empezar por hallar analíticamente
la matriz Hessiana Orlada de f (x, y) y calcularla en el punto (x, y)=(3,4):

 
0 2x + 2(x + y) 2y + 2(x + y)
 
Ĥf (x, y) =  2x + 2(x + y) 4 2 
2y + 2(x + y) 2 4
 
0 80 100
 
Ĥf (3, 4) =  80 4 2 
100 2 4

Ahora vamos a calcular esta matriz en MATLABr . Para ello, utilizamos la


función fej72 combinamos los comandos fdjac y fdhess, así:

p=[3,4]; % Punto de evaluación


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 MATLABr es:

Ho = 0 80 100
80 4 2
100 2 4

Sabemos, por la proposición ??, que si el determinante de todos los Dk de esta


matriz es menor que cero, la función es cuasiconvexa. Calculemos los Dk de
esta matriz:
204 GEDEM - Versión Preliminar

for k=1:1:length(Ho)-1;
D=Ho(1:k+1,1:k+1); %MPD de orden k
dt(i)=det(D); % Determinante de MPD
end
dt

La primera línea indica a MATLABr que los cálculos de las siguientes líneas de-
ben repetirse para cada valor de k. En esa misma línea se establece que k toma-
rá los valores de 1 ,2, siendo 2 el resultante de la instrucción length(Ho)-1.
El comando de la segunda línea extrae el Menor principal Dominante de orden
k de la Matriz Hessiana Orlada. Por ejemplo, cuando k = 1, D es el menor
principal de orden 2 y está dado por D=Ho(1:2,1:2). La tercera línea calcu-
la el determinante del menor principal dominante que se calculó en la segunda
línea, y guarda este valor en la posición i del vector dt. La última línea la uti-
lizamos para ver los componentes del vector dt. La salida de MATLABr (con
format bank) es:

dt = -6400.00 -33600.00

No es de nuestro interés la magnitud de estos números, sino más bien su signo.


Para ello es útil el comando format +. Al utilizar este comando, la salida
muestra los símbolos +,- o espacio en blanco para indicar elementos que son
positivos, negativos o cero, respectivamente. Deniendo este formato, la salida
de MATLABr es:

dt = -

indicando que tanto el primer componente del vector como el segundo son
negativos. Esto nos permite concluir que la función f (x, y) es cuasiconvexa en
el punto (x, y) = (3, 4)
A diferencia de la matriz hessiana de nuestra función f (x, y), la matriz Hessia-
na Orlada cambia según el punto en donde la calculemos. Necesitamos entonces
generalizar el método anterior para calcular la Matriz hessiana orlada en dife-
rentes 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 Ĥ . Para ilustrar la
forma en que se generaliza, vamos a evaluar la matriz Ĥ 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 MATLABr :

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 Ĥ , donde m es el número de


puntos en donde vamos a evaluar la matriz Ĥ , es decir, el número 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 tamaño 2x12, donde 2 corresponde al número de


menores principales dominantes que se evalúan en la matriz Ĥ y 12 corresponde
al número de puntos en los que se evaluó la matriz Ĥ . 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 Ĥ son menores que cero y
por lo tanto la función en el conjunto S es cuasiconvexa12 .

A lo largo de toda la sección hemos analizado la concavidad, convexidad, cua-


12
Aunque en el ejemplo se tomaron muy pocos valores para x y y , es fácil hacer los mismos
cálculos para un conjunto S más extenso. Aún así, los componentes del vector dt son negativos.
206 GEDEM - Versión Preliminar

siconcavidad y cuasiconvexidad de la función f (x, y) = x2 + y 2 + (x + y)2


por diferentes métodos. Sin embargo, esta función es evidentemente convexa,
y aunque ha sido útil para propósitos de explicación, 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 análisis de concavidad, convexidad, cua-


siconcavidad y cuasiconvexidad para una función un poco más complicada.
A diferencia del ejemplo anterior, no explicaremos en detalle cada instruc-
ción13 , ya que nuestro propósito con este ejemplo es mostrar la utilidad de
MATLABr para analizar rápidamente la forma de la función, y no enseñar los
pasos que se deben seguir en cada método de análisis, como si lo era en el
ejemplo anterior.

7.3.1. Ejemplo 7.3. f (x, y) = x0.5 y 0.5


• Método Gráco
En la gura ?? se observa que esta función es cóncava (y por lo tanto
cuasicóncava) a lo largo de su dominio.
• Matriz Hessiana. Deniendo previamente la función en un M-file lla-
mado fej73, y a partir del conjunto nito de puntos S = {(x, y)\x ∈
(0, 100] ∧ y ∈ (0, 100]}, se tiene:

x=[0.1:10:100.1]; % Valores para x


y=[0.1:10:100.1]; % Valores para y
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:)’;Y(:)’]; % Vector con puntos (x,y)

for m=1:length(p); % Repetir en todos los puntos


H=fdhess(’fej73’,p(:,m)); % Matriz Hessiana
vp(1:2,m)=eig(H); % Valores propios
end

tam=size(vp);
tol=0.000016
for i=1:tam(1)*tam(2); % Valores propios
if abs(vp(i))>tol; % V. propios cercanos a cero
13
Aunque las instrucciones son básicamente las mismas.
CONCAVIDAD Y CONVEXIDAD 207

vp(i)=vp(i);
else
vp(i)=round(vp1(i)); % Redondear
end
end

Hemos asumido valores para x y y estrictamente positivos. Además, debi-


do a que el cálculo de la matriz Hessiana es numérico, los valores que ésta
matriz contiene se aproximan con gran precisión a los valores reales, aun-
que no son exactamente iguales, por lo que en algunos puntos hay valores
propios de la matriz hessiana que son positivos, aunque muy cercanos a
cero. Para depurar el vector vp de estos valores, es necesario el segundo
procedimiento, en el cual, por medio del comando round, aquellos valores
sucientemente cercanos a cero (tol) se aproximan a cero.

Se observa que todos los componentes del vector vp son no positivos (me-
nores o iguales que cero), por lo cual podemos concluir que la función es
cóncava, y por lo tanto también es cuasicóncava. Esto último lo podemos
vericar con la matriz Hessiana Orlada.
• Matriz Hessiana Orlada
x=[0.1:10:100.1]; % Valores para x
y=[0.1:10:100.1]; % Valores para x
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:)’;Y(:)’]; % Vector con puntos

for m=1:length(p); % Repetir m veces


J=fdjac(’fej73’,p(:,m)); % Gradiente
H=fdhess(’fej73’,p(:,m)); % Hessiana
Ho=[0 J;J’ H]; % Hessiana Orlada

for k=1:1:length(Ho)-1; % Repetir k veces


D=Ho(1:k+1,1:k+1); % MPD
dt(k,m)=det(D); % Determinante de MPD
end
end

El vector dt es de tamaño 2x121. En la posición (i, j ) se este vector se


ha calculado el determinante del menor principal dominate de orden i
de la matriz Hessiana Orlada calculada en el punto j . Al observar los
208 GEDEM - Versión Preliminar

componentes de este vector utilizando las instrucciones:

format +
dt

se observa que todos los componentes de la primera la de este vector son
negativos, mientras que los componentes de la segunda la son positivos,
indicando que los Menores Principales Dominantes de orden 1 (D1 ) eva-
luados a lo largo del conjunto S son negativos, mientras que los de orden
2 son positivos. A partir de los criterios de evaluación y de la informa-
ción que nos proporciona este vector podemos concluir que la función es
cuasicóncava.
• Conjuntos Contorno
Se observa que el conjunto contorno superior es convexo, por lo cual po-
demos concluir también por este criterio, que la función es cuasicóncava.

7.4. Funciones con tres o más variables (Multivaria-


das)

Nuestro propósito en esta sección es ilustrar con dos ejemplos la manera en que
se extienden los métodos de análisis de concavidad y convexidad para funciones
de tres o más variables. Cuando tenemos funciones con tres variables, ya no
se puede utilizar el método gráco, puesto que ya no es posible visualizar la
función. Sin embargo, sus curvas de nivel se visualizan en R3 , y por lo tanto es
válido en estas funciones utilizar el método de conjuntos contorno, además de
los métodos de matriz Hessiana y Hessiana Orlada. En funciones de cuatro o
más variables no es posible utilizar el método gráco y el método de Conjuntos
contorno, por lo cual solo disponemos de los métodos de matriz Hessiana y
matriz Hessiana Orlada.

7.4.1. Ejemplo 7.4. f (x, y, z) = x4 + 3y 4 + 5z


• Matriz Hessiana Al igual que en los caso anteriores, primero debemos
crear la función en un M-file llamado fej74:

function f = fej74(v);
z=v(3);
CONCAVIDAD Y CONVEXIDAD 209

y=v(2);
x=v(1);
f=x.^4+3*y.^4+5*z;

Luego de esto, debemos crear un conjunto nito de puntos S en los que


queremos evaluar la matriz H . Para este ejemplo, podemos asumir un
conjunto S = {(x, y, z)\x ∈ [−10, 10] ∧ y ∈ [−10, 10] ∧ z ∈ [−10, 10]}, que
va a estar contenido en el vector p:

x=[-10:1:10]; % Valores para x


y=x;z=x; % Valores para y,z
[X,Y,Z]=meshgrid(x,y,z); % Valores para f(x,y)
p=[X(:)’;Y(:)’;Z(:)]; % Vector con puntos

Por último, invocamos la rutina fdhess para calcular la matriz hessiana


en cada punto del vector p, calculamos sus valores propios (con su corres-
pondiente depuración) y a partir de la información contenida en el vector
vp podemos concluir sobre la concavidad y convexidad de la función.

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 función es convexa.
• Matriz Hessiana Orlada. Se siguen los mismos pasos que trabajamos en
el ejemplo anterior. La única modicación es que, al igual que hicimos
con el vector de valores propios de la matriz hessiana, necesitamos de-
210 GEDEM - Versión Preliminar

purar el vector que contiene los determinantes de los menores principales


dominantes de la matriz hessiana orlada.
x=[-10:1:10]; % Valores para x
y=x;z=x; % Valores para y,z
[X,Y,Z]=meshgrid(x,y,z); % Valores para f(x,y)
p=[X(:)’;Y(:)’;Z(:)]; % Vector con puntos (x,y,z)

for m=1:length(p);
J=fdjac(’fej74’,p(:,m));
H=fdhess(’fej74’,p(:,m));
Ho=[0 J;J’ H];

for k=1:1:length(Ho)-1;
D=Ho(1:k+1,1:k+1);
dt(k,m)=det(D);
end
end

tam=size(dt);
tol=0.00016;

for i=1:tam(1)*tam(2); % Depuración


if abs(dt(i))>tol;
dt(i)=dt(i);
else
dt(i)=round(dt(i));
end
end

Se observa que todos los componentes del vector dt (una vez depurados)
son no positivos, lo cual implica que a partir de la información de la matriz
Hessiana Orlada, podemos concluir que la función es cuasiconvexa.
• Conjuntos Contorno. Recordemos que las curvas de nivel para f (x, y, z) =
x4 + 3y 4 + 5z resultan de igualar la función a una constante α. De esta
manera, tenemos que las curvas de nivel están dadas por:
α−x4 −3y 4
α = x4 + 3y 4 + 5z =⇒ z= 5
Así, a pesar de no poder visualizar la función f (x, y, z), sí podemos visua-
lizar sus curvas de nivel en el plano (x, y, z). Para visualizar estas curvas
CONCAVIDAD Y CONVEXIDAD 211

de nivel en MATLABr , utilizamos los mismos pasos que se requieren para


gracar una función en R3 , es decir, especicar la función, 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 número de cur-
vas de nivel que deseamos visualizar. Para este ejemplo vamos a visualizar
cuatro curvas de nivel de la función dadas por α = (−10000, 0, 10000).

1. Crear la función en un M-file llamado fcnej74:

function z=fcnej74(x,y,alpha)
z=(alpha-x.^4-3*y.^4)*(1/5);

2. Crear los datos:

x=[-10:0.1:10];y=x; % Datos para x,y


[X,Y]=meshgrid(x,y);
alpha=[-10000 0 10000]; % Curvas de nivel

3. Invocar el comando para gracar:

for i=1:length(alpha)
Z=fcnej74(X,Y,alpha(i));
mesh(X,Y,Z)
hold on
end

A partir de estas instrucciones, tenemos:


Se observa en esta gráca que el conjunto contorno inferior es convexo, y por
lo tanto podemos concluir que la función es cuasiconvexa.

Por último, mostraremos un ejemplo de una función con más de tres variables.
En este caso, tampoco podemos utilizar el método de conjuntos contorno, ya
que no se pueden visualizar las curvas de nivel de la función. Por lo tanto, los
únicos métodos computacionales disponibles para este caso son los de matriz
hessiana y matriz hessiana orlada.

7.4.2. Ejemplo 7.5. f (w, x, y, z)


• Matriz Hessiana
212 GEDEM - Versión Preliminar

• Matriz Hessiana Orlada


Capítulo 8

Optimización
Lida Quintero, Norman Maldonado

La racionalidad de los agentes es un supuesto frecuentemente utilizado la teoría


económica. 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 capítulo trabajaremos a partir de herramientas computacionales, el problema


de hallar los máximos o mínimos de una función (optimización estática); dependiendo
de si ella representa utilidad, benecios o costos; delimitando el conjunto de solucio-
nes de acuerdo a restricciones si las hay.

Según (?), una caracterización típica de problemas de optimización es encontrar va-


lores extremos de una función f (x, y) restringida a un subconjunto bien especicado
de R2+ :
Maximizar f (x, y) sujeta a g(x, y) ≥ 0
x≥0
y≥0
donde f , g : R2++ −→ R son funciones diferenciables. Aquí a f (·, ·) se le conoce
como función objetivo, y a g(·, ·) como función restricción o conjunto factible. En el
problema general hablamos de maximizar, dado que minimizar equivale a maximizar
el negativo de la función.

También podemos establecer una secuencia general para resolver un problema de


optimización computacionalmente. Primero, debemos hacer un análisis cualitativo

213
214 GEDEM - Versión Preliminar

del problema, es decir, identicar el tipo de función objetivo al que nos enfrentamos,
el tipo de restricciones, y su comportamiento si es posible de manera gráca para
tener idea de la región donde se puede encontrar la solución.

Teniendo claras las condiciones iniciales del problema, podemos crear las funciones
computacionalmente(función objetivo, restricciones, gradientes, etc)1 . Por último,
aplicamos la rutina computacional pertinente según el problema. Adicionalmente,
debemos ser muy cuidados con la interpretación de los resultados.

Al optimizar se pueden presentar varios casos según el tipo de funciones que estemos
trabajando: cuando la función objetivo no es lineal, y no hay restricciones, caso que
veremos en la primera sección; en la segunda presentamos optimización de funcio-
nes del mismo tipo pero con restricciones; y por último tendremos el caso en que
las funciones son lineales. El análisis de concavidad, convexidad, cuasiconcavidad y
cuasiconvexidad de funciones que vimos en el capítulo anterior, nos hará mucho más
fácil la comprensión de estos problemas.

8.1. Optimización no lineal sin restricciones


De nuestro problema general de optimización, en esta sección veremos el caso parti-
cular en el que f (x, y) tiene forma no lineal. Además, no tenemos g(x, y), o función
restricción, por lo que debemos buscar la solución en todo el dominio de la función
objetivo.

Existen varios métodos numéricos para solucionar este caso particular de optimiza-
ción como tales, tales y tales; que veremos en esta sección junto con las rutinas de
MATLABr que hacen uso de ellos.

8.1.1. Minimizar
Con esta rutina hallamos la imagen más pequeña de nuestra función objetivo, por lo
que la utilizamos para solucionar problemas de minimización.

Ejemplo 8.1.
mı́n f (x) = x3 − 4x2 + 6
1
En general es mejor trabajar con funciones denidas en un m-le, ya que se pueden modicar
r
fácilmente y permiten hacer uso de otras funciones disponibles en MATLAB . En problemas
sencillos es práctico trabajar con funciones inline.
OPTIMIZACIÓN 215

Paso 1. Análisis Cualitativo del problema. Podemos ver en la Figura 8.1 el compor-
tamiento de la función 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 capítulo anterior que la función es cóncava para el intervalo


(−∞, 1.3333) y convexa en el intervalo (1.3333, ∞). En la gráca observa-
mos que, en un punto cercano a x = 0, esta función tiene un máximo, y en
un punto cercano a x = 3, un mínimo2 .

Paso 2. Crear funciones. Podemos introducir la función como un m-le o por medio
del comando inline:

f=inline(’x.^3-4*x.^2+6’)

Paso 3. Invocar rutina de solución. Debemos crear las imágenes de f (x) en una
vecindad sucientemente grande alrededor de x = 3, y luego, teniendo estos
valores, escoger el más pequeño de todos ellos3 .

h=0.01; x=[2:h:4]; % Puntos cercanos a x=3


y=f(x); % Crear imágenes
[ym,ind]=min(y); % Imágen más pequeña
xm=x(ind); % Argumento que minimiza

En la primera línea creamos los puntos cercanos a x = 3 (x ∈ [2, 4]), que,


según lo que analizamos en el paso 1, es un punto cercano al mínimo que
buscamos. En la segunda línea están las imágenes de ese conjunto de puntos.
En la tercera, se halla la imágen más pequeña junto con su posición dentro
del vector y. Finalmente en la cuarta línea 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 precisión para x, solo se requiere reducir el valor del parámetro h.
Para el caso de funciones univariadas, éste es el método más sencillo en el
que se hallan mínimos computacionalmente.
2
Nótese en la gura 8.1 que en estos puntos la primera derivada de la función se hace cero.
3
Recordemos que establecimos el conjunto S = {x ∈ [−3, 6]}, sólo con el propósito de visualizar
el comportamiento de la función. En realidad, nuestro conjunto de salida o dominio de f (x) son
todos los reales, por lo que no estamos buscando puntos óptimos que estén en la frontera, sino
puntos óptimos interiores en los que se cumpla la condición ∇f = 0.
216 GEDEM - Versión Preliminar
Capítulo 9

Sistemas Dinámicos
Diego Corredor, Mario González

En los capítulos anteriores nos hemos ocupado de los procedimientos utilizados para
analizar y optimizar diferentes tipos de funciones. Todos estos métodos se enmarcan
dentro de un contexto estático en el que no es posible observar los comportamientos
de las variables a través del tiempo. En este capítulo nos concentramos en los mé-
todos numéricos, 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 capítulo explicamos los métodos numéricos, y computacio-


nales, utilizados en la solución de ecuaciones diferenciales ordinarias, presentando
algunos ejemplos y aplicaciones económicas. En la segunda parte desarrollamos el
mismo esquema para las ecuaciones en diferencias.

9.1. Ecuaciones Diferenciales y Dinámica Continua


Ecuaciones DiferencialesDinámica Continua
FALTA UNA INTRODUCCIÓN AL USO DE LAS ECUACIONES DIFERENCIA-
LES EN ECONOMÍA
ecuaciones diferenciales ordinarias
las ecuaciones no son simplemente con respecto al tiempo.

9.1.1. Métodos Numéricos


Desde el punto de vista algebraico, solucionar un sistema de ecuaciones diferenciales
implica encontrar la fórmula de la o las funciones que satisfagan el sistema. Cuando
ninguna condición inicial es denida la solución consiste en hallar una fórmula general

217
218 GEDEM - Versión Preliminar

de las funciones. Pero si las condiciones iniciales del problema son determinadas, es
posible obtener las funciones especícas que solucionan el conjunto de ecuaciones.
Por ejemplo, al solucionar algebraicamente la ecuación ẋ = 3x, obtenemos que el
conjunto de funciones que cumplen esta ecuación viene dado por la fórmula general:
x(t) = Ae3t ; donde A puede ser cualquier número real. Pero si agregamos la condición
inicial x(0) = 4, la única función que satisface la ecuación diferencial y la condición
inicial es x(t) = 4e3t . Es necesario anotar que las condiciones no necesariamente
tienen que ser iniciales, también pueden imponerse condiciones en otros momentos del
tiempo, o condiciones de fronteraCondición de Frontera. En el ejemplo, si imponemos
la condición de frontera x(2) = 5, la función particular que satisface la condición y
el sistema de dinámico es: x(t) = 0.0123e3t .

Por otro lado, por la naturaleza de los métodos, la solución numérica de sistemas
dinámicos implica que algún tipo de condición deba ser impuesta. Es decir que,
al contrario del método algebraico, no es posible obtener ningún tipo de ecuación
general de las funciones solución. Aún más, al utilizar métodos numéricos nunca
encontramos tales funciones, sino que realizamos una aproximación numérica a ellas.

Dependiendo del tipo de condición impuesta (inicial o de frontera) el procedimiento


de solución numérica cambia. Si tomamos una condición inicial, resolver un sistema
dinámico consiste en aproximar las funciones solución a partir del momento del
tiempo en el que es impuesta tal condición. En otras palabras, la aproximación
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 inglés), y formalmente
consisten en aproximar x(t), en un intervalo de tiempo determinado, de modo que:

¡ ¢
ẋ(t) = f t, x(t)
(9.1)
x(t0 ) = x0

El procedimiento de solución de un IVP consiste, por lo general, en tomar la condición


inicial y evaluarla en la ecuación diferencial. De esta forma se tiene un punto y la
derivada de la función en el punto. Con estos dos elementos, y haciendo uso del
polinomio de Taylor, es posible aproximar el valor de la función en el siguiente período
de tiempo. Este procedimiento se repite una y otra vez hasta alcanzar el límite
superior del intervalo de tiempo considerado. Los métodos numéricos utilizados para
la solución de problemas de valor inicial son explicados en detalle más adelante.
SISTEMAS DINÁMICOS 219

Una generalización 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 Fronte-
ra. En este tipo de problemas imponemos, como su nombre lo indica, condiciones de
frontera al sistema dinámico. La solución de estos sistemas resulta más complicada
porque es posible imponer varias condiciones a la vez, y porque la aproximación a
las funciones se realiza antes y después de cada condición. Los métodos numéricos
utilizados para resolver este tipo de problemas son avanzados, por lo que no serán
tratados en este libro.1

A continuación presentamos algunos métodos numéricos utilizados para solucionar


problemas de valor inicial. Es necesario aclarar que existe una gran cantidad de
métodos por lo que no pretendemos abarcar todos los algoritmos existentes. Nos
limitamos a los métodos más sencillos que sirven de base para los demás.

Método de Euler Método de Euler: Conocido también como método de la


tangente, aproxima la curva solución de la ecuación diferencial a través de un
polinomio de Taylor de grado 1. Para entender el algoritmo, supongamos que la
función x(t) satisface el sistema de ecuaciones (9.1) y, tras hacer la expansión
del polinomio de Taylor de grado 1 alrededor de t + h, obtenemos:

x(t + h) ≈ x(t) + hẋ(t) (9.2)

Con base en el sistema (9.1), en la ecuación (9.2) y asumiendo h = 1, es posible


aproximar x1 :

x1 = x0 + f (0, x0 )

Ya con x1 , es posible encontrar una aproximación 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 itera-


ción la solución exacta es el valor aproximado más un error cuadrático:2
1
Para una explicación clara y sencilla de estos métodos ver Fackler (2003, cap. 6).
2
Como la aproximación es de primer grado, el error resulta ser una función cuadrática del tamaño
del paso; si la aproximación es de segundo grado, el error asociado a ésta es una función cúbica, y
así sucesivamente.
220 GEDEM - Versión Preliminar

¡ ¢
x∗ (t + h) = x(t + h) + O h2

Una forma de disminuir la inexactitud de los resultados es tomar tamaños de


paso más pequeños, por ejemplo h = 0.1. Sin embargo, al reducir el tamaño del
paso de la iteración se aumenta el número de operaciones aritméticas, lo que
disminuye la velocidad del algoritmo. Existe un tipo de algoritmos, conocidos
como algoritmos adaptativos, que durante el proceso iterativo observan el com-
portamiento de los errores en cada etapa con el n de reducir o incrementar el
tamaño del paso, según sea necesario.

El programa, o script, que se presenta a continuación muestra la programación


del método de Euler3 . El usuario debe denir con anterioridad el número de
iteraciones n, la condición inicial x0, el tamaño del paso h y el tiempo inicial
t0. También debe ser especicada, en otro chero, la ecuación 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 solución numéricamente.
En estos casos, es recomendable recurrir a otro tipo de métodos más estables.
Uno de los procedimientos alternativos más simples, es el método modicado
de EulerMétodo Modicado de Euler. Al igual que en el método de Euler,
aproximamos la solución con un polinomio de Taylor de grado 1. Sin embargo,
no lo evaluamos alrededor de t + h sino de t, obteniendo:4
3
El lector avanzado en métodos numéricos puede constatar que existen programaciones más
ecientes que las presentadas en esta parte del capítulo. Los programas aquí presentados tienen un
objetivo expositivo y, por tanto, no fueron programados teniendo en cuenta el número de operaciones
aritméticas, o cualquier otra medida de eciencia de un método numérico.
4
El método de Euler modicado se basa en el hecho de que para una función cualquiera g(x), si
la función es relativamente bien comportada y h es lo sucientemente pequeño, la derivada de la
SISTEMAS DINÁMICOS 221

x(t) ≈ x(t − h) + hẋ(t) (9.4)

A partir de la ecuación anterior, llegamos a la siguiente regla de iteración:

¡
xi = xi−1 + hf ti , xi )

Finalmente, la regla de iteración para xi+1 es:

¡
xi+1 = xi + hf ti+1 , xi+1 ) (9.5)

Esta regla de iteración es denominada fórmula implícita de Euler, ya que no es


posible despejar xi+1 en términos de ti y de xi . Dados un t0 y un x0 , el valor
de la variable en la siguiente iteración es el valor que solucione la siguiente
ecuación:

¡
x1 − x0 − hf t1 , x1 ) = 0 (9.6)

Como se puede observar, en cada iteración es necesario solucionar una ecuación


similar a la (9.6). Independientemente del tipo de ecuación (lineal o no lineal),
su solución incrementa el número de cálculos y, por lo tanto, disminuye la
velocidad de solución. En algunos casos, un método más efectivo es el Método
de Runge - Kutta, que presentamos a continuación.

Método de Runge - KuttaMétodo de Runge - Kutta: Este método en-


cuentra una solución aproximada de la ecuación diferencial partiendo de un
polinomio de Taylor determinado. Cuando el polinomio de Taylor utilizado
es de grado 2, se habla de un método de Runge - Kutta de segundo orden
(RK2)RK2|seeMétodo de Runge - Kutta; si por ejemplo, un algoritmo RK
proviene de un polinomio de Taylor de grado 4, es denominado método de
Runge - Kutta de 4 orden, o simplemente RK4RK4|seeMétodo de Runge -
Kutta5 . Este último es uno de los procedimientos más utilizados para resolver
problemas de valor inicial, por su fácil programación, estabilidad y velocidad
de solución.
función en un punto es aproximadamente igual a la derivada de la función en un punto adyacente:
g 0 (x) ≈ g 0 (x + h) o g 0 (x − h) ≈ g 0 (x).
5
De la misma forma, el método de Euler es también conocido como método de Runge Kutta de
primer orden, ya que se obtiene a partir de un polinomio de Taylor de grado 1.
222 GEDEM - Versión Preliminar

La idea básica del método consiste en expresar las derivadas de orden superior
del polinomio de Taylor, en términos de la primer derivada. Para hallar la
aproximación de Runge - Kutta de, por ejemplo, segundo orden, partimos de
la aproximación de Taylor de grado dos:

¡ ¢ h2 ¡ ¢
x(t + h) = x(t) + hf t, x(t) + f 0 t, x(t) +O(h3 ) (9.7)
2

Una vez obtenida esta aproximación, se busca formular la segunda derivada en


¡ ¢
términos de la primera, f t, x(t) . Reorganizando los términos de la ecuación
(9.7), tenemos:

h ¡ ¢ hh ¡ ¢ ¡ ¢i
x(t + h) ≈ x(t) + f t, x(t) + f t, x(t) +hf 0 t, x(t)
2 2

A partir de una aproximación de Taylor de primer orden para una función de


dos variables, es posible mostrar que:6

h ¡ ¢ h ³ ¡ ¢´
x(t + h) ≈ x(t) + f t, x(t) + f t + h, x(t) + f t, x(t)
2 2

De esta forma, la ecuación que determina el proceso iterativo en el método de


Runge - Kutta de segundo orden es:

1
xi+1 = xi + (F1 + F2 )
2

donde,

(
F1 = hf (ti , xi )
F2 = hf (ti + h, xi + F1 )

El siguiente script muestra una programación del método de Runge - Kutta de


segundo orden. El número de iteraciones, el tamaño del paso, la condición y el
tiempo iniciales deben ser especicados con anterioridad, al igual que debe ser
denida la ecuación diferencial en otro chero:
6
Si se desea revisar una deducción estricta ver Kincaid (1994, págs 514 - 516).
SISTEMAS DINÁMICOS 223

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

Para hallar la aproximación de Runge - Kutta de cuarto orden, partimos del


polinomio de Taylor de grado 4 y seguimos un procedimiento análogo. Así, la
regla de iteración es:

1
xi+1 = xi + (F1 + 2F2 + 2F3 + F4 )
6
donde,



 F1 = hf (ti , xi )


 F = hf (t + 1 h, x + 1 F )
2 i 2 i 2 1
 1 1

 F3 = hf (t i + 2 h, x i + 2 F2 )

 F = hf (t + h, x + F )
4 i i 3

Dado que la aproximación es realizada a partir de un polinomio de Taylor


de grado 4, el método de Runge - Kutta de orden 4 tiene un error asociado
¡ ¢
O h5 . Aunque es posible obtener métodos RK de orden superior, con el n
de disminuir la magnitud del error, su uso resulta más costoso, en términos de
procesamiento, con respecto al algoritmo RK4.

Regla del Trapecio:Regla del TrapecioRegla del Trapezoide|seeRegla del Tra-


pecio Recordemos que en la sección 6.2 nos referimos a la Regla del Trapecio
como un método de aproximación lineal de una integral. El procedimiento con-
sistía en dividir el intervalo de integración 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 fórmula que utilizamos para calcular el área de cada trapecio
era:7
7
Ver la gura 6.1.
224 GEDEM - Versión Preliminar

∆x ¡ ¢
y0 + y1 (9.8)
2
La idea básica de la Regla del Trapecio, en la solución de IVPs, consiste en
£ ¤
integrar la ecuación diferencial (9.1) en el intervalo t, t+h y luego aproximarla
utilizando la ecuación (9.8).
Al integrar la ecuación diferencial (9.1) en el intervalo especicado obtenemos
la siguiente expresión:

Z t+h Z t+h ¡ ¢
ẋ(t)dt = f t, x(t) dt (9.9)
t t

Z t+h ¡ ¢
x(t + h) − x(t) = f t, x(t) dt
t

Reorganizando términos, llegamos a una regla de iteración de la forma:

Z ti+1 ¡ ¢
xi+1 = xi + f t, x(t) dt (9.10)
ti

Por la ecuación (9.8), la integral puede ser aproximada de la siguiente manera:

Z ti+1 ¡ ¢ h£ ¤
f t, x(t) dt = f (ti , xi ) + f (ti+1 , xi+1 )
ti 2

De esta forma, obtenemos la siguiente regla de iteración, conocida como la


Regla del Trapecio:

h£ ¤
xi+1 = xi + f (ti , xi ) + f (ti+1 , xi+1 )
2
El método del Trapecio, al igual que el método de Euler modicado, es un
proceso implícito de solución que resulta ser estable, aunque de baja velocidad
y alto costo computacional.

Una característica esencial de los métodos ya presentados es que son métodos de un


solo paso, es decir, calculan xi+1 tomando como base a xi . Sin embargo, existe otro
tipo de algoritmos, denominados métodos multipaso, que en cada iteración hacen
uso de los valores xi−1 , xi−2 , ..., x0 .
SISTEMAS DINÁMICOS 225

La diferencia entre cada uno de los métodos multipaso radica en el numero de valores
utilizados y en la forma como se realiza la aproximación de la integral. Uno de los
métodos multipaso más conocido es el Método de Adams - Bashforth - Moulton, que
presentamos a continuación:

Método de Adams - Bashforth - Moulton:Método de Adams - Bashforth


- Moulton Este método, además de ser un algoritmo multipaso, hace parte de
los métodos denominados predictor - corrector. Esta clase de algoritmos realiza
una primer iteración para calcular una predicción de xi+1 (predictor), y luego
la utiliza para iterar de nuevo, con el n de obtener un valor corregido del
cálculo inicial de xi+1 (corrector).
El algoritmo de Adams - Bashforth - Moulton consiste de dos procedimientos
muy parecidos: el Método Adams - Bashforth y el Método Adams - Moulton.
El primero se encarga de calcular el predictor, mientras que el segundo genera
el corrector. Veamos cada uno de estos métodos por aparte:

Método Adams - Bashforth:Método de Adams - Bashforth El algoritmo


consiste en aproximar la integral del sistema (9.10), encontrando los coecientes
desconocidos (a, b, c, ...) de la siguiente ecuación:

Z ti+1 h i
¡ ¢
f t, x(t) dt = h af (ti , xi ) + bf (ti−1 , xi−1 ) + cf (ti−2 , xi−2 ) + ... (9.11)
ti

Dependiendo del número de valores anteriores utilizados, el orden de las fór-


mulas de Adams - Bashforth cambia. Por ejemplo, si utilizamos los valores xi
y xi−1 , hablamos de una fórmula Adams - Bashforth de orden 2, en la cual
debemos encontrar los coecientes (a, b). A continuación presentamos el pro-
cedimiento para obtener sus valores.

Para facilitar la exposición, y sin pérdida de generalidad, supongamos que


ti = 0 y h = 1. Por lo que nuestro problema consiste en resolver:

Z 0+1 ¡ ¢
f t, x(t) dt ≈ af (0, xi ) + bf (0 − 1, xi−1 ) (9.12)
0

Debemos determinar los coecientes a y b, exigiendo que la ecuación (9.12)


sea exacta cuando los integrandos son polinomios de segundo o menor grado.8
Tomamos como base los siguientes polinomios:
8
Aquí utilizamos el procedimiento propuesto por Kincaid (1994, pág 824)
226 GEDEM - Versión Preliminar

p0 (t) = 1
p1 (t) = t

De esta forma, los coecientes deben cumplir el siguiente sistema de ecuaciones:

Z 1
p0 (t)dt = ap0 (0) + bp0 (−1)
0
Z 1
p1 (t)dt = ap1 (0) + bp1 (−1)
0

El primer sumando de las dos ecuaciones anteriores corresponde al término


af (ti , xi ) de la ecuación (9.11), y el segundo sumando corresponde al término
bf (ti−1 , xi−1 ) de la misma ecuación. Al solucionar las integrales denidas ob-
tenemos dos ecuaciones en términos de nuestras dos incógnitas a y b. Para la
fórmula de segundo orden, los coecientes son: a = −3/2 y b = 1/2, los cuales
solucionan el siguiente sistema de ecuaciones.

1 = (1)a + (1)b
1
= (0)a + (−1)b
2

Ahora consideremos una fórmula Adams - Bashforth de orden 4. Debemos


exigir que la aproximación sea exacta cuando el integrando sea un polinomio
de cuarto o menor grado. Tomamos como base los siguientes polinomios:

p0 (t) = 1
p1 (t) = t
p2 (t) = t(t + 1)
p3 (t) = t(t + 1)(t + 2)

De manera que las ecuaciones que deben satisfacer los cuatro coecientes son:
SISTEMAS DINÁMICOS 227

1=a+b+c+d
1
= −b − 2c − 3d
2
5
= 2c + 6d
6
9
= −6d
4

La solución del sistema es: a = 55/24, b = −59/24 c = 37/24 y d = −9/24.


Así, la regla de iteración de la ecuación (9.10) es:

hh i
xi+1 = xi + 55f (ti , xi ) − 59f (ti−1 , xi−1 ) + 37f (ti−2 , xi−2 ) − 9f (ti−3 , xi−3 )
24
(9.13)

Es importante mencionar que el método de Adams - Bashforth requiere, de-


pendiendo del orden, cierto número 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 programación del método Adams - Bashforth


de cuarto orden, en el que el algoritmo de inicio utilizado es el método de Euler.
El usuario debe denir previamente: el número de iteraciones n, la condición
inicial x0, el tamaño del paso h, el tiempo inicial t0 y el nal tf. En otro chero
es necesario especicar la ecuación diferencial con la sintaxis dxdt=f(t,x).
228 GEDEM - Versión 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 condición inicial, y utilizando el método de Euler, el programa


realiza tres iteraciones para calcular los primeros valores de x. Una vez ob-
tenidos x1 , x2 y x3 , la regla de iteración (9.13) es utilizada para generar los
siguientes valores hasta alcanzar el número predenido de iteraciones n. En
total el algoritmo realiza n iteraciones, tres con el algoritmo de Euler y el resto
con la fórmula de Adams - Bashforth.

Método Adams - Moulton:Método de Adams - Moulton Este método re-


sulta muy parecido a la fórmula Adams - Bashforth; sin embargo, incorpora
un elemento adicional, dado que la regla de iteración que se obtiene es un
algoritmo implícito.

Ahora, buscamos los coecientes adecuados para aproximar la integral de la


siguiente forma:

Z ti+1 h i
¡ ¢
f t, x(t) dt = h af (ti+1 , xi+1 ) + bf (ti , xi ) + cf (ti−1 , xi−1 ) + ...
ti

El procedimiento para hallar los valores de (a, b, c, ...) es el similar al utilizado


para calcular los coecientes de la fórmula de Adams - Bashforth. Así, es posible
obtener la fórmula de Adams - Moulton de orden 5 para aproximar la integral
con la siguiente regla de iteración:
SISTEMAS DINÁMICOS 229

h h i
xi+1 = xi + 251fi+1 + 646fi − 264fi−1 + 106fi−2 − 19fi−3 (9.14)
720

donde fi = f (ti , xi ). Como podemos observar, el primer sumando dentro del


paréntesis está en términos de xi+1 , es decir que el valor de la variable debe
ser calculado de forma implícita. Debemos encontrar el xi+1 que cumpla la
siguiente ecuación:

h h i
xi+1 − xi − 251fi+1 + 646fi − 264fi−1 + 106fi−2 − 19fi−3 = 0 (9.15)
720

donde ti , ..., ti−3 y xi , ..., xi−3 son valores conocidos. Cuando el sistema diná-
mico es de tercer o mayor orden, la ecuación (9.15) resulta ser no lineal, y su
solución, en cada iteración, requiere el uso de algoritmos especiales.9 Como re-
sultado de esto, el algoritmo implícito resulta más estable, pero también, más
lento y más costoso en términos de procesamiento.

Otra forma de calcular el valor de xi+1 consiste en introducir, en la ecuación


(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 fórmula de Adams - Bashforth es el predictor, mientras que el corrector
es resultado de la fórmula Adams - Moulton.

El chero presentado en la siguiente página, muestra una programación del mé-


todo Adams - Moulton de quinto orden junto con la fórmula Adams - Bashforth
de cuarto; como algoritmo de inicio se utiliza el RK4. El usuario debe denir
previamente: el número de iteraciones n, el tamaño del paso h, la condición
inicial x0, el tiempo inicial t0 y el nal nal tf. También es necesario denir
la ecuación diferencial con la sintaxis dxdt=f(t,x).

9
Para una breve introducción sobre los métodos numéricos utilizados para resolver ecuaciones
no lineales ver Fackler (2003, cap. 3)
230 GEDEM - Versión 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 método RK4.


Con estos valores, y con x0 , el programa obtiene el predictor de x4 utilizando la
fórmula de Adams - Bashforth. Una vez obtenido el predictor (xp), el corrector
es generado por medio del algoritmo de Adams - Moulton.

Los anteriores son los métodos numéricos básicos utilizados para la solución de pro-
blemas de valor inicial. Es importante conocer la técnica aplicada por cada uno de
los algoritmos ya que, dependiendo de las propiedades particulares del sistema diná-
mico, algunas veces resulta mejor utilizar uno u otro método. Un ejemplo claro de
SISTEMAS DINÁMICOS 231

esto son los sistemas dinámicos rígidos.Ecuaciones Diferenciales Rígidas

Para nalizar esta primera parte sobre métodos numéricos, a continuación hacemos
mención a los sistemas dinámicos rígidos y la forma como se solucionan compu-
tacionalmente. Aunque en economía los sistemas de ecuaciones diferenciales rara vez
resultan ser de este tipo, es necesario tener en cuenta este criterio a la hora de en-
frentarse a un sistema dinámico, con el n de escoger el algoritmo más eciente en
términos de estabilidad y velocidad de solución.

Sistemas Dinámicos Rígidos


Ecuaciones Diferenciales Rígidas
Un sistema de ecuaciones diferenciales se dice rígido cuando uno o varios valores
propios de su matriz jacobiana asociada son demasiado grandes en magnitud.10 Esto
implica que la solución numérica es muy sensible a pequeños cambios en el tamaño del
paso, lo que puede generar errores importantes en el proceso de integración numérica
y, por tanto, en la aproximación a la solución de la ecuación diferencial.

Un ejemplo sencillo de una ecuación rígida es la siguiente ecuación diferencial:

ẋ = −10x (9.16)

La solución analítica es de la forma x(t) = Ae−10t , indicando que, a medida que pasa
el tiempo, el valor de x(t) → 0. Utilizando la fórmula de Euler (ecuación 9.3), la
regla de iteración que obtenemos, para este caso particular, es:

xi+1 = xi + h(−10xi )
xi+1 = (1 − 10h)xi

Es claro que si en el proceso de integración numérica utilizamos un tamaño de paso


h > 2/10, el proceso iterativo no converge (|x(t)| → ∞), lo cual no concuerda con la
intuición de la solución analítica. En la gura (9.1) se observa la solución analítica y
la solución numérica de la ecuación anterior con x0 = 10 y h = 0.21.
Mientras la solución analítica converge monotónicamente a cero, la solución numérica
presenta un comportamiento oscilante explosivo. Si reducimos el tamaño del paso de
10
No existe una regla para denir cuándo un valor propio es demasiado grande o no. Esto depende
del sistema dinámico con que estemos trabajando. En el ejemplo, el valor propio λ = −10 resulta
demasiado grande en magnitud, pero en otros casos tal vez no.
232 GEDEM - Versión Preliminar

Solucion Numerica vs. Solucion Algebraica


40

30

20

10

x(t) 0

−10

−20

−30
x(t)=10e−10t
xi+1=(1−10h)xi
−40
0 0.5 1 1.5 2 2.5 3 3.5 4
t

Figura 9.1: Solución Numérica (h = 0.21)

0.21 a 0.09, obtenemos un comportamiento diferente en la solución numérica (ver


gura (9.2)).

En este caso, aunque la solución numérica no es completamente igual a la solución


analítica, sí observamos un comportamiento similar (monotónico convergente). Es
claro que la integración numérica de la ecuación ẋ = −10x resulta muy sensible a
cambios en el tamaño del paso, lo que puede generar aproximaciones numéricas muy
diferentes a las soluciones analíticas.

En el ejemplo anterior, el problema de convergencia lo solucionamos reduciendo h. Sin


embargo, este procedimiento presenta dos dicultades: 1) deducir qué tan pequeño
debe ser el tamaño del paso puede resultar complicado;11 y 2) aún si lograramos
obtener un h lo sucientemente pequeño, esto implica un mayor número de iteraciones
y, por lo tanto, un mayor costo computacional.

Otra forma de solucionar la ecuación diferencial (9.16), consiste en utilizar el método


modicado de Euler (ecuación 9.5). La regla de iteración que obtenemos es:

11
En ecuaciones diferenciales sencillas es posible determinar un h lo sucientemente pequeño para
obtener una solución estable, pero con ecuaciones diferenciales más complicadas este procedimiento
resulta más complejo y, en algunos casos, casi imposible.
SISTEMAS DINÁMICOS 233

Solucion Numerica vs. Solucion Algebraica


10
−10t
x(t)=10e
9 x =(1−10h)x
i+1 i

5
x(t)
4

−1
0 0.5 1 1.5 2 2.5 3 3.5 4
t

Figura 9.2: Solución Numérica (h = 0.09)

xi+1 = xi + h(−10xi+1 )
xi
xi+1 =
(1 + 10h)

Por este método, la integración numérica resulta estable, sin importar el tamaño del
paso utilizado. En general, los métodos más utilizados para la solución de sistemas
dinámicos rígidos son los algoritmos implícitos, por su gran estabilidad con respecto
al tamaño del paso. La desventaja de estos algoritmos es su baja velocidad de so-
lución y su gran costo de procesamiento, lo que puede ser crucial en problemas de
gran magnitud. Otros métodos, como algoritmos predictor - corrector o el método
de Rosenbrock, también son utilizados para la solución de ecuaciones diferenciales
rígidas. Escoger un método de solución depende de las características particulares
del sistema dinámico que estemos trabajando.

9.1.2. Ejemplos Computacionales


MATLABr dispone de varias rutinas, o solvers, que utilizan algunos de los métodos
presentados. En el Cuadro 9.112 se reseñan los diferentes solvers, los diferentes mé-
r
12
Tomado 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.
234 GEDEM - Versión Preliminar

todos numéricos que utilizan, y las situaciones en las cuales se recomienda el uso de
uno u otro. A continuación presentamos algunas aplicaciones computacionales.

Comando Tipo de Problema Algoritmo Uso


ode45odesolvers!ode45 No Rígido Combinación de un méto- Debe ser
do Runge-Kutta de cuatro lizarse: s
con uno de cinco evalua- lución en
ciones, conocido como el diatamen
par de Dormand-Prince tiempo.
ode23odesolvers!ode23 No Rígido Combinación de un mé- Cuando
todo Runge-Kutta de or- cia de to
den dos con otro de orden rigidez m
tres, denominado el par
de Bogacki-Shampine
ode113odesolvers!ode113 No Rígido Adams - Bashforth - Cuando
Moulton ticularme
luar o la
escasa. E
tipaso.
ode15sodesolvers!ode15s Rígido Fórmulas de Diferencia- Cuando
ción Numérica (opcional- inecient
mente: Fórmulas de Dife- que el p
renciación hacia Atrás) do. Es ta
multipas
ode23sodesolvers!ode23s Rígido Fórmula Modicada de Como es
Rosenbrock solo paso
te que OD
una toler
la matriz
te.
ode23todesolvers!ode23t Moderadamente Rígido Regla del Trapecio Sólo si
moderad
se neces
sin a
numérico
ode23tbodesolvers!ode23tb Rígido Fórmula Implícita de Cuando
Runge-Kutta cias muy
cionar sis
r
Cuadro 9.1: Rutinas de MATLAB para solucionar IVPs
SISTEMAS DINÁMICOS 235

Todos los solvers de ecuaciones diferenciales que incluye MATLABr utilizan la mis-
ma sintaxis. Por esta razón, proponemos los siguientes pasos generales para solucionar
un problema de valor inicial:

Paso 1: Denir en un m-file la ecuación diferencial con la siguiente sintaxis:


f=odefun(t,x0,p1,p2,...), donde odefun es el nombre de la función.
Sus inputs son un vector con los valores correspondientes al tiempo (t), las
condiciones iniciales del problema (x0) y unos parámetros adicionales (p1,
p2,...). En el caso de un sistema de ecuaciones diferenciales con n variables,
se debe hacer un planteamiento matricial, siendo x0 un vector de tamaño n × 1
que contiene las condiciones iniciales de las n variables (ver el ejemplo 9.4).

Paso 2: En otro m-file, especicar las condiciones iniciales x0 y el intervalo


de tiempo t en el que se desea hallar la solución. Este intervalo de tiempo
puede construirse de dos maneras. Una forma es colocar el valor inicial y nal
del tiempo, haciendo que el vector t sea de tamaño 2×1. La otra posibilidad es
determinar los m momentos en que se desea evaluar la solución numéricamente,
donde el tamaño del vector tiempo es m × 1.

Paso 3: Fijar las opciones del solver para los distintos tipos de ecuaciones
diferenciales. El comando odegetodeget muestra los valores en los que están
conguradas actualmente estas opciones y odesetodeset permite modicar
esta conguración, a partir de la siguiente sintaxis:

options=odeset('Opción1','Valor','Opción2','Valor',...)

Entre otras, las principales opciones que se pueden congurar con odeset son:

• Outputfcnodeset!Outputfcn : Establece la manera en que se ve la


solución de la ecuación diferencial. Existen cuatro posibles valores:
odeprintodeset!Outputfcn!odeprint (default): Despliega en la
Command Window, la solución numérica del sistema dinámico para
las diferentes condiciones iniciales.
odeplotodeset!Outputfcn!odeplot : Muestra grácamente la so-
lución a la ecuación diferencial. El eje horizontal corresponde al tiem-
po y el eje vertical a x(t).
odephas2odeset!Outputfcn!odephas2 : Contrasta grácamente
la solución de la ecuación diferencial a partir de dos condiciones ini-
236 GEDEM - Versión Preliminar

ciales diferentes. Cada eje corresponde a la solución 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


solución que son utilizadas por Outputfcn. Su valor debe ser un vector
de números enteros.
• Statsodeset!Stats : Visualiza, en la Ventana de Comandos, las es-
tadísticas del proceso de integración numérica. Su valores son on y off
(default).
• Jacobianodeset!Jacobian : Permite asignar una función que calcula
la matriz jacobiana de la ecuación diferencial, con el n de reducir los
costos computacionales al calcular la solución. Su valor debe ser el nombre
de la función.
• Vectorizedodeset!Vectorized : Se establece en ’on’ cuando la
función odefun esté vectorizada.
• InitialStepodeset!InitialStep : Sugiere un tamaño inicial de
paso13 . Su valor debe ser un escalar positivo.

Paso 4: Invocar el solver para hallar la solución de la ecuación diferencial,


utilizando la siguiente sintaxis:14

[T,X]=odesolver(@odefun,t,x0,options,p1,p2,...)

Donde los inputs corresponden a:

odefun: función donde está contenida la ecuación diferencial.


t,x0: vector de tiempo y vector de condiciones iniciales previamente deni-
dos.
options: vector que dene las opciones que el odesolver va a utilizar.
p1,p2,...: son los parámetros adicionales que puediera requerir la función
odefun.
r
13
Por default, las rutinas de MATLAB calculan automáticamente el tamaño del paso.
14
La sintaxis más general es SOL=odesolver(@odefun,t,x0,options,p1,p2,...). Donde
SOL es una variable estructura.
SISTEMAS DINÁMICOS 237

Cuando la función utiliza los parámetros adicionales, y no se congura alguna


opción, es necesario colocar [] en lugar de options, de modo que el solver no
interprete el valor de alguno de los parámetros como el valor de las opciones.
De otro lado, el solver entrega una serie de outputs, cuyas características son:

T: Un vector de tamaño t × 1 con los valores de la variable tiempo en los que


se calculó la solución (también conocidos como pasos).
X: Una matriz de tamaño t × n, donde las columnas contienen la solución de
la ecuación diferencial para cada una de las n condiciones iniciales.

A continuación presentamos distintos ejemplos que ilustran la forma de utilizar cada


solver de MATLABr , haciendo énfasis en las diferencias puntuales de cada rutina.
Debido al gran número de opciones existentes, intentamos generalizar al máximo el
uso de estas. La aplicación exhaustiva de todas ellas, para cada ejemplo, se propone
como ejercicio para el lector.

Ejemplo 9.1. Encontremos computacionalmente la solución, los equilibrios y estu-


diemos la estabilidad de la siguiente ecuación diferencial:

ẋ = 3 − x

Tomando las siguientes condiciones iniciales: x0 = 1 y x0 = 5.

Al solucionar analíticamente la ecuación, encontramos que la solución general es de


la forma x(t) = 3 − e−t C , con un único equilibrio en x = 3, que además es estable. A
continuación vamos a solucionar numéricamente la ecuación dinámica para comparar
las soluciones analítica y computacional.

Paso 1. Crear la ecuación diferencial en el archivo ej1.m:

function dxdt=ej1(t,x);
dxdt=3-x;

Paso 2. En otro chero, jar las condiciones iniciales x0 y el intervalo de tiempo t


en el que se desea hallar la solución:

t=[0:0.1:5]; % Se especican todos los momentos


x0=[1,5]; % Dos condiciones iniciales 1 y 5
238 GEDEM - Versión Preliminar

Paso 3. Denir las opciones del solver. En este ejemplo utilizamos outputfcn y
stats:

options=odeset('outputfcn',@odeplot,'stats','on');

Paso 4. Invocar el solver para hallar la solución a la ecuación. Las características


de esta ecuación diferencial permiten utilizar ode45:

[T,X]=ode45(@ej1,t,x0,options);

En la Ventana de Comandos se despliega un vector T, de tamaño 51 × 1, que contiene


los momentos en el tiempo (pasos) en los que se evaluó la solución de la ecuación
diferencial15 . También se genera una matriz X, de tamaño 51 × 2, que indica que ha
evaluado la solución en 51 momentos (pasos) partiendo de dos condiciones iniciales.
Además, las estadísticas del proceso son presentadas:

11 successful steps
0 failed attempts
67 function evaluations
0 partial derivatives
0 LU decompositions
0 solutions of linear systems

Finalmente, MATLABr arroja el diagrama de fase (t, x), evidente en la Figura 9.3.
Las dos trayectorias corresponden a cada condición inicial, y los círculos a lo largo de
ellas, señalan los momentos en los que se evaluó la solución. Así encontramos que el
equilibrio es x = 3 y es estable, por cuanto a partir de valores superiores e inferiores
se converge asintóticamente.
Si deseamos visualizar el vector T y la matriz X sin generar el diagrama de fase, po-
demos hacer una pequeña variación en el Paso 3, deniendo la opción Outputfcn
como odeprint. Así, MATLABr nos presenta a T y a X en la Ventana de Coman-
dos, 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
15
En este caso, el vector T resulta ser igual al vector t. Sólo cuando el vector t tiene dos compo-
r
nentes (t=[t0 tfinal]), MATLAB entrega un vector de salida T con un número diferente de
componentes.
SISTEMAS DINÁMICOS 239

dxdt=3−x
5

4.5

3.5

x 3

2.5

1.5

1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
t

Figura 9.3: Diagrama de Fase (t, x) de ẋ = 3 − x

Outputfcn como odephas2, el programa genera la gráca 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 solución converge a x = 3. Nuevamente,
los círculos a lo largo de la línea indican los momentos en los que se evaluaron las
soluciones.

Cuando la ecuación diferencial es más compleja, identicar el punto inicial y el punto


nal resulta más complicado. En estos casos, es posible observar que los últimos
momentos son gracados automáticamente con círculos 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.

Ejemplo 9.2. Tomando las condiciones iniciales: x0 = −1.5; x0 = −0.5; x0 =


2.5 y x0 = 5; y el intervalo de tiempo:16 [0,3]; solucionemos la siguiente ecuación
diferencial:
16
Observemos que la solución puede ser calculada a partir de cualquier momento del tiempo, no
es necesario iniciar en t0 = 0.
240 GEDEM - Versión Preliminar

dxdt=3−x
5

4.8

4.6

4.4

4.2

x =5 4
0

3.8

3.6

3.4

3.2

3
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
x =1
0

Figura 9.4: Contraste de Dos Condiciones Iniciales con odephas2

ẋ = 4x2 − x3 − x − 6

Encontrar la solución general de esta ecuación resulta complicado. Sin embargo, no


es necesario encontrar la solución para poder determinar que tiene tres equilibrios;
dos estables (x = 3 y x = −1), y uno inestable (x = 2). Calculemos la solución
computacional y analicemos numéricamente la estabilidad.

Paso 1. Crear la ecuación diferencial en un chero llamado ej2:

function dxdt=ej2(t,x);
dxdt=4*x.^2-x.^3-x-6;

Paso 2. En otro m-file, denir las condiciones iniciales x0 y el intervalo de tiempo


t en el que se desea hallar la solución:17

t=[0 3]; % Se especica t inicial y t nal


x0=[-1.5 -0.5 2.5 5]; % Separados por espacios

Paso 3. Denir las opciones del solver. Aquí vamos a utilizar las opciones18 outputfcn
17
Aquí denimos el vector tiempo y el vector x0 de una manera alternativa.
18
Notemos que la función odephas2 la invocamos de una manera diferente a la utilizada en el
Paso 3 del ejemplo 9.1.
SISTEMAS DINÁMICOS 241

y outputsel:

options=odeset('outputfcn','odephas2','outputsel',[1 3]);

Paso 4. Invocar el solver para hallar la solución a la ecuación. El solver que utiliza-
mos es ode45:19

[T,X]=ode45(@ej2,t,x0,options);

El vector t contiene sólo 2 elementos, correspondientes al momento inicial y al mo-


mento nal de evaluación, y obtenemos un vector salida T de tamaño 2501 × 1 cuyos
elementos inician y terminan en estos dos valores, pero entre los que también se en-
cuentran todos los demás momentos en que se evaluó la solución. De esta manera,
cuando t contiene 2 elementos, no es posible controlar los momentos y el número de
componentes adecuado es determinado por el solver. MATLABr también genera un
vector X de tamaño 2501 × 4, lo que signica que el proceso de solución de la ecua-
ción 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 círculos correspondientes a los últimos momentos se encuentran más
cerca unos a otros que los círculos de los momentos iniciales. Esto signica que el
cambio en cada una de las soluciones, a medida que transcurre el tiempo, es cada vez
más pequeño. Además, es claro que cada solución converge a un equilibrio diferente
porque el punto nal es (-1,3), indicando que la solución de la primer condición
converge al equilibrio x = −1, mientras que la segunda lo hace a x = 3.

A partir de la gráca podemos comparar cuál de las dos soluciones converge más
rápido. La solución de la primer condición inicial converge más rápido que la tercera,
dado que la curva, en los últimos momentos, es casi vertical: el cambio en la solución
de x0 = −1.5 es casi cero, mientras que el de la tercera sigue siendo relativamente
grande, aunque cada vez menor.
19
En realidad, las soluciones de los diferentes solvers son similares, por lo que hemos escogido el
solver más sencillo (ode45).
242 GEDEM - Versión Preliminar

2 3
dxdt=4x −x −x−6
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 −1 −0.9 −0.8
x =−1.5
0

Figura 9.5: Comparación de las Condiciones x0 = −1.5 y x0 = −0.5

Cuando ninguna de las soluciones converge, los círculos nunca se acercan unos a
otros y, por el contrario, tienden a separarse (ver Ejercicio 7). Una situación muy
parecida, en la cual los círculos no se acercan unos a otros, sucede cuando una de las
soluciones no converge, mientras que la otra sí. En este caso, la gráca muestra una
curva horizontal, o vertical, dependiendo de cual de las dos soluciones sea convergente
(ver Ejercicio 8).

En resumen tenemos que si los círculos, de la gráca obtenido con la función odephas2,
tienden a acercarse unos a otros, entonces tenemos que ambas soluciones son con-
vergentes; y si además se presentan tendencias extremas como una curva horizontal
o vertical, entonces alguna de las soluciones se encuentra convergiendo más rápi-
damente que la otra. Por otro lado, cuando no observemos un acercamiento de los
círculos, la existencia de una curva horizontal o vertical es indicio de que una de las
soluciones converge, mientras que la otra no20 .

La función odephas3 nos permite extender el análisis comparativo a tres condiciones


iniciales. En este caso, la gráca es visualizada en tres dimensiones. Los criterios de
convergencia son iguales a los de odephas2, siempre y cuando se tenga en cuenta que
20
Es claro que esta forma de identicar convergencia, además de resultar muy subjetiva, depen-
de ampliamente de la escala adoptada en cada eje, y sólo es aplicable a ecuaciones diferenciales
autónomas. Recomendamos complementar el análisis basado en odephas2, con diagramas de fase
(odeplot).
SISTEMAS DINÁMICOS 243

se trata de una gráca 3D. La Figura 9.6 muestra la gráca obtenida con odephas3,
para las condiciones iniciales: x0 = −1.5, x0 = −0.5 y x0 = 2.5.

2 3
dxdt=4x −x −x−6

2.9

2.8
x =2.5
0
2.7

2.6

2.5
−0.4

−0.6 −0.8
−0.9
−0.8 −1
−1.1
−1.2
−1 −1.3
−1.4
−1.2 −1.5
x =−0.5 x0=−1.5
0

Figura 9.6: Contraste de Tres Condiciones Iniciales con odephas3

Ejemplo 9.3. Resolvamos la siguiente ecuación diferencial no autónoma:

b − atx2
ẋ =
x
Con las cuatro condiciones iniciales: x0 = −8, x0 = −2, x0 = 4 y x0 = 10, en
el intervalo [0, 15]. Esta ecuación no es separable, no es homogénea y solucionarla
analíticamente es un proceso complejo. Veamos su solución computacional con a =
0.4 y b = 30:

Paso 1. Crear la ecuación diferencial en un m-file:

function dxdt=ej3(t,x0,a,b); % Parametros Adicionales


dxdt=(b-a*t.*x.^2)./x;

Paso 2. En otro chero, denir las condiciones iniciales x0, el intervalo de tiempo
t y los valores de los parámetros a y b:
244 GEDEM - Versión 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 solución a la ecuación. Las características de
esta ecuación diferencial hacen necesario utilizar una rutina para ecuaciones
rígidas:21

[T,X]=ode23tb(@ej3,t,x0,[],a,b);

Dado que hemos decidido no especicar ninguna opción, debemos utilizar los parén-
tesis cuadrados ([]) al momento de invocar la rutina. De lo contrario, el programa
interpreta el valor del primer parámetro como el valor de las opciones.
2
dxdt=(30−0.4tx )/x
30

20

10

x(t) 0

−10

−20

−30
0 5 10 15
t

b−atx2
Figura 9.7: Diagrama de Fase (t, x) de ẋ = x

Al igual que en cualquier ecuación diferencial no autónoma, el o los equilibrios se en-


cuentran en función del tiempo. En este caso, la ecuación que describe los equilibrios
(ẋ = 0) es:
21
Cuando a toma valores grandes, o cuando la solución se realiza para valores de t muy altos,
el proceso de integración numérica presenta problemas. Es posible utilizar cualquier rutina para
solucionar ecuaciones diferenciales rígidas. Hemos escogido ode23tb por su mayor velocidad de
solución en este problema particular.
SISTEMAS DINÁMICOS 245

r
b
x
e(t) = ±
at

Si utilizamos la opción 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 ecuación diferencial a la vez, ahora presentaremos
una generalización para la solución de sistemas de ecuaciones diferenciales. El si-
guiente ejemplo ilustra el procedimiento de solución de un sistema de 2 × 2.

Ejemplo 9.4. Resolvamos computacionalmente el siguiente sistema de ecuaciones:

v̇ = 10u + 7v
u̇ = u + 4v

Con la condición inicial v0 = 1 y u0 = 0, en el intervalo [0, 0.5].

La solución analítica del sistema dinámico, dadas las condiciones iniciales, viene dada
por las siguientes ecuaciones:

v(t) = 0.7143 e11t + 0.2857 e−3t


u(t) = 0.2857 e11t − 0.2857 e−3t

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 numéricamente la solución y comparemosla con la solución ante-


rior.

Paso 1. Denir el sistema dinámico en el archivo ej4.m


246 GEDEM - Versión Preliminar

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; % Sistema dinamico


dudt=u+4*v;

dxdt=[dvdt; dudt];
% componente 1 de dxdt es dvdt
% componente 2 de dxdt es dudt

Paso 2. En otro chero, denir el intervalo de tiempo t y las condiciones iniciales


x0:

t=[0 0.5];
v0=1;
u0=0;
x0=[v0; u0];
% componente 1 de x0 es v0
% componente 2 de x0 es u0

Paso 3. Denir las opciones del solver. En este ejemplo utilizamos odeplot como
función de salida:

options=odeset('outputfcn','odeplot');

Paso 4. Invocar el solver para hallar la solución a la ecuación. Utilizamos la rutina


ode45:22

[T,X]=ode45(@ej4,t,x0,options);

En este caso, para solucionar el sistema dinámico, 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
22
Dado que el máximo valor propio de la matriz asociada al sistema no es mucho más grande,
en valor absoluto, que el valor propio más pequeño, estamos seguros que el sistema dinámico no es
rígido.
SISTEMAS DINÁMICOS 247

tiene los valores de la derivada de cada variable con respecto al tiempo (dvdt y
dudt). Al plantear de esta forma el sistema dinámico, las rutinas de MATLABr
pueden solucionar simultáneamente ambas ecuaciones. Como salidas, ode45 genera
un vector T, de tamaño m×1, que contiene los momentos de evaluación de la solución;
y una matriz X, de tamaño m × 2, donde las columnas son la solución para cada
variable.23

La función odeplot genera simultáneamente los diagramas de fase (t, v ) y (t, u) en la


misma gráca (ver Figura 9.8 a.). Por otro lado, si utilizamos la función odephas2
obtenemos el diagrama de fase (v, u) (Figura 9.8 b.). En ambas grácas podemos
observar que las soluciones para cada variable son no convergentes.
a) b)
150 70

60

50
100

40
v(t)
u(t) v(t) u(t)

30

50 u(t)
20

10

0 0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0 20 40 60 80 100 120 140 160 180
t v(t)

Figura 9.8: a) Diagramas de Fase (t, v) y (t, u) b) Diagrama de Fase (v, u)

Para poder observar que (0,0) es un equilibrio de punto de silla es necesario tomar
en cuenta más condiciones iniciales alrededor de este punto. Sin embargo, considerar
más condiciones implica un problema, ya que las rutinas de MATLABr , a pesar de
solucionar sistemas dinámicos de varias variables, no permiten solucionarlos para más
de una condición inicial a la vez. Si, por ejemplo, necesitamos comparar las soluciones
de dos condiciones iniciales, debemos solucionar dos veces el sistema dinámico. El
siguiente ejemplo presenta la solución del sistema para 3 condiciones iniciales, por
medio de la rutina rk4.

23
Cuando trabajamos con una sola ecuación diferencial, si la matriz obtenida X tenía un tamaño
de m×n, esto signicaba que la solución era calculada en m momentos, para n condiciones iniciales.
Ahora, el tamaño m × n de la matriz X indica que se han calculado las soluciones de n variables
para m momentos.
248 GEDEM - Versión Preliminar

Ejemplo 9.5. Queremos solucionar el mismo sistema de ecuaciones del ejemplo


anterior, en el intervalo [0, 0.25], para las siguientes 3 condiciones iniciales:

1. (v0 , u0 ) = (10, −9)


2. (v0 , u0 ) = (10, −10)
3. (v0 , u0 ) = (10, −11)

Para poder solucionar el sistema dinámico simultáneamente para las 3 condiciones,


vamos a utilizar el solver rk4, que hace parte del toolbox CompEcon. Como su
nombre lo indica, esta rutina utiliza el método de Runge - Kutta de cuarto orden
para hallar la solución. El comando presenta la misma sintaxis de los odesolvers
de MATLABr , aunque no existe la posibilidad de denir algún tipo de opciones. Es
necesario resaltar que el solver utiliza un tamaño de paso jo, por lo que sólo puede
ser utilizado para solucionar sistemas dinámicos no rígidos. Por tal razón, la única
forma de solucionar un sistema rígido, para las diferentes condiciones iniciales, es por
medio de una programación especial que involucra varias iteraciones (ver ejercicio
9).

A continuación presentamos el procedimiento de solución:

Paso 1. Denir el sistema dinámico en un m-file llamado ej5:

function dxdt=ej5(t,x,ag); % Requiere ag


v=x(1); % la sintaxis es la misma que en ej4.m
u=x(2);

dvdt=10*u+7*v;
dudt=u+4*v;
dxdt=[dvdt; dudt];

Paso 2. En otro archivo, denir las condiciones iniciales x0 y el intervalo de tiempo


t:

t=[0:0.05:0.5]'; % Vector Columna con Momentos


v0=[10 10 10];
u0=[-9 -10 -11];
x0=[v0; u0];
SISTEMAS DINÁMICOS 249

Paso 3. No es posible denir opciones.

Paso 4. Invocar el solver para hallar la solución a la ecuación.

[T,X]=rk4('ej4',t,x0);

Para utilizar rk4 debemos introducir flag en la sintaxis de la función. Esto simple-
mente es utilizado para que, al igual que las rutinas de MATLABr , el solver pueda
aceptar como entradas los parámetros adicionales. En este ejemplo no utilizamos
parámetros adicionales, pero en la aplicación económica será de gran importancia la
denición de estos parámetros para poder realizar simulaciones.

Observemos que la denición del vector tiempo también cambia. Mientras que para
las rutinas de MATLABr no importa si el vector tiempo es un vector la o colum-
na,24 el solver rk4 requiere que el vector de tiempo sea columna, y que contenga
todos los momentos de evaluación. 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 condición inicial, y así sucesivamente. Así, la tercer
componente del vector v0 junto con la tercer componente del vector u0 conforman
la tercer condición inicial. Esto también implica que cada una de las columnas de la
matriz x0 es una condición 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 MATLABr , la rutina rk4 no genera ningún tipo de gráca, debemos
gracar manualmente los diagramas de fase:

Diagramas de Fase (t, v) y (t, u): Para generar los diagramas de fase pa-
ra 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 dimensión de la variable u:
24
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 dimensión de una matriz. Véase Cuadro 2.1, pág. 33.
250 GEDEM - Versión Preliminar

plot(t,squeeze(X(:,1,:)))

En este caso, la segunda dimensión corresponde a u. Si deseamos generar el


diagrama de fase (t, u) debemos remover la primera dimensión:

plot(t,squeeze(X(:,2,:)))

En ambos diagramas de fase, Figura 9.9, se observa que para dos de las condi-
ciones 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) b)
200 80

150 60

100 40

50 20

v(t) 0 u(t) 0

−50 −20

−100 −40

−150 −60

−200 −80
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
t t

Figura 9.9: a) Diagrama de Fase (t, v) b) Diagrama de Fase (t, u)

Diagrama de Fase (v, u): Para gracar este diagrama de fase, también es ne-
cesario utilizar squeeze. Sin embargo, ahora gracamos una dimensión 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 rápidamente del equilibrio. Por otro lado, la condición
inicial (10,-10) sigue una trayectoria hacia el equilibrio (0,0). Si hubiéramos
calculado la solución para un intervalo de tiempo más grande, observaríamos
cómo la trayectoria que parte en (10,-10) naliza en el punto de equilibrio.
SISTEMAS DINÁMICOS 251

15

10

u(t) 0

−5

−10

−15
−25 −20 −15 −10 −5 0 5 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 más


condiciones iniciales alrededor de (0,0). El resultado que se obtiene es consistente
con la solución analítica del problema.

9.1.3. Aplicaciones Económicas


El Modelo de Crecimiento de Solow

Modelo de Crecimiento de Solow


El modelo de crecimiento de Solow es uno de los modelos más utilizados en el análisis
económico de muy largo plazo. El modelo fue propuesto por el economista Robert
Solow en un artículo publicado en 1956 en el Quarterly Journal of Economics,26 en
el que buscaba contrastar los resultados obtenidos en el modelo de Harrod - Domar
con los resultados de un modelo en el que se mantenían los mismos supuestos pero la
función de producción agregada cambiaba. Suponiendo la existencia de una función
agregada con rendimientos constantes a escala, Solow logra encontrar, al contrario
de Harrod - Domar, que el equilibrio de largo plazo es estable.

Con el objetivo de aplicar las herramientas computacionales presentadas en las sec-


ciones anteriores, a continuación presentamos el modelo básico y su respectiva pro-
26
Solow, Robert. 1956. A Contribution to the Theory of Economic Growth. Quarterly Journal
of Economics. Vol. 70, No. 1 (Feb. 1956), 65-94.
252 GEDEM - Versión Preliminar

gramación.27

Modelo:
Suponemos que existe un sólo bien en la economía; su nivel de producción en el
momento t es Yt . Una parte de esta producción es consumida y la otra es ahorrada.
La fracción del producto que se ahorra es constante y viene determinada por la
propensión marginal a ahorrar s, así que el ahorro total en el momento t es St = sYt .

El stock de capital, Kt , consiste en la acumulación del único bien de la economía. El


cambio en el tiempo de este stock de capital (dKt /dt o K̇t ) es la inversión neta.28
Además, como el ahorro siempre es igual a la inversión tenemos la siguiente identidad
básica en cada instante del tiempo:

K̇t = sYt (9.17)

El único bien de la economía es producido utilizando capital y trabajo. La tecnología


disponible en la economía se encuentra representada por la siguiente función de
producción:

Yt = F (Kt , Lt ) (9.18)

Además se supone que la producción presenta rendimientos constantes a escala, por


lo que esta función se supone homogénea de grado uno.29

Introduciendo (9.18) en (9.17) obtenemos:

K̇t = sF (Kt , Lt ) (9.19)

Por otro lado, como resultado de un crecimiento exógeno y continuo de la población,


la fuerza laboral L se incrementa a una tasa constante n, es decir:

Lt = L0 ent (9.20)
27
En esta sección nuestro objetivo es presentar la programación computacional del modelo de
Solow. Para una exposición teórica más profunda recomendamos revisar el siguiente libro (?), el
artículo original o cualquier texto guía del primer curso de macroeconomía.
28
Hablamos de inversión neta pues suponemos que no hay depreciación de capital. Cuando existe
depreciación de capital, la inversión neta es igual a la inversión bruta descontando la depreciación.
La programación del modelo con depreciación se deja como ejercicio para el lector (ver ejercicio 11).
29
Además del supuesto de homogeneidad de grado uno, por lo general se supone que la función
de producción cumple las siguientes condiciones: FK > 0, FL > 0, FKK < 0, FLL < 0, FKL > 0 y
las denominadas condiciones de Inada.
SISTEMAS DINÁMICOS 253

En (9.19) L es el empleo total y en (9.20) L es la oferta disponible de trabajo. Asu-


miendo que la economía siempre se encuentra en pleno empleo, es posible introducir
(9.20) en (9.19) obteniendo:

K̇t = sF (Kt , L0 ent ) (9.21)

La anterior es una ecuación diferencial de una sola variable, K(t), que determina la
senda de acumulación 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 función de producción, 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 interés.

Nos interesa reexpresar la ecuación (9.21) en términos per cápita puesto que no es
correcto decir que un país es más rico porque produce más que antes; más bien se
considera que un país es más rico si sus habitantes, en promedio, producen más que
antes.30 Por otro lado, plantear el modelo en variables per cápita resulta conveniente
desde el punto de vista analítico, dado que permite caracterizar grácamente la
ecuación diferencial.

La ecuación (9.22) dene la variable k como la relación capital trabajo. Esta relación
indica el número de máquinas, o cualquier otro bien de capital, que hay por cada
trabajador.

Kt
kt = (9.22)
Lt

Para calcular la tasa de crecimiento de la variable k , sacamos logaritmo a ambos


lados de la ecuación y luego derivamos con respecto al tiempo obteniendo:

k˙t K̇t L̇t


= − (9.23)
kt Kt Lt

Reemplazando la tasa de crecimiento de la fuerza de trabajo y la ecuación (9.21)


obtenemos:
30
(?, p. 19)
254 GEDEM - Versión Preliminar

k˙t sF (Kt , Lt )
= −n
kt Kt
µ ¶
k˙t 1
= sF 1, −n
kt kt
µ ¶
˙ 1
kt = skF 1, − nkt
kt
k˙t = sF (kt , 1) − nkt (9.24)

La función F (kt , 1) representa la producción total generada por k unidades de capital


per cápita, cuando una unidad de trabajo es utilizada. De esta forma, el primer
término de la ecuación (9.24) correspondería a la fracción ahorrada de la producción
por habitante. El segundo término indica que el stock de capital disminuye como
consecuencia del crecimiento de la población. Finalmente es posible observar que el
capital per cápita crece, decrece y es constante cuando el ahorro per cápita es mayor,
menor e igual que el término nkt .

Hasta el momento sólo hemos denido algunas propiedades generales de la función de


producción, pero al programar debemos utilizar una función de producción especíca.
En este caso vamos a trabajar con la función de producción tipo Cobb - Douglas31
con α = 0.5 y β = 0.5. Por lo tanto la función de producción per cápita es:

F (Kt , Lt ) = Kt0.5 L0.5


t

F (kt , 1) = kt0.5 10.5


F (kt , 1) = kt0.5

También es necesario denir unos valores para las tasas de ahorro y crecimiento de
la población. Suponemos que s = 15.5 % y n = 2.2 %. A continuación presentamos
la respectiva programación del modelo.

Programación:

En primer lugar debemos crear un m-file, llamado fsolow.m, en el cual vamos a


especicar la ecuación diferencial (9.24). Al contrario de los ejemplos anteriores, en
los cuales la única función especicada en el m-file era la ecuación diferencial, en
el mismo chero vamos a denir k˙t y la función de producción per cápita:
31
Ver caps. 4,5 y 7
SISTEMAS DINÁMICOS 255

function dk=fsolow(t,k,alpha,s,n);
dk=s*produccion(k,alpha)-n*k;

function y=produccion(k,alpha);
y=k.^alpha;
Las dos primeras líneas de programación son utilizadas para denir la ecuación di-
ferencial (9.24). Observemos que la función de producción no es denida en estas
líneas, simplemente es referenciada. La función de producción tipo Cobb-Douglas es
especicada en las dos últimas líneas del programa. Esta forma de programación es
muy utilizada por cuanto permite disminuir el número de cheros destinados para el
modelo al tiempo que genera mayor exibilidad en la especicación del mismo.
El siguiente paso consiste en construir un nuevo chero, llamado solowprog.m, en
el cual vamos a denir los parámetros del modelo y a invocar la rutina de solución
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 pro-


blema de valor inicial, es necesario imponer una condición inicial por lo que k0 = 2.
La rutina de solución 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 cápita de equilibrio corresponde
a k ∗ = 49, 63

El Modelo de Crecimiento de Ramsey


Modelo de Crecimiento de Ramsey

El Modelo de Ciclo de Goodwin

9.2. Ecuaciones en Diferencia y Dinámica Discreta


256 GEDEM - Versión Preliminar

Modelo de Solow
41.8

41.6

41.4

41.2

41
kt

40.8

40.6

40.4

40.2

40
0 10 20 30 40 50 60 70 80 90 100
t

Figura 9.11: Diagrama de Fase (t, kt )

Ejercicios
1) Considere el siguiente Problema de Valor Inicial:

ẋ = 4x
x0 = 2

a) Calcule la solución numérica utilizando el script del método de Euler y del


método RK2, presentados en la primera sección del capítulo. La solución nu-
mérica debe calcularse para 10 momentos, y para el intervalo de tiempo [0, 2]
(Tenga en cuenta que debe calcular el tamaño de paso adecuado para cubrir
el intervalo de tiempo en 10 momentos).
b) Graque la solución algebraica y numérica de ambos métodos en una misma
gura. ¾Existe alguna diferencia entre los dos métodos?
c) Construya un m-file en el que el tamaño del paso itere tomando 20 valo-
res. 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 métodos junto con la solución algebraica. ¾Qué sucede al cambiar
el tamaño del paso?¾Qué método es más estable?
SISTEMAS DINÁMICOS 257

2) Realice la programación del método de Runge - Kutta de cuarto orden presentado


en la página 223. El programa debe requerir los mismos inputs que el script del
método RK2.

a) Solucione el IVP del ejercicio 1 con la programación desarrollada. Los pará-


metros utilizados son los mismos que en el literal a.
b) Compare grácamente la soluciones obtenidas por el método RK2 y el RK4
con la solución algebraica.
c) ¾Qué sucede si aumenta el tamaño del paso?

3) Compare grácamente la solución por el método de Adams - Bashforth con el


método de Adams - Bashforth - Moulton, en el intervalo [t, t + h]. De la siguiente
ecuación diferencial:

ẋ =
x0 =

¾Cuál es más sensible a cambios en el tamaño del paso?.

4) Considere problema de valor inicial del ejercicio anterior.

a) Genere una matriz A20×2 donde la primer columna sea la solución obtenida
por el comando ode113 y la segunda la del script del algoritmo Adams -
Bashforth - Moulton de la página 230.
b) Calcule el vector columna d cuyas componentes cumplan la siguiente regla:
dj = aj1 − aj2 .
c) Graque d’ contra el tiempo. ¾Qué nos dice este resultado?

(Aunque el método utilizado sea el mismo, la diferencia radica en que el comando


de MATLABr incorpora algoritmos adicionales para cambiar el tamaño del paso
según sea necesario, permitiendo una mejor aproximación a la solución).

5) Construya un m-file en el que se muestre grácamente que el uso del método


modicado de Euler soluciona el problema de integración numérica de la siguiente
ecuación diferencial rígida:

ẋ = −10x
258 GEDEM - Versión Preliminar

6) Considere el siguiente problema de valor inicial:

ẋ = b − ax
x0 = 1.8

a) Construya un chero en el que, utilizando el comando tic toc de MATLABr ,


se compare el tiempo que requiere ode23 y ode23tb para solucionar el sis-
tema en el intervalo de tiempo [0,0.5]. Tome a = 10, b = 20 y no especique
los momentos de evaluación.
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 solución a medida
que b toma valores más grandes? ¾Cuál de las dos rutinas toma más 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 solución a
medida que a toma valores más grandes? ¾Cuál de las dos rutinas toma más
tiempo para solucionar el problema?
d) ¾Por qué una rutina es más lenta que la otra? Explique.

7) Necesito una ecuación diferencial que tenga un equilibrio inestable. Las dos condi-
ciones iniciales no llevan al equilibrio. Ponerlos a gracar con odeplot y odephas2.

8) Necesito un IVP con dos condiciones iniciales, donde una converja y la otra no.
Ponerlos a gracar con odeplot y odephas2.

9) En el ejemplo 9.5, si el sistema dinámico planteado fuera rígido, no sería posible


utilizar la rutina rk4. Esto plantea un problema para solucionar simultáneamente
sistemas de ecuaciones rígidos para varias condiciones iniciales.
Utilizando cualquier rutina de MATLABr para problemas rígidos, y con ayuda
del comando for, construya un programa en el que en cada iteración se encuentra
la solución para cada condición inicial. El programa debe aceptar como entradas
el nombre de la función que contiene el sistema dinámico, las condiciones iniciales,
el intervalo de tiempo, y algunos parámetros adicionales. Como resultado, se debe
obtener un vector T y una hipermatriz X de m × n × d.

10) Programe la función que contiene la ecuación diferencial en el modelo de Solow,


de tal forma que acepte un parámetro p. Si el valor del parámetro es p = 0
SISTEMAS DINÁMICOS 259

entonces la función de producción agregada es f (k) = min{ αk , β1 }. Si el valor del


parámetro es p = 1 entonces la función de producción es f (k) = k α . El chero
debe aceptar como inputs (t, k, alpha, beta, p, s, n, d).

11) Extienda y programe el modelo de Solow incorporando la depreciación de capital.


Suponga que el capital se deprecia a una tasa constante d.32

12) Utilizando el comando gradient determina la senda del salario real y la tasa de
interés del ejemplo planteado en la página 37.

32
Observe que la depreciación total es: D = dK(t).
260 GEDEM - Versión Preliminar
Bibliografía

Blanchard, Olivier. 1989. Lectures on Macroeconomics. The MIT Press.

Draper, J., y Klingman J. (1979). Matemáticas para Administración y Economía.


5.a Reimpresión. HARLA S.A., México.

Fackler, P., y Mario Miranda. 2003. Applied Computational Economics and Finance.
The MIT Press.

García de Jalón, Javier et al. 2001. Aprenda Matlab 6.1 como si estuviera en
primero. Escuela superior de Ingenieros Industriales. Universidad Politécnica 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. Análisis Numérico: Las Matemáticas del Cálculo
Cientíco. Addison-Wesley Iberoamericana, Delaware.

Leithold, L. (1979). El Cálculo con Geometría Analítica. 17.a Reimpresión. HARLA


S.A., México.

Mantilla, Ignacio. (2004). Análisis Numérico. 1.a Edición. Universidad Nacional


de Colombia.

Monsalve, Sergio, ed. (2004). Matemáticas Básica para Economistas 3: Optimiza-


ción y Dinámica. Mimeo: Universidad Externado de Colombia - Universidad
Nacional de Colombia.

. 2005a. Matemáticas Básicas para Economistas 0: Fundamentos. Universi-


dad Nacional de Colombia y Universidad Externado de Colombia.

. 2005b. Matemáticas Básicas para Economistas 2: Cálculo. Universidad


Nacional de Colombia y Universidad Externado de Colombia.

261
262 GEDEM - Versión Preliminar

Mora, Hector. 2001. Optimización no lineal y Dinámica. 2a. Universidad Nacional


de Colombia. Facultad de Ciencias.
Nicholson, Walter. 1997. Teoría Microeconómica: principios básicos y aplicaciones.
6a. McGraw-Hill.
Sydsaeter, K., y Peter Hammond. (1996). Matemáticas para el Análisis Económico.
Prentice Hall, Madrid.
Índice alfabético
acos, 53 for, 14, 82
alignment, 102 get, 103
atan, 51 gradient, 138, 149
axis, 101 grid, 100
cat, 32 help, 17
chol, 47, 78 if, 13
clabel, 106 inf, 98
clc, 9 inline, 94
clear, 9 inv, 73
close, 9 ipermute, 35
color, 102 legend, 100
colorbar, 109 line, 100, 102
colormap, 108 linestyle, 102
contour, 106 linewidth, 102
contour3, 106 lu, 46, 76
cross, 52, 63 marker, 102
cumtrapz, 171 markersize, 102
dblquad, 177 mesh, 105
det, 74 meshgrid, 57, 104
diag, 82 min, 191
diff, 141, 152, 163 ndims, 34
doc, 17 norm, 49
dot, 52 orth, 55
eig, 65 permute, 35
eps, 83 plot, 95, 188
fdhess, 154, 188 plot3, 105
fdjac, 142 polyder, 136, 148
fhess, 188 polyint, 169
fjac, 142 qnwsimp, 175
font, 102 qnwtrap, 173

263
264 GEDEM - Versión Preliminar

quad, 175 de llegada, 94


rref, 70 de salida, 94
rrefmovie, 71 Conjuntos
set, 103 contorno inferior, 185
size, 33 contorno superior, 185
sparse, 37 constante de integración, 169
squeeze, 34 Contador, 14
subplot, 101, 115 Convexidad, 183
surf, 105 Current Directory, 6
syms, 163 Curvas de nivel, 185
texlabel, 100
Derivación de orden superior, 147
text, 100
Derivación de primer orden, 136
title, 100
trapz, 171 ejm8, 54
view, 101 Entradas, 10
xlabel, 100 Error de Truncamiento, 137
ylabel, 100 Expansión de Taylor, 156
zlabel, 100
svd, 50 Función, 94
cóncava, 184
Inputs, 10 CES, 126
Cobb-Douglas, 125, 128
Apéndice
convexa, 184
integración, 179
cuasicóncava, 184
Bifurcación, 13 cuasiconvexa, 184
Bucle, 13 de dos variables, 103
visualización de, 103
Cell Array, 24 de una variable, 94
cell-array, 122, 124 visualización de, 94
comandos, 234-236 discontinua, 98, 99
Comentarios, 7, 8 dominio de una, 94
Command History, 5 Leontieff, 128
Command Window, 2 Lineal, 128
CompEcon, 2 Mínimo, 128
Compecon Toolbox, 173, 175 parámetros de, 114
Concavidad, 183 rango de una, 94
Conjunto recorrido de una, 94
SISTEMAS DINÁMICOS 265

univariada, 188 directos, 70


Función Cobb-Douglas, 145 factorización de Cholesky, 78
Funcion factorización de Crout, 76
CARA, 132 indirectos, 70, 79
CRRA, 132 iterativos, 70
Funciones, 10, 93 numéricos, 70, 79
económicas, 124 Matrices, 29
a partir de vectores, 57
Gauss-Jacobi, 80, 81, 87
de coeficientes, 69
Gauss-Seidel, 80, 83
de descomposición, 80, 81, 83
Gráfico
opciones de, 99, 108 determinante de, 43
dispersas, 36
Hipermatrices, 31, 35 comandos para, 37
comandos para, 33 división de, 41
división izquierda, 41
imagen, 94
factorizables, 46
integración, 167
integración definida, 168 factorización de Cholesky, 47
integración indefinida, 168 factorización LU, 46
integral, 169 generadas automáticamente, 37
Integrales Dobles, 176 introducción de, 30
Iteración, 11 inversa de, 43
regla de, 80, 81, 83 multiplicación de, 41
norma de, 43
Launch Pad, 3 operaciones entre, 41
M-File, 6, 8, 9 ortogonales, 55
Método potenciación de, 41
analítico, 11 rango de, 43
Gauss-Jordan, 70 resta de, 41
inversa, 73 suma de, 41
numérico, 11, 13 tipos de, 36
regla de Cramer, 74 transpuesta de, 43
Método de aproximación lineal, traza de, 43
170 triangular inferior, 77
Método de Diferencia Finita, 137 triangular superior, 77
Métodos triangulares inferiores, 43
analíticos, 70 triangulares superiores, 43
266 GEDEM - Versión Preliminar

valores singulares, 47 Scripts, 10


Matrices Sentencia, 13
Débilmente Condicionadas, 80Simulación
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 Homogéneos, 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
factorización LU, 76 Valores propios, 64
Modelo de Cournot, 157 Variables
simbólicas, 13
Nodo, 173
Vectores, 29, 48
peso, 173
ángulo entre, 53
ponderación, 173
de resultados, 69
Objetos, 19 de variables, 69
Optimización, 213 dirección de, 50
Outputs, 10 magnitud de, 48
norma de, 48
Pareja Ordenada, 103
operaciones entre, 51
Path, 16
producto cruz, 52
Planos, 58, 61
producto escalar, 52
distancia a un punto, 63
proyección, 54
Rectas, 58, 59 solución, 69
Regla de Iteración, 16 Vectores propios, 64
Regla de Simpson, 174 Ventanas de Matlab, 2
Regla del Exponente, 168
Workspace, 4
Regla del Trapecio, 170

Salidas, 10

También podría gustarte