Está en la página 1de 282

Introduccin a la

Economa Matemtica en MATLAB


(Versin Preliminar)

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

ndice general
1. Conceptos Bsicos

1
r

1.1. Qu es MATLAB ? . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2. Ventanas de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.1. Command Window . . . . . . . . . . . . . . . . . . . . . . . .

1.2.2. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.3. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.4. Command History . . . . . . . . . . . . . . . . . . . . . . . .

1.2.5. Current Directory . . . . . . . . . . . . . . . . . . . . . . . .

1.3. M-File Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4. Procesos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.5. Otros Conceptos Bsicos . . . . . . . . . . . . . . . . . . . . . . . . .

16

1.5.1. Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

1.5.2. Help y Doc . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.5.3. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

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 Bsicas entre Matrices . . . . . . . . . . . . . . .

41

2.1.4. Anlisis de una Matriz . . . . . . . . . . . . . . . . . . . . . .

43

2.1.5. Matrices Factorizables . . . . . . . . . . . . . . . . . . . . . .

46

2.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

2.2.1. Anlisis de un vector . . . . . . . . . . . . . . . . . . . . . . .

48

2.2.2. Operaciones entre Vectores . . . . . . . . . . . . . . . . . . .

51

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. Mtodos Directos o Analticos . . . . . . . . . . . . . . . . . . . . . .

70

3.1.1. Eliminacin Gauss-Jordan . . . . . . . . . . . . . . . . . . . .

70

3.1.2. Mtodo de la Inversa . . . . . . . . . . . . . . . . . . . . . . .

73

3.1.3. Regla de Cramer . . . . . . . . . . . . . . . . . . . . . . . . .

74

3.1.4. Factorizacin de Crout o LU . . . . . . . . . . . . . . . . . .

76

3.1.5. Factorizacin de Cholesky . . . . . . . . . . . . . . . . . . . .

78

3.2. Mtodos Indirectos o Numricos . . . . . . . . . . . . . . . . . . . . .

79

3.2.1. Matrices Dbilmente Condicionadas . . . . . . . . . . . . . .

80

3.2.2. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . .

81

3.2.3. Gauss-Seidel

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

83

3.3. Apndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87

3.3.1. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . .

87

3.3.2. Gauss-Seidel

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

89

3.3.3. Mtodo de Richardson . . . . . . . . . . . . . . . . . . . . . .

89

II CLCULO

91

4. Funciones

93

4.1. Funciones de una Variable . . . . . . . . . . . . . . . . . . . . . . . .

94

4.1.1. Visualizacin de funciones de una variable . . . . . . . . . . .

94

4.1.2. Opciones adicionales para los grcos

99

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

4.2. Funciones de dos variables . . . . . . . . . . . . . . . . . . . . . . . . 103


4.2.1. Visualizacin de Funciones de dos variables . . . . . . . . . . 103
4.2.2. Opciones adicionales para los grcos

. . . . . . . . . . . . . 108

4.3. Simulaciones en funciones de una variable . . . . . . . . . . . . . . . 114


4.4. Simulaciones en funciones de dos variables . . . . . . . . . . . . . . . 121
4.5. Anlisis de Funciones econmicas . . . . . . . . . . . . . . . . . . . . 124
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

iii

5. Derivacin

135

5.1. Derivacin de primer orden . . . . . . . . . . . . . . . . . . . . . . . 136


5.1.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.1.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.1.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.1.4. fjac y fdjac . . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.1.5. Aplicacin: Una funcin de Produccin tipo Cobb-Douglas . . 145
5.2. Derivacin de orden superior

. . . . . . . . . . . . . . . . . . . . . . 147

5.2.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148


5.2.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.2.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
5.2.4. fdhess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
5.2.5. Expansin de Taylor . . . . . . . . . . . . . . . . . . . . . . . 156
5.2.6. Aplicacin: El Equilibrio en el Modelo de Cournot . . . . . . 157
5.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
5.4. Apndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

6. Integracin

167

6.1. Integracin por Regla del Exponente . . . . . . . . . . . . . . . . . . 168


6.2. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.4. Integrales Dobles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

III

OPTIMIZACIN Y DINMICA

7. Concavidad y Convexidad

181
183

7.1. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184


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

iv

8. Optimizacin

213

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


8.1.1. Minimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

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

217
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

217
217
233
251
255

ndice de guras
1.1. Conjunto Inicial de Ventanas . . . . . . . . . . . . . . . . . . . . . .

1.2. Command Window o Ventana de Comandos . . . . . . . . . . . . . .

1.3. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.5. Command History . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.6. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.7. Editor de M-Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.8. Comentarios con % . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.9. Ventana de Comandos y Resultados . . . . . . . . . . . . . . . . . .

1.10. Path de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.11. Help de pcb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

1.12. Documentacin 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 direccin del vector u = (7, 5) . . . . . . . . . . . . . . . . . . .

51

2.4. Producto cruz entre a y b . . . . . . . . . . . . . . . . . . . . . . . .

53

2.5. Proyeccin de a sobre b . . . . . . . . . . . . . . . . . . . . . . . . .

55

2.6. a) nica Solucin b) No Existe Solucin c) Innitas soluciones . . . .

58

2.7. Una recta en tercera dimensin . . . . . . . . . . . . . . . . . . . . .

59

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

62

3.1. Modelo de vas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

86

4.1. Funcin Cbica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97

4.2. Funcin 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. Simulacin de una funcin de una variable . . . . . . . . . . . . . . . 114
4.10. Ejemplo 4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4.11. Ejemplo 4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
4.12. Ejemplo 4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
4.13. Ejemplo 4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.14. Ejemplo 4.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.15. Simulacin del parmetro a en f (x, y) = acos(xy) . . . . . . . . . . . . 123
4.16. Simulacin del parmetro a en f (x, y) = x3 ax2 y + 6xy 2 y 3 . . . 125
4.17. Funcin Cobb-Douglas . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.18. Funcin CES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.19. Funcin CES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.1. Grca de f (x) = x4 y su derivada . . . . . . . . . . . . . . . . . . . 139
5.2. f (x, y) = x2 + y 2 y su gradiente a escala distinta . . . . . . . . . . . 140
5

5.3. Derivada de f (x) = x 2 mediante diff . . . . . . . . . . . . . . . . . 141


1

5.4. La funcin de produccin f (K, L) = K 3 L 3

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

5.5. Izquierda: Productividad Marginal del Capital. Derecha: Productividad 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 funcin f (x, y) = x3 3xy 2 . . . . . . . . . . . . . . . . . . . . . 155
5.9. La funcin f (x) = x3 + y 3 . . . . . . . . . . . . . . . . . . . . . . . . 156
2

5.10. La funcin f (x) = 5x 3 32 y su aproximacin de grado tres . . . . . 158


5.11. El duopolio de Cournot . . . . . . . . . . . . . . . . . . . . . . . . . 160
6.1. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.2. Excedente del Consumidor . . . . . . . . . . . . . . . . . . . . . . . . 172
6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.4. Excedente del Productor . . . . . . . . . . . . . . . . . . . . . . . . . 176
6.5. Integracin Doble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
7.1. Mtodo grco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7.2. Gradiente numrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
7.3. Gradiente numrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

vii

7.4.
7.5.
7.6.
7.7.
7.8.

Segunda derivada con fhess . . . . . . . . . . . . . .


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

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

194
195
196
198
199

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


9.1. Solucin Numrica (h = 0.21) . . . . . . . . . . . . . . . . . .
9.2. Solucin Numrica (h = 0.09) . . . . . . . . . . . . . . . . . .
9.3. Diagrama de Fase (t, x) de x = 3 x . . . . . . . . . . . . . .
9.4. Contraste de Dos Condiciones Iniciales con odephas2 . . . .
9.5. Comparacin de las Condiciones x0 = 1.5 y x0 = 0.5 . . .
9.6. Contraste de Tres Condiciones Iniciales con odephas3 . . . .
2
9.7. Diagrama de Fase (t, x) de x = batx
. . . . . . . . . . . . .
x
9.8. a) Diagramas de Fase (t, v) y (t, u)
b) Diagrama de Fase
9.9. a) Diagrama de Fase (t, v)
b) Diagrama de Fase (t, u) .
9.10. Diagrama de Fase (v, u) . . . . . . . . . . . . . . . . . . . . .
9.11. Diagrama de Fase (t, kt ) . . . . . . . . . . . . . . . . . . . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
(v, u)
. . . .
. . . .
. . . .

232
233
239
240
242
243
244
247
250
251
256

viii

ndice de cuadros
1.1.
1.2.
1.3.
1.4.

Mtodo Numrico para hallar x . . . . . . . . .


Algunos Comandos sobre Cadenas de caracteres
Algunos Comandos sobre Estructuras . . . . . .
Algunos Comandos para objetos Cell Array . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

12
21
23
25

2.1.
2.2.
2.3.
2.4.
2.5.

Comandos para hipermatrices . . . . . . . .


Matrices generadas automticamente . . . .
Algunos Comandos para Matrices Dispersas
Operaciones bsicas entre matrices . . . . .
Comandos para analizar una matriz . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

33
37
38
41
43

.
.
.
.
.

.
.
.
.
.

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

ix

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

xii

GEDEM - Versin Preliminar

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


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

INTRODUCCION

xiii

en donde una funcin crece o decrece adems de otras propiedades, mientras que en
el captulo 6 se presentan los diferentes mtodos numricos que se pueden emplear
para calcular en MATLABr integrales denidas de cualquier tipo de funcin.
Finalmente en la ltima parte del libro se estudia el planteamiento computacional
de problemas de optimizacin esttica y de sistemas dinmicos. En el captulo 7
se presentan los mtodos numricos y la utilizacin de MATLABr para analizar la
concavidad y convexidad de una funcin. A partir de estos conceptos, en el captulo 8
se muestra cmo resolver numricamente en MATLABr problemas de optimizacin

esttica, tanto restringida como no restringida o "libre"Finalmente,


el captulo ??
presenta las diferentes formas en que se puede hallar la solucin numrica a sistemas
dinmicos, y a partir de ella analizar la existencia, unicidad y estabilidad de los
equilibrios que pueden tener este tipo de sistemas. As, este ltimo captulo cierra el
libro pero es una buena introduccin al planteamiento computacional de problemas
de tipo dinmico.
Todos los captulos se desarrollan computacionalmente utilizando como herramienta MATLABr . Existen otros programas para realizar clculos matemticos, como
por ejemplo C++, C, FORTRAN o JAVA. Tambin, algunos autores han trabajado
en otras plataformas computacionales problemas especcos de economa. Por ejemplo, Thomas Rutherford ha trabajado la programacin de Modelos de Equilibrio
General Computable en GAMS-MPSGE1 ; Hal R. Varian ha trabajado herramientas matemticas bsicas y avanzadas utilizadas en economa por medio del lenguaje
Mathematica2 . Otros programas como Econometric Views, SPSS y SAS se enfocan
en trabajar computacionalmente la estadstica y la econometra. Por otro lado, lenguajes como Ox o Scilab trabajan de manera similar a 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 computacionalmente problemas econmicos. Por ejemplo, Thomas Sargent utiliza MATLABr para
modelos de poltica scal, inacin y desempleo, y para resolver matemticamente
juegos dinmicos y equilibrios de Nash, Filtro de Kalman y ecuacin de Ricatti, entre
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 - Versin Preliminar

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


modelos dinmicos en tiempo discreto no lineales estocsticos. Muchos otros autores trabajan sus cursos en MATLABr , como por ejemplo Olivier Blanchard y Finn
Kydland, y actualmente es utilizado en el Banco de la Repblica para la construccin de Modelos de Equilibrio General Computable. Adems de esto, MATLABr es
muy comn en el desarrollo de aplicaciones cientcas en otras ciencias naturales y
sociales.
En segundo lugar, la comunidad de usuarios de MATLABr constantemente est produciendo 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 economtricos en
MATLABr . De esta manera, aunque existen programas especializados en el desarrollo de ciertos temas, MATLABr tambin 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 solucin de cierto tipo de problemas. En
algunas ocasiones, utilizar otros programas restringe al usuario en tanto que este solo
puede invocar las rutinas, pero no puede editarlas ni vericar o modicar el algoritmo
que est programado dentro de ellas. Adems, su forma de programar es similar a la
de lenguajes tradicionales de programacin como C++.
Debemos mencionar que esta es una version preliminar del libro, aunque el mismo ya
se encuentra registrado ante la Direccin Nacional de Derecho de Autor. Actualmente
el Grupo trabaja en la correccin del mismo. Cualquier comentario, correccin o
sugerencia por favor enviarla al correo electrnico grupogedem@yahoo.com.

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

Captulo 1

Conceptos Bsicos
Diego Corredor, Norman Maldonado1

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

MATLABr dispone de un cdigo bsico y de varios toolboxes 2 , o libreras especializadas en el manejo y solucin de problemas especcos, como por ejemplo, ecuaciones
diferenciales parciales, optimizacin restringida o en ms de dos dimensiones, series
de tiempo, variables simblicas, distribuciones de probabilidad, etc. Estos toolboxes
1

Favor enviar correcciones, comentarios o sugerencias a grupogedem@yahoo.com


Los toolboxes son paquetes de herramientas adicionales que el usuario tiene la posibilidad de
adquirir individualmente segn sus necesidades particulares.
2

GEDEM - Versin Preliminar

son un conjunto de funciones compatibles con el cdigo bsico, y estn diseadas


para resolver problemas complejos que el programa inicialmente no puede solucionar
3.
Existen dos tipos de toolboxes: por un lado se encuentran los toolboxes diseados
por el grupo creador de 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 pgina web de
Mathworks Inc. 4 ). En este libro nos centramos en el cdigo bsico del programa y
en un toolbox de distribucin gratuita denominado CompEcon5 aplicado a economa
y nanzas.

1.2. Ventanas de Matlab


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

1.2.1. Command Window


Esta ventana se encuentra ubicada en la parte derecha de la pantalla, y en ella
son digitados y ejecutados, simultneamente, los comandos del programa. En esta
ventana tambin se muestran los resultados de todas las operaciones, tanto las de
MATLABr bsico como las de los toolboxes. La ventana de comandos trabaja de la
siguiente forma: en la ltima lnea que inicia con el smbolo () se digita la instruccin, y sta es ejecutada al presionar la tecla `Enter'; luego de ello, en esta misma
ventana, son visualizados los resultados del procedimiento.
Por ejemplo si le decimos

1 + 5
al programa que realice la siguiente operacin:
; primero debemos digitar:
2
3

Dado que no est preprogramado para hacerlo.


La pgina web de The Mathworks Inc. es www.mathworks.com
5
Desarrollado por Paul Fackler y Mario Miranda, profesores de North Carolina State University y Ohio State University, respectivamente. Este toolbox se encuentra disponible en la direccin
www4.ncsu.edu/~pfackler/compecon/download.html y fue desarrollado como complemento del libro Fackler y Miranda (2003)
6
El usuario puede cambiar la disposicin de las ventanas en el men de la barra de herramientas
view desktop layout. La Figura 1.1 corresponde a la opcin Default de este men.
4

CONCEPTOS BSICOS

Figura 1.1: Conjunto Inicial de Ventanas

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

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

1.2.2.

Launch Pad

Esta ventana se encuentra ubicada en la esquina superior izquierda de la aplicacin.


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

GEDEM - Versin Preliminar

Figura 1.2: Command Window o Ventana de Comandos

Figura 1.3: Launch Pad


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

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

Dado que

MATLABr trabaja

con matrices, la especicacin del tamao de la variable es

CONCEPTOS BSICOS

Figura 1.4: Workspace


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

1.2.4.

Command History

Se encuentra ubicada en la parte inferior izquierda de la ventana principal y como su


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

Figura 1.5: Command History


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

GEDEM - Versin Preliminar

1.2.5. Current Directory


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

Figura 1.6: Current Directory


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

1.3. M-File Editor


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

CONCEPTOS BSICOS

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

Figura 1.7: Editor de M-Files


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

Figura 1.8: Comentarios con %


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

GEDEM - Versin Preliminar

se enumera cada rengln o lnea en la parte izquierda de la pantalla. Al generarse un


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

%Para calcular (a+b)/c, tenemos que:


% Valor de a
a=1;
% Valor de b, es decir raz cuadrada de cinco.
b=sqrt(5);
% Valor de c
c=2;
% Operamos
(a+b)/c
Un M-File, puede ejecutarse de cuatro formas distintas, (en todas ellas el M-File
se guarda automticamente antes de ser ejecutado): primero, presionando la tecla
F5; segundo, seleccionando Debug Run en la parte superior del Editor de MFiles; tercero, haciendo click sobre el cono , en la ventana del editor; y cuarto,
9

Cuando no se ha guardado el archivo, al lado de esta ubicacin aparece el smbolo  * , y una


vez guardado, ste desaparece.

CONCEPTOS BSICOS

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


Los resultados de la ejecucin del programa o M-File que se mostr en la Figura 1.8,
aparecen en la Ventana de Comandos de la Figura 1.9.

Figura 1.9: Ventana de Comandos y Resultados


Cuando hay un error en el M-le. El programa dice en que lnea y en que columna se
presenta este error. Para corregirlo, se puede ir al M-File haciendo doble click sobre
el link que aparece en la Ventana de Comandos y luego de ello realizar la correccin.
Hay dos aspectos del programa que se pueden precisar a partir de la gura 1.9:
Aunque en la Ventana de Comandos solo aparece el valor 1.6180, ste no es
el nico clculo que el programa ha realizado. Si observamos el Workspace,
vemos que las variables a, b y c han sido creados. Lo que ocurre es que el
programa ejecuta todas las lneas, pero solo muestra en la Ventana de Comandos los resultados de aquellas lneas que NO terminan en ;. As, cuando se
corren programas que crean matrices muy grandes o realizan clculos extensos,
utilizar ; al nal de cada instruccin permite que el programa slo ejecute
las instrucciones sin gastar tiempo en mostrar clculos parciales o intermedios
(Siempre, mostrar los resultados parciales es computacionalmente ineciente).
Despus de observar la salida es posible ejecutar el M-le varias veces y sigue
apareciendo el resultado anterior en la Ventana de Comandos 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 - Versin Preliminar


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

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

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

x1 , x2 =

b2 4ac
2a

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

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

CONCEPTOS BSICOS

11

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

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

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

1.4. Procesos iterativos


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

12

GEDEM - Versin Preliminar

dos los nmeros a la derecha de la igualdad y dejar solo la variable x a la izquierda,


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

(1) Iteracin

(2) x

(3) x+5

1
2
3
4

-4
-3
-2
-1

1
2
3
4

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

4
4
4
4

Cuadro 1.1: Mtodo Numrico para hallar x


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

CONCEPTOS BSICOS

13

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

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

14

GEDEM - Versin Preliminar

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


es:

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

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

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

CONCEPTOS BSICOS

15

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

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

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

16

GEDEM - Versin Preliminar

a una solucin. En el primer caso, cuando x=[-4:1:-2], a pesar de realizar todas


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

1.5. Otros Conceptos Bsicos


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

??? Undefined function or variable pcb.


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

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

CONCEPTOS BSICOS

17

Figura 1.10: Path de Matlab

1.5.2.

Help y Doc

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

XLABEL X-axis label.


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

18

GEDEM - Versin Preliminar

ms adelante, que son las matrices dispersas.

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

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

% Programa para crear la Matriz A y el Vector B


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

% Esto ya no es seccin de Ayuda


no aparece en la salida porque se encuentra separada por un espacio del bloque de
lneas consecutivas que tienen el smbolo %. Las salida de 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 BSICOS

19

aparecen en esta ventana, se recomienda trabajar con helpwin rutina, cuando se


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

Figura 1.11: Help de pcb


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

1.5.3.

Objetos

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 necesariamente numricos). Estas cadenas tienen mltiples funciones, entre ellas colocar
ttulos o texto en grcas o modicar propiedades de otros objetos. Las funciones para cadenas de caracteres estn en el sub-directorio:

20

GEDEM - Versin Preliminar

Figura 1.12: Documentacin de clc

C:\MATLAB6p1\toolbox\matlab\strfun
Los caracteres de una cadena se almacenan en un vector, y cada caracter se
almacena en una de las posiciones del vector. Para introducirlas en 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 tamao 15
como un objeto de tipo char array (character array) que ocupa 10 bytes en
el Workspace11 .
En algunas ocasiones se requiere que algn texto dentro de la cadena de caracteres vaya entre comillas. Para ello, dichas comillas se representan por un
doble caracter comilla 0 0 . Por ejemplo, para crear la cadena  Eje `x' ,
se debe colocar la instruccin: 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 nmero de elementos. Cuando esto
no ocurre, es necesario completar con espacios las cadenas (las) ms cortas.
Algunos de los comandos que nos permiten trabajar con cadenas de caracteres
11

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

CONCEPTOS BSICOS

21

se presentan en el Cuadro 1.2.


Comando

Caractersticas

char(c1,c2,...)

Crea una matriz de caracteres a partir de las cadenas


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

deblank(c1)
c1==c2

int2str(a)
num2str(a,n)

str2double(c1)
c1=cellstr(C)

Cuadro 1.2: Algunos Comandos sobre Cadenas de caracteres

Estructuras.
Una estructura (struct) es una agrupacin de datos de diferente tipo bajo un
mismo nombre. Estos datos se llaman miembros (members) o campos (elds)12 .
Una estructura se dene en 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 cpita y la participacin
del consumo dentro del PIB del ao 2000 para algunos pases latinomaericanos (Colombia, Argentina, Brasil y Paraguay). Para ello, necesitamos crear el
12

Garca de Jaln (2001)

22

GEDEM - Versin Preliminar


campo Variable (PIB per cpita o participacin del consumo), y dentro de
este campo, denir otro para Pas. Para introducir los datos, se debe escribir
en 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:
pcon.col=67.93
pcon.arg=69.06
pcon.bra=65.75
pcon.pry=77.14

Variable pcon=Partic. Consumo en PIB


% col=Colombia
% arg=Argentina
% bra=Brasil
% pry=Paraguay

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


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

Figura 1.13: Estructuras pibp, pcon


Se observa en el Workspace que se han creado dos objetos tipo estructura
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 BSICOS

23

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

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

Cuadro 1.3: Algunos Comandos sobre Estructuras


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

pibp=struct(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 esperar que stas se puedan almacenar en matrices y vectores. Para ello, basta
con especicar la posicin que debe ocupar la estructura dentro de una matriz
o un vector. Por ejemplo, para crear las dos estructuras del ejemplo anterior
(PIB percpita y participacin del consumo para algunos pases de Latinoamrica, ao 2000) y colocar estas estructuras en un vector lat, que contega la
informacin de estas variables para algunos pases de Latinoamrica:

% Pib Percapita
pibp=struct(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 - Versin Preliminar

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

ans =
col:
arg:
bra:
pry:

5795.55
11729.08
7744.71
4801.30

mientras que en la segunda columna (lat(2)), contiene informacin sobre la


participacin del consumo:

ans =
col:
arg:
bra:
pry:

67.93
69.06
65.75
77.14

Vectores o matrices de celdas (cell arrays).


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

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


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

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

CONCEPTOS BSICOS

25

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


pueden introducir en cualquier posicin y MATLABr automticamente crea
objetos vacos en las posiciones en las que no se introdujo ningn elemento.
Algunos de los comandos para trabajar con cell arrays se observan en el Cuadro
.
Comando
cell(m,n)
celldisp(ca)
cellplot(ca)
iscell(ca)
num2cell()
cell2struct()
struct2cell()

Caractersticas
crea un cell array vaco de m las y n columnas.
muestra el contenido de todas las celdas de ca
muestra una representacin grca de las distintas celdas
indica si ca es un vector de celdas
convierte un array numrico en un cell array
convierte un cell array en una estructura.
convierte una estructura en un cell array.

Cuadro 1.4: Algunos Comandos para objetos Cell Array


Matrices dispersas.
Una matriz dispersa se caracteriza porque la mayora de los elementos que la
componen son ceros. Computacionalmente resulta ineciente almacenar en la
memoria tantos valores de ceros cuando la matriz es de gran tamao. MATLABr dispone
de rutinas que permiten tratar de manera especial estas matrices, con el proposito de tener mayor eciencia computacional en los clculos. Estas rutinas y
algunos ejemplos se presentan en detalle en el captulo 2.
Para terminar este captulo, debemos mencionar dos comandos que son fundamentales para la presentacin de resultados numricos y grcos en 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 forma pause, cualquier clculo posterior a esta instruccin se detiene indenidamente,
hasta que el usuario oprima alguna tecla.
El segundo comando es el comando format, cuya sintaxis es format opcion.
Este comando permite que el usuario de MATLABr disponga de varias opciones
de formatos en los que desea ver los resultados numricos. Algunos de ellos son
formato short (5 dgitos), long (15 dgitos) y bank (2 decimales)15 . El programa
utiliza por defecto el formato short. Algunas veces este ltimo formato utiliza
15

Las totalidad de opciones se pueden ver utilizando el help de format o consultando la documentacin.

26

GEDEM - Versin Preliminar

notacin cientca para satisfacer el requerimiento de colocar 5 dgitos Por ejemplo,


cuando se digita en la Ventana de Comandos el nmero 0.000015:

ans =

1.5000e-005

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

Parte I

LGEBRA LINEAL

27

Captulo 2

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

2.1. Matrices
Una matriz es un arreglo rectangular de elementos dispuestos en renglones (las) y
columnas.

a11 a12 ... a1n

a21 a22 ... a2n


.
..
..
..

.
.
.
.
.

am1 am2
29

...

amn

30

GEDEM - Versin Preliminar

El orden o tamao de una matriz se dene como el nmero de las y de columnas


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

Ejemplo 2.1. Generemos computacionalmente la matriz:


"
A23 =

1 3 9
7 5 4

Para introducir la matriz A debemos introducir los elementos as:

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

A=[1 3 9;7 5 4]

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


por defecto (ans de answer) que contiene la respuesta de la ltima operacin.
2
Una matriz de celdas o cell array es un arreglo cuyos elementos son cualquier tipo de variable,
por ejemplo, otras matrices, cadenas de caracteres, nmeros, etc.
1

MATRICES Y VECTORES

31

Para efectos prcticos, utilizaremos a lo largo de la mayora del libro la forma de


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

2.1.1.

Hipermatrices

Una extensin del concepto de matriz es el concepto de hipermatriz, denida como


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

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

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


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

MATLABr permite trabajar hipermatrices de cualquier dimensin.

32

GEDEM - Versin Preliminar

que se introduce corresponde a la primera de las dos matrices que conformarn la


hipermatriz C. De manera similar, en la segunda lnea se introduce la informacin
correspondiente a la segunda matriz que compone la hipermatriz C. Como resultado,
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 dimensin dim. Por ejemplo deniendo las matrices:

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


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

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

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

MATRICES Y VECTORES

33

Comando

Accin

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

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

permute(A)
ipermute(A)

Cuadro 2.1: Comandos para hipermatrices

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


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

A(:,:,1) =

5
7 6
5.5 6 5

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

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

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

ans = 2 3 4

34

GEDEM - Versin Preliminar

Sabemos tambin que la matriz A es una matriz de tres dimensiones (2 3 4).


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

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

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

"
B24 =

3 5 0 7
0 3 2 2

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

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

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

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

C(:,:,1) =

5 5.5
6
7
4
4
10
8

C(:,:,2) =

7
6
8
9
7
6
11 11

36

GEDEM - Versin Preliminar

C(:,:,3) =

6
5
10 11
10 9
7 10

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

2.1.2. Tipos de Matrices


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

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

Aunque tambin es posible con ([ ])


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

MATRICES Y VECTORES

37

Comando

Forma una matriz

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

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

randn(m,n,...)
magic(n)

* Este comando no genera hipermatrices; slo matrices cuadradas


** Slo para matrices cuadradas

Cuadro 2.2: Matrices generadas automticamente

mao, resulta computacionalmente ineciente almacenar una gran cantidad de entradas de ceros, no solo por lo dispendioso que puede resultar digitarlos, sino tambin por
el espacio en memoria que estos datos ocupan. Por esta razn, 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
3
9
0

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

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


hacer esta conversin utilizando la sintaxis sparse(D), de la cual obtenemos:

38

GEDEM - Versin Preliminar


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

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

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

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

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 posicin y el valor del elemento en esa posicin.
As, por ejemplo, en la la 2 (primer elemento del vector i) columna 1 (primer
elemento del vector j), est el elemento 3 (primera entrada vector s) y as sucesivamente. Para generar la matriz dispersa, hacemos que corresponda al tamao de D:
[m,n]=size(D) y, entonces, construimos la matriz dispersa:

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

40

GEDEM - Versin Preliminar

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

1
1
1
1
1
1

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

C = 9
0
0
0

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

Este resultado no es sorprendente: si observamos la matriz D y la comparamos con


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

All zero sparse: 3-by-2


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

MATRICES Y VECTORES

41

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

2.1.3.

Operaciones Bsicas entre Matrices

Para realizar operaciones bsicas entre dos matrices previamente denidas A y B y un


escalar n, es necesario indicar la operacin que queremos, ya sea mediante operadores
o por medio de funciones o comandos. En el Cuadro 2.4 encontramos las distintas
formas de hacer las operaciones bsicas.
Operacin

Comando o Funcin

Operador

Suma
Resta
Multiplicacin
Multiplicacin elemento a elemento*
Potenciacin
Potenciacin elemento a elemento*
Divisin izquierda
Divisin izquierda elemento a elemento*
Divisin derecha
Divisin derecha elemento a elemento*

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

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

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


de la matriz

Cuadro 2.4: Operaciones bsicas entre matrices

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


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

2 3 9

A = 7 5 3
8 5 8

5 4 9

B= 6
2
3
1 5 7

Paso 1. Introducimos las matrices en MATLABr :


A=[2 3 -9;7 -5 3;8 -5 8]

42

GEDEM - Versin Preliminar

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

Paso 2. Realizamos las operaciones invocando las rutinas pertinentes:


C=A+B
C = -3
7 -18
13
-3
6
7 -10
15
D=A*B
D =

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

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

4
9 81
49 25
9
64 25 64

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

MATRICES Y VECTORES

43

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

2.1.4.

Anlisis de una Matriz

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

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

Operador o Sintaxis del Comando

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

Cuadro 2.5: Comandos para analizar una matriz

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

44

GEDEM - Versin Preliminar

A23

1
3 2

= 7 5
4
3
6
4

Paso 1. Introducimos la matriz A en 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 =

h=trace(A)

MATRICES Y VECTORES

45

h =

i=size(A)
i = 3 3

j=ndims(A)
j =

k =

m =

1
-5
4

k=numel(A)

m=diag(A)

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

46

GEDEM - Versin Preliminar

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


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

2.1.5. Matrices Factorizables


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

Factorizacin LU: PA=LU


Dada una matriz cuadrada A, esta es factorizable si existe una matriz L triangular inferior, una matriz U triangular superior y una matriz de permutacin
P de manera que P A = LU . En 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 LU = P A. Debemos aclarar que no todas las matrices son factorizables: slo aquellas cuyo determinante
es diferente de cero.

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

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


Utilizamos entonces el comando chol:

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

Descomposicin en valores singulares


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

48

GEDEM - Versin Preliminar

T
Amn = Umm Smn Vnn

(2.1)

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

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

2.2.1. Anlisis de un vector


Magnitud de un vector
La magnitud o norma de un vector ~v se denota por k v k y se reere a la longitud
del vector. Su clculo est basado en el teorema de Pitgoras, 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:

k a k=

q
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 clculo de distancias: por ejemplo, para encontrar la distancia
d entre dos puntos en <3 , P1 = (a1 , a2 , a3 ) y P2 = (b1 , b2 , b3 ), la norma del vector

P1 P2 , nos proporciona el valor de la distancia, donde P1 P2 = P2 P1 , es decir,

MATRICES Y VECTORES

d=

49

(2.4)

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

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. Grcamente se


puede representar como la norma del vector p tal como se muestra en la Figura 2.2
La norma de una matriz A, es el mximo de sus valores singulares. Ahora bien, los
valores singulares de una matriz son los elementos de la diagonal de la matriz S que
resulta de descomponer la matriz original en un producto de tres matrices tal que:

50

GEDEM - Versin Preliminar

P1

z
1

P2
15

0
10
5

1
30

25

0
20

15

10

5
5

10
0

Figura 2.2: Distancia entre P1 y P2

A=U SVT
Por medio de la siguiente sintaxis se obtienen las tres matrices:

[U,S,V]=svd(A)
El comando svd calcula la descomposicin por valores singulares de la matriz A. Es
decir que es equivalente calcular la norma de la matriz o calcular el mximo de la
descomposicin de A.7

Direccin de un vector
La direccin de un vector est determinada por el ngulo entre el segmento de recta
que parte del origen (vector) y un eje del espacio en el que ste se encuentra. En
<2 , la direccin es el ngulo entre el segmento de recta y el eje x positivo8 . De esta
manera, para un vector l = [a, b] con a 6= 0, la direccin se calcula de la forma9 :
7

En otras palabras se cumple que: norm(A)=max(svd(A))


No obstante, para vectores en <3 y <n con n > 3, surge el problema de especicar con respecto
a qu eje est determinado el ngulo. Por esta razn, generalmente se calcula la direccin slo para
vectores en <2
9
Si a = 0,la direccin del vector depende del signo de b; cuando b > 0, la direccin es de 90o y
cuando b < 0 es de 270o
8

MATRICES Y VECTORES

51

tan =

b
a

= tan1

b
a

(2.6)

Es posible calcular la direccin utilizando la funcin atan que corresponde a la inversa


de la tangente, es as como para determinar la direccin del vector l se utiliza la
sintaxis atan( ab ), cuyo resultado es un ngulo denido en radianes.
Veamos, por ejemplo, la direccin que corresponde al vector u = (7, 5). As, introducimos en MATLABr la sintaxis para encontrar la magnitud del ngulo:

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

60
8
6

150

30
4
2

180

330

210

324.46

300

240
270

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

2.2.2.

Operaciones entre Vectores

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

52

GEDEM - Versin Preliminar

Producto Escalar
Dados dos vectores ~a = (a1 , a2 , ..., an ) y ~b = (b1 , b2 , ..., bn ) en <n , el producto escalar10 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 tamao).
El resultado del comando, si los vectores son vectores la, es equivalente a a*b, y
es igual a b*a si ambos son vectores columna.

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

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

(2.8)

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

Ejemplo 2.7. Determinemos el Producto Cruz de los vectores a y b en <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

Slo es aplicable para dos vectores en la misma dimensin, es decir, con el mismo nmero de
componentes.
11

MATLABr slo 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

z
11

18

25
0
2

20

4
6

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

cos =

~l ~e
k ~l kk ~e k

= cos1

~l ~e
k ~l kk ~e k

(2.9)

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


norma y el producto escalar, junto con la funcin trigonomtrica inversa del coseno
(acos) de la forma:

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

54

GEDEM - Versin Preliminar

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

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

proyb a =

ab
b
k b k2

(2.10)

de tal forma que proyb a es un vector paralelo a b y el vector a proyb a es ortogonal


a b. Veamos en el siguiente ejemplo el clculo de una proyeccin.

Ejemplo 2.8. Dados los vectores v = (1, 1) y u = (1, 2), encontrar proyb a
Paso 1. Introducimos los vectores en 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 proyeccin de v sobre u,

proy= 1.5000 1.5000

Esta respuesta es grcamente visible en la Figura 2.5 en la cual vemos como se


cumplen las dos condiciones entre los vectores y la proyeccin.

2.2.3. Matrices y Vectores


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

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

MATRICES Y VECTORES

55
Proyeccin de (u) en (v)

Ortogonalidad entre v y
u menos la proyeccion

1.5

1
Y

Diferencia entre u
y la proyeccion
0.5

Vector v
Vector u
Proyeccin

0.5
0.5

0.5

1.5

Figura 2.5: Proyeccin de a sobre b

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

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

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

5 7 4

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

Ver (Grossman 1996).

56

GEDEM - Versin Preliminar

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


M=orth(A)
M es, entonces, la matriz ortogonal a A:
M =
-0.3884
0.6588
0.6443

0.8375
0.5441
-0.0515

-0.3844
0.5196
-0.7631

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

s=M(:,1)
d=M(:,2)
f=M(:,3)
Ahora, veamos si los productos escalares cumplen con las caractersticas de una base
ortogonal:

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

MATRICES Y VECTORES

57

Recordemos que los nmeros u=1.3878e-016 y p=2.4286e-016 estn expresados


en notacin cientca y son muy cercanos a cero, comprobndose que el producto
escalar entre las columnas de A es cero y el producto escalar de cada una de las
columnas por ellas mismas es igual a uno: M es, por tanto, una matriz ortogonal.
Los dems resultados deben vericarse.

Matrices creadas a partir de Vectores


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

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

X = 1 2 3
1 2 3
1 2 3

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

Este comando sirve slo para vectores en <3 .

58

GEDEM - Versin Preliminar

Figura 2.6: a) nica Solucin b) No Existe Solucin c) Innitas soluciones


el producto cartesiano a partir de ms de tres vectores con el comando ndgrid, el
cual utilza la misma sintaxis que el comando meshgrid, por ejemplo:

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

2.3. Rectas y Planos


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

MATRICES Y VECTORES

59

sustancialmente.

2.3.1.

Rectas

Una recta es una sucesin innita de puntos en un espacio. Para establecer la ecuacin
de una recta en dos dimensiones necesitamos de un punto y la pendiente de la lnea
o, en ausencia de la pendiente, de dos puntos. En tres dimensiones, no obstante, para
hallar la ecuacin de la recta el concepto de pendiente se hace intil y precisamos de
un vector que describa una direccin denida de la recta.
Consideremos la Figura 2.7. Supongamos una recta r en n dimensiones que pasa por
los puntos P0 = (a, b, c, ..., n) y P = (x, y, z, ..., m). El vector que pasa por estos dos
puntos 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 dimensin


Introduciendo la ecuacin 2.11 en la ecuacin 2.12, obtenemos:

60

GEDEM - Versin Preliminar

P~ = P~0 + tv
Que es, simplemente:

a
b
c
..
.
n

+ t

d
e
f
..
.

x
y
z
..
.

(2.13)

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

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

xa
yb
zc
=
=
d
e
f

(2.14)

Esta representacin de la recta en la ecuacin 2.14 se llama ecuacin simtrica o


cartesiana. Aunque cambia la forma de la ecuacin, siguen apareciendo los mismos
componentes necesarios para la construccin de una recta: el vector posicin P~0 =
(a, b, c) y el vector director ~v = (d, e, f ), no obstante, ha desaparecido el parametro
t de la ecuacin.

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

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

MATRICES Y VECTORES

61

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

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


p0p1=p1-p0
p0p1=
14

-8

-8

-9

Como P0 P1 es el vector director de la recta, denimos la ecuacin de la recta de la


forma:
x = 5 + 14t
y = 6 8t
z = 8 8t w = 7 9t
Dado que P0 es un punto que pertenece a la recta.

2.3.2.

Planos

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

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

(2.16)

62

GEDEM - Versin Preliminar

~n
P
P0

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

dx + ey + f z = g

(2.17)

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


plano.

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

Paso 1. Introducimos los puntos en 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 ecuacin cartesiana

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

2.3.3.

Distancia entre un punto y un plano

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


0 tenemos la siguiente frmula:

D=

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

(2.18)

Veamos en el siguiente ejemplo cmo hallar computacionalmente la distancia entre


un punto y un plano.

64

GEDEM - Versin Preliminar

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


3x 7y + 4z + 1 = 0

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


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

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


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

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


d=k/m

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


d: 2.0925.

2.4. Valores y Vectores Propios


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

Am
~ = m
~

(2.19)

Para garantizar que m


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

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


~ de la ecuacin.

MATRICES Y VECTORES

65

p() = det(A I) = 0

(2.20)

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

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 cmo trabaja la rutina con
el siguiente ejemplo:

Ejemplo 2.13. Calculemos los vectores propios de la matriz

1 1 4

A = 3 2 1
2 1 1

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


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

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

[V,L]=eig(A)
As, el resultado de 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 slo una nica salida (B=eig(A)), esta corresponde
a un vector que contiene nicamente los valores propios de la matriz (matriz L).

66

GEDEM - Versin Preliminar

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

P roducto 1 P roducto 2 P roducto 3 P roducto 4 P roducto 5


U tilidad
22
28
15
20
12
Impuestos
2
8
1
0.5
2
Enero
4
5
8
3
9
F ebrero
9
8
2
2
6
M arzo
1
2
2
1
9
Abril
8
4
1
8
2
M ayo
8
8
9
5
2
Junio
10
21
9
11
6
Usando multiplicacin de matrices, encuentre una matriz 6 2 que contenga
en su primera columna la utilidad total y en la segunda columna los impuestos
totales durante cada uno de los meses.
2. Analice las propiedades de la matriz B (Ver cuadro 2.5) y con cada par de matrices aplique las operaciones de suma, resta, multiplicacin, divisin izquierda,
derecha y potenciacin.

2 6 5

4 5 6
9
0 3

a) A = 1 2 3
B=

8
4
2

0 1 2
6 12 7

"
#
1 2 3
10 3 9 5

b) A =
B= 4
5 6
2 6 4 3
2 6 7

16 16 5 15 20 3
3 3 4

c) A = 18 1 27 27 20 11
B= 0
1
1
5 18 20 1 1 27
4
3
4
3. A partir de la hipermatriz A del ejemplo 2.2, genere en MATLABr todas las
posibles matrices de tamao 2 2.

MATRICES Y VECTORES

67

4. Halle la norma y dena las caractersticas de cada par de vectores; halle el


ngulo entre ellos y calcule proyv u y proyu v
a) u = (3, 2) v = ( 35 , 25 )
b) u = (3, 5, 6) v = (4, 3, 2)

c) u = ( 2, 3, 5) v = ( 3 2, 55 , 0)
!

2 8
y el vector m = (2, 2)
5. Con la matriz L =
5 4
a) Halle la inversa de L
b) Multiplique el vector m por la inversa de L
c) Ahora aplique divisin derecha y divisin izquierda entre L y m. Trasponga si es necesario.
d) Qu se puede deducir de los puntos anteriores?
6. Sean u = (3, 1, 2) y v = (4, 2, x). Para qu valor de x Z + se cumple que u
y v sean ortogonales?.
7. Encuentre la distancia entre el punto (2, 3, 1) y el plano x + y + z = 5.
8. Encuentre la ecuacin paramtrica de la recta que pasa por los puntos P (1, 2, 3)
y Q = (0, 2, 8).
9. Halle los valores y vectores propios de la matriz

3
2 2

C = 3 1 3
1
2
0
A partir del resultado determine si sta matriz es Denida Positiva, Negativa
o Indenida. (Ver Mora (2001, pg. 38)).
10. Genere una matriz aleatoria de distribucin uniforme y una matriz cuyas las
y columnas sumen todas lo mismo, y con cada una:
a) Halle su polinomio caracterstico a travs de operaciones con matrices y
vectores en MATLABr .
b) Halle tambin los valores y vectores propios a travs de operaciones y
contrstelos luego con los resultados que da eig.

68

GEDEM - Versin Preliminar

Captulo 3

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

a11 x1 + a12 x2 + ... + a1n xn = b1


a21 x1 + a22 x2 + ... + a2n xn = b2
..
..
..
.
.
.
.
= ..

(3.1)

am1 x1 + am2 x2 + ... + amn xn = bm


Este conjunto de ecuaciones, llamado sistema de ecuaciones lineales, se puede expresar de forma matricial as:

a11
a21
..
.

a12
a22
..
.

...
...
..
.

a1n
a2n
..
.

am1 am2

...

amn

x1
x2
..
.
xn

b1
b2
..
.

(3.2)

bm

o, de manera equivalente:

A~x = ~b

(3.3)

donde A es la matriz de coecientes (las constantes que acompaan a las incgnitas


del sistema), ~x es el vector de variables, y ~b el vector de resultados. La solucin al
sistema, conocida como vector solucin, es un vector columna que contiene los valores
de las incgnitas que satisfacen todas las ecuaciones1 .
1

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

69

70

GEDEM - Versin Preliminar

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

3.1. Mtodos Directos o Analticos


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

M =

a11
a21
..
.

a12
a22
..
.

...
...
..
.

a1n
a2n
..
.

b1
b2
..
.

am1 am2

...

amn bm

(3.4)

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

SISTEMAS DE ECUACIONES

71

comando rrefmovie que muestra paso a paso la reduccin de la matriz ampliada


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

Ejemplo 3.1. Solucionemos el siguiente sistema de ecuaciones:


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

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


sistema y, luego, construimos la matriz ampliada M1.

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

Paso 2. Utilizamos rref:


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

S1 =
1
0

0
1

-2
5

Ejemplo 3.2. Solucionemos el siguiente sistema de ecuaciones singulares:


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

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


sistema y, luego, construimos la matriz ampliada M2.

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


b2=[2;8;20]
M2=[A2 b2]

72

GEDEM - Versin Preliminar

Paso 2. Utilizamos rref:


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

S2 =
1
0
0

0
1
0

-6
11
0

-4
10
0

Ejemplo 3.3. Resolvamos el siguiente sistema de ecuaciones singulares:


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

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


sistema y, luego, construimos la matriz ampliada M3.

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


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

Paso 2. Utilizamos rref:


S3=rref(M3)
El resultado de 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 solucin:

S3 =
1
0
0

0
1
0

2.2
-0.2
0

0
0
1

SISTEMAS DE ECUACIONES

73

Ejemplo 3.4. Solucionemos el siguiente sistema homogneo:


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

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


sistema, y luego construimos la matriz ampliada M4:

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


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

Paso 2. Utilizamos rref:


S4=rref(M4)

La solucin al sistema es x = y = z = 0, recordemos que en los sistemas homogneos


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

S4 =
1
0
0

3.1.2.

0
1
0

0
0
1

0
0
0

Mtodo de la Inversa

Este mtodo utiliza la inversa de la matriz de coecientes A y el vector de resultados


b de un sistema Ax = b, equivalente al sistema 3.2, con el objetivo de encontrar el
vector solucin x que satisface el sistema, resolviendo la operacin:

x = A1 b

(3.5)

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


analtica puede llegar a ser un proceso muy complejo. MATLABr permite calcular
la inversa mediante el comando inv, cuya sintaxis es C=inv(A).

74

GEDEM - Versin Preliminar

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


dada por:

x = Cb

(3.6)

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


inversa:

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

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

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


b=[6;3;2]

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


C=inv(A1)

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


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

x =
-1
1.6667
2.6667

3.1.3. Regla de Cramer


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

SISTEMAS DE ECUACIONES

75

columnas de la matriz de coecientes formando matrices transformadas y calculando


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

x=

b1 a12
b2 a22
.
.
bm am2

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

a11 a12
a21 a22
.
.
am1 am2

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

,y=

a11 b1
a21 b2
.
.
am1 bm

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

a11 a12
a21 a22
.
.
am1 am2

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

,..., n =

a11 a12
a21 a22
.
.
am1 am2

... b1
... b2
... .
... bm

a11 a12
a21 a22
.
.
am1 am2

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

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


Paso 1. Introducimos la matriz de coecientes, calculamos su determinante y luego,
introducimos el vector de resultados:

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


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

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


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

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


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

76

GEDEM - Versin Preliminar

x=
-1
y=
1.6667
z=
2.6667

3.1.4. Factorizacin de Crout o LU


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

LU x = b

(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 sustitucin hacia atrs, si reemplazamos la ecuacin 3.8 en la
ecuacin 3.7 obtenemos el sistema:

Ux = y

(3.9)

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

x = U 1 y

(3.10)

MATLABr proporciona un comando que encuentra las matrices pertinentes a la


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

SISTEMAS DE ECUACIONES

77

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

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

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


[L,U]=lu(A)

Paso 3. Hallamos el valor de y :


y=inv(L)*b

Paso 4. Hallamos el valor de x:


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

L=
0.2500
0.7500
1.0000

1.0000
1.0000
0

1.0000
0
0

4.0000
0
0

2.0000
0.5000
0

1.0000
0.2500
1.5000

U=

y=
2.0000
1.5000

78

GEDEM - Versin Preliminar

4.0000
x=
-1.0000
1.6667
2.6667

3.1.5. Factorizacin de Cholesky


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

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

(3.11)

Al resolver este sistema por sustitucin hacia atrs, obtenemos:

UT y = b

(3.12)

Ux = b

(3.13)

luego, por sustitucin hacia atrs:

Para solucionar un sistema de ecuaciones mediante la factorizacin de Cholesky,


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

Ejemplo 3.8. Solucionemos el siguiente sistema por Factorizacin de Cholesky


9x + 2y + 4z = 0
6x + 3y + 3z = 0
5x + 4z = 0
3

Esta matriz debe ser simtrica y denida positiva para que el sistema tenga solucin. En caso que
la matriz no tenga esta caracterstica recomendamos solucionar el sistema a travs de la factorizacin
LU.

SISTEMAS DE ECUACIONES

79

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


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

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


U=chol(A)

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


y=inv(U)*b

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


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

U=
3.0000
0
0

0.6667
1.5986
0

1.3333
1.3206
0.6916

y=
0
0
0
x=
0
0
0

3.2. Mtodos Indirectos o Numricos


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

80

GEDEM - Versin Preliminar

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

Qx = (Q A)x + b

(3.14)

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


como:

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


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

x
k
1. kx kx

kk

(k) (k1)

m
2. xm x
, donde xm = M ax{xi } y es un nmero determinado por el
(k)
xm
investigador que, comnmente, es mayor o igual a 10. La precisin es mayor en
cuanto tenga valores ms altos.
Nuestro objetivo es presentar dos mtodos iterativos para solucionar sistemas de
ecuaciones lineales: Gauss-Jacobi y Gauss-Seidel.

3.2.1. Matrices Dbilmente Condicionadas


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

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

SISTEMAS DE ECUACIONES

81

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

3.2.2.

Gauss-Jacobi

El mtodo de Gauss-Jacobi5 , muy til cuando A es dispersa, resuelve el sistema


de ecuaciones de la forma Ax = b, slo si la matriz de coecientes A es diagonal
dominante6 . Para hacerlo, utiliza una matriz de descomposicin Q que debe ser
diagonal7 y cuyos elementos corresponden a los de la diagonal principal de A. La
regla de iteracin para este mtodo es:

Qxk (Q A)x(k1) + b
Esta ecuacin es una transformacin de la regla de iteracin general denida por la
ecuacin 3.14. 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 iteracin esta determinada por la matriz de descomposicin, la
distancia es entonces el cociente entre la ecuacin lineal igualada a cero y la matriz
de descomposicin. Despus, denimos el valor de x como la suma entre el valor
inicial y la distancia encontrada, es decir, el programa va acercando el valor inicial
de x a la solucin del problema, utilizando una serie de operaciones repetidas que se
valen de la matriz de descomposicin como parmetro de convergencia. El nmero de
operaciones est limitado por la rapidez a la que la norma del vector x se acerque
5

Para observar la deduccin matemtica del mtodo y su regla de iteracin, recomendamos ver
el apndice de este captulo.
6
Una matriz diagonal dominante es aquella en la cual todos los elementos de la diagonal son
mayores al resto de los elementos de la matriz, es decir cumple:
|Aii | >

n
X

|Aij |i

i=1
i6=j

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

82

GEDEM - Versin Preliminar

a un nmero positivo, muy cercano a cero8 .


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

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


la programacin del mtodo de Gauss-Jacobi:

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

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


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

A=[2 0 1;1 2 0;0 0.5 8];


b=[5;1.345;8.76];
x=[0;0;0];

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


Q=diag(A)

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


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

for it=1:1600
dx=(b-A*x)./Q
x=x+dx
if norm(dx)<tol,break,end
end
Aqu it=1:n determina el nmero de veces que se repite esta operacin, que va de
1 hasta n. En este ejemplo tomamos n = 1600, para saber cul es el nmero de veces
que iter el programa, digitamos it y luego enter.
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 solucin en la cual b Ax = 0.

SISTEMAS DE ECUACIONES

83

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

1.9432
-0.2991
1.1137

3.2.3.

Gauss-Seidel

La iteracin de Gauss-Seidel9 establece la matriz de descomposicin Q como la parte


triangular inferior de A incluyendo los elementos de la diagonal. La regla de iteracin
para este mtodo es:

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

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


es diagonal dominante y dispersa:

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

Para observar la deduccin matemtica del mtodo y su regla de iteracin vea el apndice
matemtico de este captulo.

84

GEDEM - Versin Preliminar

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


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

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


inferior:

Q=tril(A);

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

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

7.0000
-15.5000
0.2500

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

SISTEMAS DE ECUACIONES

85

27

7
5.5
1

25
2
17.5

A =

5.5 2 27.5 11

1
17.5 11 47.5

b =

1
1
1
1

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

Qd = 200 5p

(3.15)

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


de una funcin de la forma:

Qo = 100 + 5p

(3.16)

Utilice un mtodo directo y un mtodo numrico para hallar el precio y la


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

86

GEDEM - Versin Preliminar


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

Figura 3.1: Modelo de vas


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

SISTEMAS DE ECUACIONES

87

cada una de las seis etapas de produccin de alimentos Compra a Proveedores,


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

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

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

3.3.1.

Gauss-Jacobi

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

Qxk = (Q A)x(k1) + b

(3.17)

si denimos una matriz R = (Q A), la ecuacin 3.17 se reexpresa como:

Qxk = Rx(k1) + b

(3.18)

88

GEDEM - Versin Preliminar

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

(k)

qij xj

j=1

n
X

(k1)

rij xj

+ bi

(3.19)

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 trmino no nulo de la sumatoria es aquel
que contiene el elemento diagonal qii, que es precisamente aii. Mas an, debido a
que los elementos de la diagonal de R son cero, podemos eliminar el trmino i = j
de la sumatoria del segundo miembro, lo que dejara la ecuacin 3.19 de la forma:
(k)
aii xi

n
X

(k1)

aij xj

+ bi

(3.20)

j=1
j6=i

de donde, despejando xi k , obtenemos:

xi (k) = (bi

n
X

(k1)

aij xj

)/aii

(3.21)

j=1
j6=i

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

x1 = (b1 a21 x2 a31 x3 ... an1 xn )/a11


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

SISTEMAS DE ECUACIONES

3.3.2.

89

Gauss-Seidel

Tal como en el caso anterior, denimos la matriz R = Q A, de manera que la


ecuacin 3.14 se reescribe de la forma:

Qxk = Rx(k1) + b

(3.22)

Donde un elemento cualquiera, i, del vector Qxk esta determinado por la ecuacin:
n
X

(k)
aij xj

j=1

n
X

(k1)

aij xj

(3.23)

+ bi

j=1

Si tenemos en cuenta la composicin de las matrices Q y R, todos los sumandos para


los que j > i en la parte izquierda de 3.23 son nulos, mientras que en la parte derecha
son nulos todos los sumandos para los que j < i. Planteamos entonces:
i
X

(k)
aij xj

j=1
(k)
aii xi

n
X

(k1)

aij xj

+ bi

(3.24)

j=i+1
i1
X

(k)
aij xj

n
X

j=1

(k1)

aij xj

+ bi

(3.25)

)/aii

(3.26)

j=i+1

de donde, despejando xi k , obtenemos:


(k)

xi

= (bi

i1
X

(k)

aij xj

j=1

n
X

(k1)

aij xj

j=i+1

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

3.3.3.

Mtodo de Richardson

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

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

(3.27)

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

90

GEDEM - Versin Preliminar

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

(3.28)

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

= bi

n
X
i=1

(k1)

aij xj

(3.29)

Parte II

CLCULO

91

Captulo 4

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

94

GEDEM - Versin Preliminar

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

4.1. Funciones de una Variable


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

4.1.1. Visualizacin de funciones de una variable


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

Paso 1. Crear la funcin. Una funcin 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 funcin. Por otro lado, se puede utilizar el comando inline,
que permite crear cadenas de caracteres con las que se puede representar la
forma funcional.

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

FUNCIONES

95

los que se quiere visualizar la imagen de la funcin. Adems, utilizando la


funcin que creamos en el Paso 1, generamos numricamente las imgenes
de la funcin en el dominio.

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

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

96

GEDEM - Versin Preliminar

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

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

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

x=[-2:0.1:5];
y=f(x);
El vector x contiene valores entre -2 y 5, separados entre s en 0.1 unidades (-2, -1.9,
-1.8,..., 4.9, 5), y el vector y contiene las imgenes de la funcin en este intervalo1 .
Luego de crear los datos, MATLABr nos permite dibujar la funcin por medio de la
sintaxis plot(x,y).
Como resultado, y aadiendo algunas caractersticas adicionales que explicaremos
ms adelante, MATLABr muestra el grco de la Figura 4.1 en una nueva ventana
de guras (Figure Window). Veamos a continuacin otro ejemplo, en el cual la funcin
1

Para crear las imgenes con un m-file de la forma function f=ffej0(x,a); f=a*x, se
introducen los inputs en el orden especicado en el m-file, es decir, y=ffej0(x,a). Utilizando
una funcin de la forma f=inline(a*x), en el momento de utilizarla para crear las imgenes
es necesario introducir los inputs en orden alfabtico, es decir y=f(a,x).

FUNCIONES

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

30

f(x)

20

10

10

20
2

Figura 4.1: Funcin Cbica


presenta discontinuidades.

Ejemplo 4.1. Gracar f (x) =

4
(x1)2

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

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


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

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

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


x=[0.8:0.01:1.25];
y=ffej1(x);

% Conjunto de Salida o Dominio


% Conjunto de Llegada o Rango

En caso de utilizar la funcin inline f, slo se debe modicar la segunda


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

Paso 3. Gracar la funcin.


plot(x,y,r+-)

98

GEDEM - Versin Preliminar

Como resultado se obtiene una grca de la funcin de color rojo (r), con lnea
segmentada (-) y con marcadores (+) en cada punto. Aadiendo algunas caractersticas al grco, obtenemos la Figura 4.2. Observemos que esta funcin presenta
una discontinuidad cuando x = 1. En este valor de x, la funcin 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 posicin 21 del vector y, la funcin toma el
valor de inf.
f(x) = 4/(x1)2

x 10
4

3.5

f(x)

2.5

1.5

0.5

0
0.8

0.85

0.9

0.95

1.05

1.1

1.15

1.2

1.25

Figura 4.2: Funcin Discontinua en x=1

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

Ejemplo 4.2. Gracar f (x) =

4
(x1)2

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

Paso 1. Crear la funcin. Usamos la funcin creada en el m-file ffej1:


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

FUNCIONES

99

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


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

Paso 3. Gracar la funcin.


plot(x,y, o-)

f(x) = 4/(x1)2

x 10

16

14

12

f(x)

10

0
0.8

0.85

0.9

0.95

1.05

1.1

1.15

1.2

1.25

Figura 4.3: Ejemplo 4.2


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

4.1.2.

Opciones adicionales para los grcos

Hemos observado que las diferentes grcas que han aparecido a lo largo del captulo
tienen ciertas caractersticas en los ejes, ciertas fuentes para los ttulos, determinados
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 lnea continua (-) y ningn marcador.

100

GEDEM - Versin Preliminar

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

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

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

Ver Cuadro 1.2.

FUNCIONES

101

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

view(az,el): especica la rotacin de un grco en tres dimensiones para


observar la gura desde un ngulo distinto. En su sintaxis, az representa el
acimut (azimuth en ingls) o ngulo horizontal de rotacin, y el es el ngulo
de elevacin vertical (medidos en grados).
El comando view(2), genera la vista de la gura en dos dimensiones sobre
el plano cartesiano, con un acimut de 0, y una elevacin de 90 , mientras que
view(3) genera una vista con un acimut de -37.5 y una elevacin de 30. Para
observar el ngulo en el cual se est viendo una gura se utiliza la sintaxis
[az,el]=view, y 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 nmero de las en que se divide la ventana,
c el nmero de columnas e i es el nmero de la subventana que quedar activa,

102

GEDEM - Versin Preliminar


es decir, la subventana en donde se gracarn las instrucciones inmediatamente
posteriores.

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

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

FUNCIONES

103

indica el tamao del marcador. markeredgecolor asigna el color del borde


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

4.2. Funciones de dos variables


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

4.2.1.

Visualizacin de Funciones de dos variables

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

Paso 1. Crear la funcin fej(X,Y).


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

Como se estableci en el Captulo 2, los vectores los denotamos con minsculas mientras que
las matrices con maysculas.

104

GEDEM - Versin Preliminar

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


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

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

0.9

0.8
1
0.7
0.8

0.6

f(x,y)

0.6

0.5

0.4

0.2
0.4
0
1
0.3

0.9
0.8

1
0.7

0.2

0.9
0.6

0.8
0.7

0.5
0.6

0.4
0.1

0.5
0.3

0.4
0.3

0.2
0.2

0.1

0
0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

0.1
0

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 instruccin meshgrid5 cuya sintaxis es:
5

Ver Captulo 2

FUNCIONES

105

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

Z=fej(X,Y)

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


comandos para gracar una funcin de dos variables:

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

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


la lnea generada por la segunda columna

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


y as sucesivamente hasta la lnea generada por la columna n

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


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

106

GEDEM - Versin Preliminar


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

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

contour: Dibuja un nmero n de curvas de nivel en el espacio R2


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

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


R.

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


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

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

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

FUNCIONES

107

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

Z=ffej3(X,Y);

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

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

108

GEDEM - Versin Preliminar


Mesh

40

40

30

30

f(x,y)

f(x,y)

Plot3

20

10
20

20

10
20
20

15

10
5

Surf

Contour3 (n=20)

40

40

30

30

f(x,y)

f(x,y)

15

10

10
5

20

15

15

10

20

10
20

20

10
20
20

15

20

15

15

10
5

15

10

10

10
5

Figura 4.5: Comandos para gracar funciones de dos variables

4.2.2. Opciones adicionales para los grcos


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

hot: Blanco, negro, amarillo y rojo


flag: Rojo, blanco, azul y negro.
cool: Ail y magenta.
autumn: Rojo y amarillo
summer: Verde y amarillo.
winter: Azul y verde.
6

Es posible construr numricamente colormaps personalizados. Esto se puede consultar en la


documentacin o en la ayuda de este comando.

FUNCIONES

109

Adems, colorbar introduce una barra de colores que permite ver, segn el mapa
de colores que se aplique, el color correspondiente a cada valor de la funcin, es decir,
a cada valor del eje z o eje vertical. Con los siguientes ejemplos se ilustrarn estas
opciones.

Ejemplo 4.4. Gracar la funcin 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 funcin en un m-file llamado ffej4.


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

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


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

Paso 3. Gracar la funcin.


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

Para una mayor explicacin de estos smbolos, consultar ?).


Recordemos que una funcin f (x, y) es creciente en su dominio S si para todo (x, y) S , los
elementos del gradiente (pendiente) son positivos.
8

110

GEDEM - Versin Preliminar


x,y [90,90]

x 10
10

x 10

10
6
8
6
4

f(x,y)

4
2
2
0
2
0
4
6
2
80
60

80

40

60
20

40

20

0
0

20
20

40

40

60

60
80

80

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

x 10

x 10

10
4

f(x,y)

f(x,y)

5
0
5

2
0
2
50

50

50

50

0
50

50

50

50

x,y [50,50]

x,y [30,30]

x 10

x 10

3
15
2

f(x,y)

10
5

5
50
50
0

20

20
0

0
20

50

50

20

Figura 4.7: Distintos conjuntos de salida


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

112

GEDEM - Versin Preliminar

dominios con menor escala (intervalos de x e y ms pequeos) se observa que la


funcin tiene una zona decreciente alrededor del punto (x, y) = (10, 10).

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


[30,30] R.

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


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

Paso 2. Crear los datos.


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

Paso 3. Gracar la funcin.


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

FUNCIONES

113

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

Contour3, n = 30

Contour, Clabel, n=8

71

642.85

57
1
12
8.

14
.57
28
1 385.7143

642

20

.8571

0
20

30
30

20

20

10

30
30

20
0

0
20

600
800
10

20

30

10

20

20

00
2

20

600

800
600

400

10

30

Contourf

0
40 2

10

20

30

20

10

20

40 2
0 00
10

20

10

00

800

00

400

800
600

Contour, Clabel
30

642.8571

20

14

20

7
128.5

10
1000

43

500

.71

642.8571
.7143
385
71
4

14

8.5

5.7

10

1
2

38

500

f(x,y)

20

5
38

1000

30

30

30
30

20

10

10

Figura 4.8: Punto de Silla

El resultado es la Figura 4.8. Para este grco denimos un nuevo mapa


de colores con el comando colormap(winter). Se utiliz contour junto
con clabel para gracar 8 curvas de nivel calculadas por MATLABr , con
su respectiva etiqueta (indicando el valor de ). Estos comandos tambin
se utilizaron para gracar curvas de nivel predeterminadas (-800 -600 -400
-200 200 400 600 800). La instruccin contourf grac otras curvas de
nivel diferentes (-800 -150 0 150 800), sin etiquetas, pero rellenando sus
contornos del mismo color de las curvas9 .

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

114

GEDEM - Versin Preliminar

4.3. Simulaciones en funciones de una variable


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

f(x) = x0.7

0.6

0.3

0.5

0.25

0.4

0.2

f(x)

0.35

f(x)

0.7

0.3

0.15

0.2

0.1

0.1

0.05

0
0

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

0.2

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

0.2

Figura 4.9: Simulacin de una funcin de una variable


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

FUNCIONES

115

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

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


x=[0:0.0025:0.2];
a=[0.1 0.4 0.6 0.9];
n=length(a);
for i=1:n;
y(i,:)=ffej6(x,a(i));
end

% Conjunto de salida
% Valores del Parmetro
% Numero de valores del parametro

% Crear n conjuntos de llegada

Se crearon n conjuntos de llegada o rangos, donde n es el nmero de valores


que toma el parmetro (length(a)).

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


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

116

GEDEM - Versin 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.5

f(x)

f(x)

0.6

0.4

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.05

0.1

0.15

0.2

f(x) = xa, a = 0.6

f(x) = xa, a = 0.9

0.4

0.25

0.35
0.2
0.3

f(x)

f(x)

0.25
0.2

0.15

0.1

0.15
0.1

0.05
0.05
0

0
0

0.05

0.1

0.15

0.2

0.05

0.1

0.15

0.2

Figura 4.10: Ejemplo 4.6


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

Ejemplo 4.7. Simular el parmetro a en f (x) = asen(x)


Paso 1. Crear la funcin. En un m-file:
function f=ffej7(x,a);
f=a.^(sin(x));

FUNCIONES

117

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


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

% Eje vertical

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

Paso 3. Simular el parmetro a:


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

Como resultado MATLABr graca secuencialmente la simulacin de la funcin para


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

118

GEDEM - Versin Preliminar


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

f(x)

f(x)

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


10

10

10
5

10

15

20

25

10

25

10

10
10

20

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


10

f(x)

f(x)

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


10

15

15

20

25

10

15

20

25

Figura 4.11: Ejemplo 4.7


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

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

% Valores de x
% Valores del parametro
% Dominio
% Rango, Imagenes

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

FUNCIONES

119

ts=title([f(x) = ,t, a \in [,num2str(min(a)),...


,,num2str(max(a)),]]);
set(ts,Fontsize,18,Fontweight,Bold);
set([xs ys zs],FontSize,14,Fontweight,Bold);
f(x) = asin(x)

a [0,4]

3.5

2.5

1.5

0.5

0
10
8

6
4

2
0

2
4

6
8
0

f(x)

10

Figura 4.12: Ejemplo 4.8


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

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


a = {0.1, 0.4, 0.7, 1}

120

GEDEM - Versin Preliminar


f(x) = asin(x)

a [0,4]

f(x)

0
10

Figura 4.13: Ejemplo 4.8

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


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

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


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

% Conjuntos de llegada

Paso 3. Gracar la simulacin.


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

FUNCIONES

121

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

f(x) = eax

a = [0.1 0.4 0.7 1]

a = 0.1
a = 0.4
a = 0.7
a=1

0.9

0.8

0.7

f(x)

0.6

0.5

0.4

0.3

0.2

0.1

0
0

10

12

14

16

18

20

Figura 4.14: Ejemplo 4.9


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

4.4. Simulaciones en funciones de dos variables


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

122

GEDEM - Versin Preliminar

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

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


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

Paso 1. Crear la funcin con el parmetro a.


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

Paso 2. Crear los datos.


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

% Conjunto de Salida
% Valores del parametro

% n Conjuntos de Llegada

Para guardar las n matrices Z se utilizaron cell-arrays. Debido a que todos


los conjuntos de llegada son del mismo tamao, tambin era posible utilizar
hipermatrices (Z(:,:,i)).

Paso 3. Gracar la funcin


% Parametros
fst=14;
%
fsej=12;
%
fw=demi; %
fn=Times; %

de fuente
Tamao de fuente para el titulo
Tamao de fuente para ejes
Grosor de letra
Tipo de letra

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

FUNCIONES

123

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

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

10

1.15
1.1

f(x,y)

f(x,y)

8
6
4
2

1.05
1
0.95

0
2

0.9
2
2

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

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

10

f(x,y)

f(x,y)

8
1.5

6
4
2

0.5
2

0
2
2
1

0
2

0
2

1
2

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

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


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

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

124

GEDEM - Versin Preliminar

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

Paso 2. Crear los datos.


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

Paso 3. Gracar la funcin


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

4.5. Anlisis de Funciones econmicas


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

FUNCIONES

125
3

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

2000

1000

1000

500

f(x,y)

f(x,y)

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

0
1000

0
500

2000
5

1000
5
5
0

5
0

0
5

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

2000

2000

1000

1000

f(x,y)

f(x,y)

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

0
1000

0
1000

2000
5

2000
5
5
0

0
5

5
0

0
5

Figura 4.16: Simulacin del parmetro a en f (x, y) = x3 ax2 y + 6xy 2 y 3


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

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


en el parmetro a.

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


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

126

GEDEM - Versin Preliminar

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


toman valores no negativos.

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

Paso 3. Simular el parmetro a y gracar la funcin


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

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


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

Ejemplo 4.13. Simulacin de la Funcin CES


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

FUNCIONES

127
CobbDouglas, a = 0.4

10

10

f(x,y)

f(x,y)

CobbDouglas, a = 0.2

6
4
2

6
4
2

0
10

0
10
10
5

10
5

5
0

CobbDouglas, a = 0.8

10

10

f(x,y)

f(x,y)

CobbDouglas, a = 0.6

6
4
2

6
4
2

0
10

0
10
10
5

5
0

10
5

5
0

Figura 4.17: Funcin Cobb-Douglas

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

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

Paso 3. Simular el parmetro p y gracar la funcin


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

128

GEDEM - Versin Preliminar

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

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

Ver Nicholson (1997, pg. 214).

FUNCIONES

129
Funcion CES = 100

Minimo

10

f(x,y)

0
10

2
10
1

5
0

0
0

Funcion CES = 0.01

CobbDouglas

30

x 10

9
15

f(x,y)

7
10

5
4
3

0
10

2
10
1

5
0

Figura 4.18: Funcin CES


1. Graque en MATLABr las siguientes funciones denidas en R. Utilice como
conjunto de salida intervalos en donde la funcin presente cambios en su comportamiento:

f (x) = |x|

2x 3 si x < 2

g(x) = x 5 2 x 1

3 x x > 1
h(x) = [[x]] = n si n x < n + 1
y 2 2y 2 + 5y
y 0.5 2y + 4

0 si z 3
g(z) =
1 si z > 3
f (y) =

f (x) =

x
(x 1)(x + 2)

nZ

130

GEDEM - Versin Preliminar


Funcion CES = 1

Lineal
9

20

8
7
6

10

f(x,y)

15

5
4
3

0
10

2
10
1

5
0

Funcion CES = 100

Maximo

f(x,y)

9
10

0
10

2
10
1

5
0

Figura 4.19: Funcin CES


2. Graque en MATLABr las siguientes funciones denidas en R2 . Utilice como
conjunto de salida intervalos en donde la funcin presente cambios en su comportamiento:

x+y
y
g(x, y) = 2
x 1
h(z, w) = max{min{2z, 3w}, {3z, 2w}}
f (x, y) =

z(m, n) = |m3 n3 |
p(x, y) = [[x + y]] = n si n x + y < n + 1

nZ

g (h, z)

3. Para la funcin f :

R+

ax2 + bx c
R con f (x) =
dx + 5e

0.4

Simule los parmetros a, b, c secuencialmente en R2 ; para el parmetro


simulado, asuma valores en el intervalo [3, 3] y para los otros parmetros
asuma el valor de 1.

FUNCIONES

131

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

+ 1

1 + < 1

(4.1)

donde [0, 1] es la velocidad de ajuste de las expectativas, y representa la


relacin entre la tasa de inters y la demanda de dinero ( < 0).

+ 1

Graque la funcin f (, ) =
1 +
Graque en R2 los valores de y que generan hiperinacin en el modelo
de Cagan. Interprete.
2

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

132

GEDEM - Versin Preliminar

7. La funcin de elasticidad constante recibe este nombre, porque su elasticidad


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

CRRA : U (ct ) =

ct

Ln(c )
t

> 0, 6= 1

=1


1
CARA : U (ct ) =
ec

>0

En estas funciones, el Coeciente de Aversin Absoluta al Riesgo est dado por


00 (c )
00
t
UU 0 (c
, y el de Aversin Relativa al Riesgo por UU 0(c(ctt)c) t . Para cada funcin:
t)
a) Calcule matemticamente 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 funcin de distribucin y de distribucin acumulada de las siguientes distribuciones de probabilidad12 :
a) Univariada Uniforme en el intervalo [a,b]
b) Univariada Normal con = [2 1 0 1 2] y varianza = [0.2 0.5 1 2]
(simulacin)
c) Univariada de Laplace simulando y .
d) Bivariada Normal con media 0 y varianza 1
11
12

Monsalve (2005a), Blanchard (1989)


Ver ?).

FUNCIONES

133

10. La funcin de produccin de una empresa que tiene como insumos capital (K) y
trabajo (L). Si se ha estimado que la empresa tiene una funcin de produccin

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

134

GEDEM - Versin Preliminar

Captulo 5

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

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

f 0 (x) = lm

(5.1)

Donde f 0 (x) es la derivada de la funcin f . Dado un intervalo I < y una funcin


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 ms all de la primera se considera
derivada de orden superior y su existencia est sujeta al nmero de veces que pueda
ser diferenciada la funcin.
Para solucionar computacionalmente problemas que comprendan derivacin, la si135

136

GEDEM - Versin Preliminar

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

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


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

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

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


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

5.1. Derivacin de primer orden


5.1.1.

polyder

La siguiente es la forma de un polinomio:

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

(5.2)

Donde c es una constante que acompaa la variable x y el subndice indica la posicin


en la que se encuentra respecto a la variable. Para derivar un polinomio, 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 derivacin. As, la derivada del polinomio (5.2) es:

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

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

Nombre del Captulo

137

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

Paso 2: Ahora, invocamos a la rutina polyder


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

Mtodo de Diferencia Finita


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

f 0 (x) =

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

(5.3)

Donde O() es una funcin que prescribe el error entre la derivada y la aproximacin
numrica, conocido como Error de Truncamiento. Esta funcin depende, en este
caso, de h1 (h 0) y, por esto se considera de orden 1. Mediante la construccin
de un polinomio de Taylor de orden 2 y exigiendo que f sea tres veces diferenciable,
obtenemos un resultado con una aproximacin ms exacta a la derivada:
1

Ntese que el coeciente que acompaa a x2 es cero.


Por sus caractersticas, polyder slo permite derivar en una sola dimensin, es decir, con
respecto a una sola variable.
2

138

GEDEM - Versin Preliminar

f 0 (x) =

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

(5.4)

En este caso, el error de truncamiento es de segundo orden - h2 . Muchas de las


rutinas utilizadas por MATLABr para encontrar derivadas se basan en el mtodo
de diferencia nita por su facilidad de clculo, veamos entonces los comandos ms
comunes para la aproximacin de derivadas numricas (Mantilla 2004).

5.1.2.

gradient

El Gradiente de una funcin es un vector que contiene sus primeras derivadas y, de


este modo, al evaluar la norma del gradiente, la direccin del vector nos seala si la
funcin crece o decrece. As, para cualquier vector de variables ~x = x1 , x2 , . . . , xn , el
gradiente de la funcin f = f (~x) que depende de n variables corresponde a:

f =

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

!
(5.5)

MATLABr obtiene numricamente el gradiente de una funcin hasta cierto nmero


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

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


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

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


3

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

Nombre del Captulo

139

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

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


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

Paso 3: Calcular el gradiente numrico de la funcin mediante


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

600

400

200

200

f(x)=x
f(x)=4x3

400

600
5

0
X

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

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

140

GEDEM - Versin Preliminar

Paso 1: Escribir un M-le ej3.m


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

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


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

Paso 3: Invocar el comando gradient


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

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

Nombre del Captulo

5.1.3.

141

diff

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

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

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


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

Paso 2: Invocar el comando di


F1=diff(x.^(5/2))/h
3

La respuesta F1 es una aproximacin numrica a 52 x 2 : la derivada de la funcin


5
f (x) = x 2 (La norma del vector F1 es 68, lo que implica que es una funcin 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.5

2.5
x

3.5

4.5

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

142

GEDEM - Versin Preliminar

Al igual que gradient, la rutina diff es extendible a casos de derivacin con ms


variables. En el siguiente ejemplo observamos cmo realizar la derivacin numrica
de una funcin compuesta por dos variables.

Ejemplo 5.5. Encontremos la derivada numrica de la funcin f (x, y) = x0.5 y 0.8


Paso 1: Crear la funcin a derivar en un M-le:
function q=ej5(x,y);
f=x.^.5.*y.^.8;

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


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

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


ZX=diff(Z,1,2)/h
ZY=diff(Z,1,1)/h
En la sintaxis del comando, al especicar diff(Z,1,2) MATLABr encuentra para
Z (primer trmino) la primera derivada (el 1 de la mitad) manteniendo ja la segunda
variable (derivada parcial respecto a x) y, al especicar diff(Z,1,1), calcula la
primera derivada parcial de la funcin respecto a y (mantiene ja la primera variable).
El resultado que 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 generalizacin del gradiente al calcular, simultneamente, las derivadas parciales de varias funciones respecto a diferentes variables,
organizndolas en una matriz. Supongamos un conjunto de m ecuaciones con n variables:

Nombre del Captulo

143

y 1 = f1 (x1 , x2 , , xn )
y 2 = f2 (x1 , x2 , , xn )
..
..
.
.
y m = fm (x1 , x2 , , xn )
La matriz jacobiana J asociada al sistema anterior contiene, en cada una de sus las,
el gradiente de las funciones fi para todo i = 1, 2, . . . , m. Es decir,

J =

f1
f2
..
.

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

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

z1 = x2 + y 2
z2 = x3 + y 3
4

Estas rutinas pertenecen al toolbox COMPECON


Si por ejemplo se deseara calcular la derivada de la segunda ecuacin con respecto a la primer
variable el vector debera ser [1,2].
5

144

GEDEM - Versin Preliminar

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


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

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


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

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


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

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


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

Nombre del Captulo

145

qu variable y el punto de evaluacin, en fdjac slo se necesita denir el punto en


que se quiere calcular la jacobiana.

5.1.5.

Aplicacin: Una funcin de Produccin tipo Cobb-Douglas

El anlisis econmico de las empresas llev a muchos a estudiar la forma ms sencilla


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

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

(5.7)

Donde q es la cantidad producida por la rma, K es el capital (uso de mquinas),


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

146

GEDEM - Versin Preliminar

Q
5

3
f(K,L)
2

0
10
8

10
6

8
6

4
4

2
0

Figura 5.4: La funcin de produccin f (K, L) = K 3 L 3


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

P M gK =

q
K

P M gL =

q
L

(5.8)
1

De esta manera, retomando nuestra funcin de produccin f (K, L) = K 3 L 3 , el


anlisis de la contribucin de un factor lo hacemos mediante sus derivadas parciales respecto a capital o a trabajo. As, para hallar la derivada parcial invocamos
gradient cuando ya hemos creado la funcin:

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


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

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


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

Nombre del Captulo

147

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

Paso 3: Invocar el comando gradient:


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

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


Marginal del Trabajo.

5.2. Derivacin de orden superior


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

148

GEDEM - Versin Preliminar

aproximaciones bastante precisas de las derivadas e, incluso, de las funciones mismas


en puntos particulares6 . En esta seccin presentamos los cdigos con los que es posible hacer derivacin de orden superior en MATLABr y cuya utilidad est atada a
aplicaciones econmicas y a herramientas de gran utilidad para temas ms avanzados
en economa y otras ciencias.

5.2.1.

polyder

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

Ejemplo 5.7. Hallemos la segunda derivada del polinomio f (x) = 5x4 + 9x3 + 8x2 +
3x + 1. Analticamente, la primera derivada de f (x) es f 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 resultado que habamos hallado en la solucin analtica. Hay que resaltar que MATLABr
cuenta de derecha a izquierda a partir de x0 , es decir, el ltimo nmero en el vector
de respuestas es un escalar. La ventaja del uso de polyder radica en la facilidad
para hallar, en polinomios muy grandes, derivadas muy altas debido a la precisin
numrica de MATLABr y lo tedioso que signica hacer una gran cantidad de derivaciones.

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


de Taylor.

Nombre del Captulo

5.2.2.

149

gradient

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

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


4

las dos derivaciones correspondientes, la ltima analticamente es: f 00 (x) = 29 x 3 .

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


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

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


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

Paso 3: Calcular los gradientes numricos de la funcin mediante


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

Hf (
x) =

2f
x1
..
.
f
xn x1

..

f
x1 xn
..
.
2f

(5.9)

xn

La forma ms fcil de hallar la hessiana con gradient para, supongamos, una


funcin de dos variables es, tras haber invocado la rutina y haber obtenido los vectores
FX y FY que corresponden a las derivadas respecto a x e y respectivamente, se llama
al comando dos veces ms, pero esta vez introduciendo cada vez la matriz de imgenes

150

GEDEM - Versin Preliminar


2/3

2/3

Primera Derivada de f(x)=x

Segunda Derivada de f(x)=x

1.8

1.6

1.4

3
1.2
2
PX

PX2

1
1

0.8
0
0.6
1
0.4

0.2

0
10

0
x

10

4
10

0
x

10

Figura 5.6: Las dos primeras derivadas de f (x) = x 3


resultante de la primera derivacin. Veamos entonces el Ejemplo 5.9 para observar
el uso de gradient en funciones multivariadas:

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


f (x, y) = x2 + y 2 . Analticamente, tras hacer las sucesivas derivaciones, la matriz
corresponde a:

!
2 0
0 2
donde observamos que las derivadas cruzadas son iguales, algo caracterstico de la
hessiana.

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


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

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


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

Paso 3: Calcular el gradiente numrico de la funcin mediante


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

Nombre del Captulo

151

Paso 4: Invocar el comando gradient para hallar los componentes


de la matriz hessiana:
[PXX,PXY]=gradient(PX,1,1)
[PYX,PYY]=gradient(PY,1,1)
El resultado de 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 ms exteriores
para el caso de PXX y el de las las ms exteriores para el caso de PYY dieran de
2 sucede porque, al ser gradient un mtodo basado en diferencias, los resultados
de las esquinas no tienen otro trmino con el cual hacer diferencia y MATLABr
automticamente les asigna una aproximacin. Pero la la y la columna del centro
son concluyentes: el resultado de la derivacin, en ambos casos, es 2, como observamos
en las matrices (5.10). Si generalizamos el resultado para ms de cuatro elementos
a, por ejemplo, cien elementos, el resultado es mucho ms fuerte y la mayora de los
componentes de las matrices PXX y PYY sern 2.

PXX = 1
1
1
1
1

1.5
1.5
1.5
1.5
1.5

2
2
2
2
2

1.5
1.5
1.5
1.5
1.5

1
1
1
1
1

PYY =

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

(5.10)

En el caso de funciones univariadas, para calcular derivadas de ms all de segundo


orden, se replica el proceso de encontrar la segunda derivada: se determina la derivada inmediatamente anterior a aquella que deseamos encontrar. Veamos el siguiente
ejemplo para establecer numricamente cmo se halla la tercera derivada de una
funcin:
10

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


7

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

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


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

152

GEDEM - Versin Preliminar

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


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

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


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

PX3

Tercera Derivada Numerica


10

0
10

0
x

10

0
10

0
x

10

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

5.2.3.

diff

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

Nombre del Captulo

153
5

Ejemplo 5.11. Calculemos la segunda derivada del Ejemplo 5.4: f (x) = x 2 .


Paso 1: Crear la primera derivada de la funcin:
F1=diff(x.^(5/2))/h

Paso 2: Invocar nuevamente el comando:


F2=diff(F1)/h
5

La salida F2 es la segunda derivada numrica de la funcin x 2 que es una funcin


creciente (la norma del vector es 86.0233). Para examinar funciones multivariadas,
hay que especicar de qu orden y en qu dimensin es la derivada (o sea, si est
derivando respecto a x o a y ). En el Ejemplo 5.12 es evidente cmo es el uso de diff
en el caso de ms de una variable.

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


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

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


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

Paso 2: A partir de estas derivadas, encontrar las derivadas respecto


a cada variable:
ZXX=diff(Z,2,2)
ZYY=diff(Z,2,1)

Paso 3: Establecer las derivadas cruzadas:


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

154

GEDEM - Versin Preliminar

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

ZXX = 2
2
2
2
2

5.2.4.

2
2
2
2
2

2
2
2
2
2

2
2
2
2
2

2
2
2
2
2

PYY = 2
2
2
2
2

2
2
2
2
2

2
2
2
2
2

2
2
2
2
2

2
2
2
2
2

(5.11)

fdhess

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

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


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

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


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

Paso 2: Calcular la segunda derivada de la funcin mediante


fdhess:
H=fdhess(ej11,10,-9)

MATLABr muestra un resultado numrico que nos permite analizar la forma de


la funcin en el punto (10,-9): al observar la grca de la funcin en la Figura
7

Esta rutina pertenece al toolbox COMPECON.

Nombre del Captulo

155

5.8 vemos que, en el punto (10,-9), la funcin es creciente y, al cotejarla con la


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

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

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


punto (0,0)

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


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

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


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

156

GEDEM - Versin Preliminar

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

5.2.5. Expansin de Taylor


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

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

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

que es llamado desarrollo de la funcin con una Expansin de Taylor. El trmino


E(x, a, n) determina el error de la aproximacin a la funcin f (x). Cuando lm 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 funcin f (x) = 5x 3 32 y su aproximacin de grado tres


por polinomio de Taylor alrededor del punto x = 12.

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


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

Nombre del Captulo

157

Paso 2: En otro chero determinar el punto donde se aproxima y los


datos pertinentes de la funcin:
xa=[-2:0.1:18];
x=12*ones(size(xa));
X(1,:)=ej13(xa);

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


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

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


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

5.2.6.

Aplicacin: El Equilibrio en el Modelo de Cournot

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

158

GEDEM - Versin Preliminar


30
f(x)
Aproximacion
Punto x

20

10

10

f(x)20
30

40

50

60

70
2

10

12

14

16

18

x
2

Figura 5.10: La funcin f (x) = 5x 3 32 y su aproximacin de grado tres


Primero debemos establecer cul es el problema que quiere resolver cada una de las
rmas. La empresa i vende una cantidad qi y, dado que acepta el precio que tiene en
el mercado, recibe un total de pqi . Como tambin enfrenta costos, el benecio de la
rma i es la diferencia entre sus ingresos y sus costos,

= pqi c(qi )

(5.13)

donde es el benecio. En clculo, el valor de la variable que hace que la primera


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

qi2
(5.14)
2
Como el problema es maximizar la ecuacin (5.14), establezcamos la primera y la
segunda derivada de la funcin para la rma 1:
= (100 Q)qi

Paso 1: Escribir un M-le cournot.m

Nombre del Captulo

159

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

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


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

Paso 3: Invocar el comando gradient para las derivadas


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

160

GEDEM - Versin Preliminar


100

Funcion de mejor respuesta Firma 1

90

80

70

60

2 50
40

30

q*

Funcion de mejor respuesta Firma 2

20

10

10

20

30

q*1

40

50

60

70

80

90

100

Figura 5.11: El duopolio de Cournot

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

[i,j]=find(PX==0);
for n=1:length(i);
if QU(i(n),j(n))==QU(j(n),i(n))
l=i(n);
m=j(n);
else 0;
end
end
As, el equilibrio qi es l=q1 = 26 y m=q2 = 26, o sea, cada una de las rmas produce
una cantidad igual a 26 unidades. Este resultado es exactamente el mismo que aquel
que se logra si, en vez de analizar todo el problema a partir de la rma 1, trabajramos
con la rma 2. La diferencia radica en la variable de control de la rma en cuestin,
que sera entonces q2 y, de esa forma, al tomar el gradiente para la primera derivada,
aquella matriz que habra que examinar sera la segunda.

Nombre del Captulo

161

5.3. Ejercicios
1. Una empresa tiene unos costos en funcin de la cantidad de la forma c(q) =
5q + 15. Encuentre numricamente los costos marginales de la rma. Cunto
es su costo jo? Son estos costos marginales constantes? Si as lo son, Qu
tipo de rendimientos presenta esta empresa?
2. Encuentre numricamente la derivada de f (x) = 0.025x3.71 4x mediante diff
y graque el resultado en MATLABr .
1

3. Una empresa tiene la siguiente funcin de produccin: q = K 3 L 3


a) Graque este funcin en MATLABr .
b) Derive la funcin respecto al capital y al trabajo con gradient.
c) Encuentre todas las segundas derivadas.
d) Qu tipo de rendimientos presenta? Qu relacin tienen los coecientes
de la funcin con los rendimientos?
4. Tres rmas producen un bien homogneo. La curva de demanda agregada es
P (Q) = a q1 q2 q3 , donde qi es la cantidad producida por la rma i
(i = 1, 2, 3) y a > 0. Asuma que los costos de cada rma son cero.
a) Encuentre y graque en MATLABr las funciones de mejor respuesta de
cada rma.
b) Halle por mtodos numricos el equilibrio de Cournot de esta economa.
c) Que sucede si las rmas 1 y 2 se unen? Graque nuevamente y encuentre
el equilibrio.
5. En la Figura 5.10 la aproximacin da ciertos saltos alrededor de cero. Podra
explicar por qu la funcin tiene este comportamiento? Qu sucede en la
aproximacin cuando est alrededor de cero?
6. Es muy comn que las personas compren seguros, de forma que transeran
recursos de un estado bueno a un estado malo, cuando realmente los necesiten.
No obstante, para que este principio se cumpla, es necesario que el agente que
compre el seguro sea averso al riesgo y, para determinar esa aversin al riesgo,
se recurre a una medida conocida como Coeciente de Aversin al Riesgo de
Arrow-Pratt, que se dene como:

cu00 (c)
u0 (c)

162

GEDEM - Versin Preliminar


En otras palabras, el coeciente de aversin al riesgo depende de las primeras
dos derivadas de la utilidad. La siguiente funcin de utilidad es muy utilizada en
medicin de la aversin al riesgo y se llama la funcin de Aversin Constante
Relativa al Riesgo CRRA por sus siglas en ingls (Constant Relative Risk
Aversion):

c1
Si > 0, 6= 1
u(c) = 1
ln c
Si = 1
Si = 0.6, determine las dos primeras derivadas numricas de la funcin
CRRA, encuentre el coeciente de aversin al riesgo de Arrow-Pratt y graque en MATLABr . Qu puede establecer a partir de las grcas?

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

1
(c0 dT + I 0 dr + dG) dy
1 c0


dW
1
M dM

mr dr dy
LM =
M
P
M
W
my FFLL
2 P
IS =

(5.15)
(5.16)

representan el equilibrio de los mercados de bienes, monetario y de trabajo


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

Nombre del Captulo

163

exgena) son dy y dr. Suponiendo que las variables exgenas no cambian (dT =
dM = dW = 0) y que 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. Apndice
Otra forma de derivar en MATLABr es con el toolbox Symbolic que crea un
objeto simblico, es decir, una estructura de datos que almacena una representacin
caracterstica del smbolo. El comando syms permite construir variables y expresiones simblicas, de forma que, analticamente, se puedan hacer diferentes operaciones
matemticas con ellas. En el caso de las derivadas, la rutina que permite obtenerlas
es diff. Veamos entonces cmo se puede derivar con objetos simblicos.

Ejemplo 5.16. Derivemos la funcin f (x, y) = x3 mediante una expresin simblica


Paso 1: Denir la expresin simblica
syms x

Paso 2: Introducir la funcin a derivar


f=x^3

Paso 3: Invocar el comando di


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

Ejemplo 5.17. Derivemos c = 7 mediante una expresin simblica.


Paso 1: Denir la expresin simblica:
c=sym(7)

164

GEDEM - Versin Preliminar

Paso 2: Invocar el comando di:


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

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


mediante expresiones simblicas

Paso 1: Denir las expresiones simblicas


syms x y z

Paso 2: Introducir la funcin que queremos derivar


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

Paso 3: Invocar el comando di


diff(f,y)

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

Ejemplo 5.19. Hallemos la derivada de la matriz


"
A=

mx 5
m cos(x)
x sen(m) 3x + 5m

Paso 1: Denir las expresiones simblicas


syms m x

Paso 2: Introducir la matriz que queremos derivar


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

Paso 3: Invocar el comando di


diff(A)

Nombre del Captulo

165

El resultado de invocar diff es la derivada de la matriz A respecto a x, determinado


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

2 m
5 35
x

m sen(x)

sen(m)

(5.17)

De otro lado, tambin es posible hacer Expansiones de Taylor analticamente con


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

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


una Expansin de Taylor de tercer orden.

Paso 1: Denir la expresin simblica


syms x

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


y el punto de aproximacin:
F1=taylor((x^(3/5)-7*x),3,6)

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 Expansin de Taylor de tercer orden alrededor de 6 para f (x).

166

GEDEM - Versin Preliminar

Captulo 6

Integracin
Lida Quintero, Diego Corredor

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

Z
f 0 (x)dx = f (x)

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

168

GEDEM - Versin Preliminar


Directos
Algebraico
Indenida
(Antiderivada)

Sustitucin
Partes

Mtodos
de solucin

polyint

Computacional1
Syms int
Integracin

Directos
Algebraicos
(evaluados)

Sustitucin
Partes

Denida
Mtodos
(rea bajo la curva) de solucin

Regla del Trapecio

trapz

Regla de Simpson
Numricos
(computacional)

quad

quad8

Cuadratura Gaussiana
quadl

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

6.1. Integracin por Regla del Exponente


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

Z
xn dx =
1
2

Apndice de este captulo


Excepto cuando n = 1.

xn+1
+C
n+1

INTEGRACIN

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 restriccin de ser aplicable nicamente a polinomios de exponentes naturales (N).
Su sintaxis es:

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

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

(x4 8x2 + 3x)dx

Paso 1. Introducimos los coecientes del polinomio como vector


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

Paso 2. Utilizamos el comando polyint


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

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 estn dados por la siguiente funcin:

CM g(q) =

q3
+ 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 - Versin Preliminar

Paso 1. p=[1/3 0 2 5]; % Costo Marginal


Paso 2. CV=polyint(p) % Sintaxis con k=0
Obtenemos:
CV =

0.0833 0 1 5 0

Hemos hallado la funcin de costos variables CV (q) = 0.0833q 4 + q 2 + 5q por medio


de una antiderivada, es decir, integrando la funcin de costo marginal correspondiente.

6.2. Regla del Trapecio


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

y0=f(x0)
yn

yn1

y
a=x0

x1

x2

. . .

xn=b

Figura 6.1: Regla del Trapecio


En el intervalo [a, b] hay subdivisiones (nodos) de amplitud x, en donde se traza
una recta entre las imgenes consecutivas, formando un trapecio. De esta manera, el
4

Esta notacin no es la misma que utilizamos en los captulos anteriores, en los que x0 , x1 , . . . , xn
eran variables. Aqu los utilizamos para representar valores numricos de la variable x, siguiendo a
Draper (1979).

INTEGRACIN

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
a

"

n1

X
1
f (x)dx ' x (y0 + yn ) +
yi
2

i=1

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

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

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

Ejemplo 6.3. Vamos a calcular


Z

x4 (49 x2 )1/2 dx

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


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

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

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

MATLABr tiene predeterminado x = 1 (h=1).


con inline o en un M-file

172

GEDEM - Versin Preliminar

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


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

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


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

9
8
7

6
5
(q*,p*)

4
3
2
1
0
0

10

Figura 6.2: Excedente del Consumidor


Dado que p = 4 y q = 5 debemos hallar:

Z
0

q2

192
dq (4 5)
+ 4q + 3

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


q=[0:5];

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


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

11

INTEGRACIN

173

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


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

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

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

Paso 1. Sintaxis del comando.


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

Paso 2. Vector imagen:


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

Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderaciones w por el vector y:
in=w*y
El rea bajo la curva es 11447.90 que es el mismo resultado alcanzado con el
comando trapz con h=0.1. As podemos ver como, un aumento del nmero de
nodos en qnwtrap es equivalente a un h cada vez mas pequeo en el comando
trapz.
7

En la Regla del Trapecio, la ponderacin o peso del rea del primer y ltimo sub-intervalo
((x0 , x1 ) y (xn1 , xn )) es x
y es x para los dems.
2

174

GEDEM - Versin Preliminar

6.3. Regla de Simpson


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

y1
y0

y2

yn2

yn
yn1

y
a=x0

x1

x2

. . .

xn2

xn1

xn=b

Figura 6.3: Regla de Simpson


El rea de la primera parbola sera:

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

x
f (x)dx '
y0 + 4y1 + 2y2 + . . . + 2yn2 + 4yn1 + yn
3

que es la regla de Simpson para la integracin aproximada10 .


8

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

INTEGRACIN

175

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

Ejemplo 6.6. Determinar el rea bajo la curva, de


Z

1
1+x2

es decir, calcular:

dx

1 + x2

Paso 1. Debemos crear la funcin inline:


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

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


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

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

p=

q2
q+1

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

7.8875

q2
dq
(q + 1)

Paso 1. Debemos crear la funcin, en este caso lo haremos como expresin, directamente en la sintaxis de quad:
xpr=quad((q.^2)./(q+1),0,7.8875)
Entonces el excedente del productor es:
xpr = 25.4035
Otra forma de calcular integrales en 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 anlogos.

176

GEDEM - Versin Preliminar


Ejemplo 7.4

12

10

6
Excedente del Productor
4

0
0

10

12

Figura 6.4: Excedente del Productor

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

Paso 1. Utilizamos la sintaxis del comando:


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

Paso 2. Creamos el vector imagen:


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

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

6.4. Integrales Dobles


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

INTEGRACIN

177

d
c
a

Figura 6.5: Integracin Doble


Para evaluar una integral doble, primero se integra con respecto a una variable
(considerando la otra constante) y el resultado se integra luego con respecto a la
otra variable11 .

Z bZ

f (x, y)dydx
a

Es importante observar que el proceso se realiza de adentro hacia afuera; as, en la


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

ind=dblquad(f(x,y),a,b,c,d)
11

Ver (Monsalve 2005b).


La funcin puede ser denida como explicamos para el comando quad, es decir como expresin,
objeto inline o M-file.
12

178

GEDEM - Versin Preliminar

Ejemplo 6.9. Evaluar:


Z

3Z 2

(x + y)dxdy
1

Creamos la funcin y ejecutamos el comando dblquad, y sus respectivos intervalos13 :

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

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

Ejemplo 6.10. Evaluar:


Z

x3 + 2xy dydx

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


intervalos:

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

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

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

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

INTEGRACIN

179

a. Encuentre Precio y Cantidad de Equilibrio14


b. Encuentre Excedente del Consumidor y del Productor, utilizando:

Frmulas de rea triangular.


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

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


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 +


QD = 80

11 2
p1 p

y la demanda por

p3

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

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


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

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


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

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

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

180

GEDEM - Versin Preliminar

presenta en este captulo. Debido a la naturaleza de este ltimo tipo de problemas,


es necesario trabajar con expresiones simblicas. Para ello, como se explic en el
captulo anterior, 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:

x4 (49 x2 )1/2 dx

Primero creamos las variables simblicas y denimos la forma funcional:

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

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

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

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

eval(ans)
cuyo resultado es

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

Parte III

OPTIMIZACIN Y DINMICA

181

Captulo 7

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

Existen otros tipos de funciones. Se utiliza esta clasicacin por su utilidad para ubicar mximos
y mnimos.

183

184

GEDEM - Versin Preliminar

no son nuestro objeto de anlisis2 .


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

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

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

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

(7.1a)

Convexa:

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

(7.1b)

Cuasicncava: 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)

Adems, se dice que la funcin 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

Hf (~x) =

185

fx1 x1
fx2 x1
..
.

fx1 x2
fx2 x2
..
.

fxn x1

fxn x2

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

(7.2)

Matriz Hessiana Orlada

(~x) =
Hf

0
fx1
fx2
..
.

fx1
fx1 x1
fx2 x1
..
.

fx2
fx1 x2
fx2 x2
..
.

fxn

fxn x1

fxn x2

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

(7.3)

Curvas de Nivel y Conjuntos Contorno


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

f (~x) =

(7.4)

Adems, para cada nmero real se dene el Conjunto Contorno Superior


CS por la relacin:

CS = {~x S : f (~x) }

(7.5)

Similarmente, para cada nmero real se dene el Conjunto Contorno Inferior


CI por la relacin:

CI = {~x S : f (~x) }

7.1.2.

(7.6)

Criterios de clasicacin

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


Entonces se tiene que:

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


(estrictamente convexa).

186

GEDEM - Versin Preliminar

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


es cuasiconvexa (estrictamente cuasiconvexa).

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

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

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

Proposicin 7.6 (Funcin Cuasicncava - H ). Una condicin suciente para que


f (~x) sea cuasicncava es que (1)k Dk (~x) 0 para todo k = 1, . . . , n y todo ~x S ,
donde Dk es el menor principal dominante de orden k de la matriz Hessiana Orlada
.
H

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


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

Proposicin 7.8 (Funcin Cuasiconvexa - H ). Una condicin suciente para que


f (~x) sea cuasicncava es que Dk (~x) 0 para todo k = 1, . . . , n y todo ~x S , donde
.
Dk es el menor principal dominante de orden k de la matriz Hessiana Orlada H

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


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

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

Todos los mtodos llegan a la misma conclusin

CONCAVIDAD Y CONVEXIDAD

187

1. Grco. Consiste en visualizar grcamente la funcin y las deniciones 7.1,


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

Recurdese que la convexidad de un conjunto es un concepto diferente al de convexidad de una


funcin.
5
Por lo que sus limitaciones son las mismas.

188

GEDEM - Versin Preliminar

7.2. Funciones Univariadas


Una funcin univariada f (~x) se dene como una funcin cuyo dominio y rango estn
denidos en R1 . Una funcin univariada y sus derivadas pueden ser visualizadas
en R2 . Para analizar las deniciones 7.1 en una funcin univariada utilizaremos el
mtodo grco, las derivadas de la funcin6 y los conjuntos contorno.
1. Mtodo grco. Retomando conceptos del captulo 4, analizar grcamente una
funcin univariada en MATLABr requiere 3 pasos:

Paso 1. Crear la funcin. Esto se puede hacer creando un m-file que contenga la funcin o utilizando el comando inline.

Paso 2. Crear los datos de la variable x y de la funcin f (x).


Paso 3. Invocar la rutina plot para gracar.
2. Derivadas de la funcin. En MATLABr , podemos obtener informacin de la
segunda derivada de una funcin, de diferentes formas: calcular manualmente
fxx y gracarla, calcular el gradiente numrico de f y analizar su pendiente,
calcular sucesivamente gradientes numricos y por ltimo utilizar la funcin
fdhess o fhess de Compecon. En todos los mtodos puede ser til gracar
los resultados numricos.
3. Conjuntos Contorno. En funciones univariadas, las curvas de nivel son puntos
ubicados en la recta real. Podemos utilizar MATLABr para ver grcamente
las curvas de nivel y los conjuntos contorno.

Ejemplo 7.1. Analizar la concavidad y convexidad de la funcin f (x) = Ln(x) por


el mtodo grco.

Paso 1. Crear la funcin en un M-file llamado fej1, as:


function f=fej1;
f=log(x)

Paso 2. Crear los datos de la variable x y de la funcin f (x):


x=[1:0.02:15];
y=fej1(x);
% f(x)
6

El anlisis de estas derivadas corresponde, en el caso univariado, al anlisis 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

f(x)

1.5

P1

0.5

10

15

Figura 7.1: Mtodo grco

MATLABr arroja como resultado la Figura 7.1. Tomando los puntos P1 y P2 de la


grca, se observa que se cumple la denicin de funcin cncava en 7.1. Se observa
tambin que con culaquier par de puntos esta denicin se satisface. Por lo tanto
podemos decir que la funcin es cncava.

Ejemplo 7.2. Analizar la concavidad y convexidad de la funcin f (x) = x3 4x2 +


8 por el mtodo de derivadas (calculando el gradiente numrico y analizando su
pendiente).

Paso 1. Crear la funcion


f=inline(x.^3-4*x.^2+8)

Paso 2. Crear los datos

190

GEDEM - Versin Preliminar

h=0.01
% Amplitud de x y del gradiente
x=[-2:h:5];
y=f(x);

Paso 3. Calcular el gradiente numrico


fx=gradient(y,h)
Mediante la instruccin plot(x,y,x,fx) se pueden visualizar grcamente los
resultados, como en la Figura 7.2.
Gradiente Numrico

f(x) = x 4x + 8

40
f
fx
30

f(x)

20

10

10

20
2

Figura 7.2: Gradiente numrico


Como se mencion anteriormente, la segunda derivada fxx es la pendiente de la
funcin fx . Por esta razn, si la primera derivada de la funcin fx es creciente (o
decreciente) est indicando que la segunda derivada de f es positiva (o negativa) y
por lo tanto la funcin es convexa (o cncava).
En la gura 7.2 se observa que la primera derivada de la funcin f (es decir, fx ,
representada en el grco con fx) es decreciente (f es cncava) hasta un punto de
inexin p [1, 2]. Cmo determinar cul es ese punto?. Notemos que el punto de
inexin es el valor mnimo de fx , y que los valores numricos de x y de la primera
derivada de la funcin fueron guardados en las variables x y fx en MATLABr ,
respectivamente. Por tanto, para saber cul es aproximadamente el punto de inexin
basta con hallar el valor de x que corresponde al ms pequeo de todos los nmeros
contenidos en el vector fx, para lo cual podemos utilizar el comando min, as:

CONCAVIDAD Y CONVEXIDAD

[p,i]=min(fx)
pinf=[x(i) p]

191

% Mnimo de fx
% Punto de inflexion

La primera lnea encuentra el ms pequeo de todos los valores de la primera derivada


de f (fx ), guarda este valor en p y la posicin que ste valor ocupa dentro del vector
fx la guarda en i. La segunda lnea guarda en pinf el valor mnimo de la primera
derivada (p) y su correspondiente valor en x (x(i)). Este procedimiento arroja como
resultado:

pinf = 1.3300 -5.3332


El valor 1.333 (equivalente a 86 ) es el punto x en el que la funcin f (x) pasa de ser
cncava a ser convexa.

Ejemplo 7.3. Analizar la concavidad y convexidad de la funcin f (x) = x por el


mtodo de derivadas (analizando la segunda derivada de la funcin).

Paso 1. Crear la funcion


f=inline(sqrt(x))
fxx=inline(-0.25x^(-1.5)

Paso 2. Crear los datos


h=0.00001;
x=[0:h:2];
y=f(x);
y2=f2(x);

Paso 3. Gracar la funcin y su segunda derivada


plot(x,y)
hold on
plot(x,y2)
Para hacer el anlisis de la concavidad y convexidad de esta funcin, calculamos
la segunda derivada y la introducimos como otra funcin en el programa (y2). En
la Figura 7.3 observamos que la segunda derivada es decreciente, indicando que la
funcin es cncava.

x7 por
el mtodo de derivadas (calculando gradientes de la funcin sucesivamente).

Ejemplo 7.4. Analizar la concavidad y convexidad de la funcin f (x) =

192

GEDEM - Versin Preliminar


3.5

f=x

4.5

0.25x

1.5

fxx = 8.75x

2.5

3.15x

30

20

f(x)

10

10

20
f
fxx
30

0.5

1.5

2.5

3.5

Figura 7.3: Gradiente numrico

Paso1. Crear la funcin f y su segunda derivada fxx


f=inline(x.^3.5));

Paso2. Crear los datos


h=0.001;
x=[0.2:h:4]; y=f(x);

Paso3. Calcular el gradiente numrico


yxx=gradient(gradient(y,h),h)

Paso4. Gracar la funcin y su segunda derivada (calculada numricamente)


plot(x,y)
hold on
plot(x,yxx)
A partir de los conceptos vistos en el captulo 5, el comando gradient en el programa permite calcular numricamente la segunda derivada de la funcin como el
gradiente de la primera derivada. Gracando simultneamente esta segunda derivada
con la funcin, obtenemos la Figura 7.3. De esta gura sabemos la segunda derivada
fxx es positiva en el intervalo en que la funcin es convexa. Existe un punto de
inexin en el intervalo x = [2.5, 3.5] en donde la funcin pasa a ser cncava.

CONCAVIDAD Y CONVEXIDAD

193

El clculo de la segunda derivada numrica est almacenado en el vector yxx. El


punto de inexin es el valor de este vector ms cercano a cero7 y su posicin dentro
de ese vector.

ind=find(yxx>-10*h&yxx<10*h);
pinf=[x(ind);yxx(ind)];
En la primera lnea, el comando find encuentra la posicin de los valores del vector
yxx que son mayores que -0.01 (10 h), y menores que 0.01(10 h); este es el
criterio para determinar los valores sucientemente cercanos a cero.8
La segunda lnea almacena en el vector pinf los elementos de los vectores x y yxx
correspondientes a las posiciones del vector ind. De esta forma el vector pinf es:
pinf = 2.7780
-0.0032
Una de las ventajas que ofrece este mtodo es que el clculo de la segunda derivada es
numrico, por lo que no requiere que se introduzca explcitamente la forma funcional
de la segunda derivada.

Ejemplo 7.5. Analizar la concavidad y convexidad de la funcin f (x) =

x
2x2 +3

por

el mtodo de derivadas (utilizando fhess).

Paso 1. Crear la funcin f


f=inline(x./(2*x.^2+3));

Paso 2. Crear los datos


h=0.001;
x=[-2:h:2];
y=f(x);

Paso 3. Calcular la segunda derivada por medio de fhess


for i=1:length(x)
fxx(i)=fhess(f,[1,1],x(i));
end;
7

Se selecciona el ms cercano a cero porque el clculo del vector yxx es numrico, y por lo tanto
ninguno de sus componentes es exactamente igual a cero.
8
Aunque este valor puede ser menor, notemos que el elemento ms pequeo (en valor absoluto)
del vector yxx es 0.0032, por lo que si estableciramos un criterio menor (por ejemplo 0.001),
no encontraramos el punto de inexin.

194

GEDEM - Versin Preliminar

Paso 4. Gracar la funcin y su segunda derivada


plot(x,y)
hold on
plot(x,fxx)
Segunda Derivada Numrica

f(x) = x/(2x +3)

0.4
f
fxx
0.3

0.2

f(x)

0.1

0.1

0.2

0.3

0.4
2

1.5

0.5

0.5

1.5

Figura 7.4: Segunda derivada con fhess


La Figura 7.4 muestra que la segunda derivada es positiva en el intervalo en el que
la funcin es convexa hasta el punto de inexin x = 0, y a partir de all la funcin
se hace cncava y se segunda derivada negativa.

Ejemplo 7.6. Analizar la cuasiconcavidad y cuasiconvexidad de la funcin f (x) =


x2 por medio de sus conjuntos contorno.
Para ver grcamente la cuasiconcavidad o cuasiconvexidad de esta funcin, en primer lugar tenemos que trazar una curva de nivel de referencia, por ejemplo, tomemos
f = 9. Luego de ello trazamos otras dos curvas de nivel: una mayor (f = 16) y una
menor (f = 4). Por ltimo determinamos los conjuntos contorno. El conjunto contorno superior es aquel conjunto hacia el cual crecen las curvas de nivel, mientras
que el conjunto contorno inferior se ubica en aquella regin hacia la cual decrecen
las curvas de nivel. Grcamente, se tiene la Figura 7.5.
A partir de la curva de nivel de referencia f = 9, el conjunto contorno superior
corresponde al conjunto [5, 3] [3, 5]9 , porque en esta direccin estn las curvas
9

Siendo rigurosos, el conjunto contorno superior en este caso corresponde a [, 3] [3, ].

CONCAVIDAD Y CONVEXIDAD

195
2

f(x) = x
25

20

y=16

f(x)

15

10
y=9

5
y=4

0
5

Figura 7.5: Conjuntos Contorno de f (x) = x2


de nivel de mayor valor (f = 16). Este conjunto est sealado en la grca con el
marcador  o . El conjunto contorno inferior, donde se ubican las curvas de nivel de
menor valor (f = 4), corresponde al conjunto [3, 3], y est sealado en la grca
con el marcador  * . De estos dos conjuntos, solo el conjunto contorno inferior es
convexo, por lo cual podemos concluir que la funcin es cuasiconvexa.

Ejemplo 7.7. Analizar la cuasiconcavidad y cuasiconvexidad f (x) = x3 4x2 + 6


por medio de sus conjuntos contorno.
De nuevo, tenemos que jar tres curvas de nivel: una de referencia (f = 1) y dos
que se ubican por encima (f = 4) y por debajo (f = 2) de la curva de nivel de
referencia. Luego de ello, sealamos grcamente los conjuntos contorno superior (o)
e inferior(*) y determinamos cul de estos dos conjuntos es convexo.
El conjunto contorno inferior, donde se ubican las curvas de nivel de menor valor
(f = 2), est sealado con  *  y corresponde al conjunto [1.5, 1][1.38, 3.61]10 .
El conjunto contorno superior, donde se ubican las curvas de nivel de mayor valor
Hemos asumido el conjunto [5, 3] [3, 5] para ilustrar el ejemplo de manera precisa en la grca.
10
Ver nota 7

196

GEDEM - Versin Preliminar


3

f(x) = x 4x + 6
8

y=4

f(x)

2
y=1

y=2
2

6
1

Figura 7.6: Conjuntos Contorno


(f = 4), est sealado con  o  y corresponde al conjunto [1, 1.38] [3.61, 4.2].
Ninguno de estos dos conjuntos es convexo, por lo que la funcin no es cuasicncava
y tampoco es cuasiconvexa.
De aqu en adelante asumiremos como convencin que el mtodo de anlisis de derivadas corresponde al clculo numrico de la segunda derivada mediante las rutinas
fhess y fdhess.

7.3. Funciones con dos variables (Bivariadas)


Una funcin de dos variables (o bivariada) f (x, y) se dene como una funcin cuyo
dominio est denido en R2 . Numricamente, la segunda derivada de una funcin de
una variable es un vector que en cada posicin contiene un escalar. En funciones de
dos variables, cada componente de ese vector es una matriz hessiana (ver ecuacin
7.2). Esto implica que se debe extraer los menores principales y los valores propios
de cada matriz hessiana (hessiana orlada) para poder concluir sobre la concavidad o
convexidad (cuasiconcavidad o cuasiconvexidad) de la funcin (ver Sydsaeter (1996)
y Mora (2001)).

CONCAVIDAD Y CONVEXIDAD

197

Para determinar la concavidad y convexidad utilizaremos el mtodo grco y el


clculo numrico de la matriz Hessiana, mientras que para cuasiconcavidad y cuasiconvexidad utilizaremos el mtodo grco, la matriz hessiana orlada y los conjuntos
contorno.

Ejemplo 7.8. Analizar la convexidad y concavidad de f (x, y) = x2 + y 2 + (x + y)2


por el mtodo grco.
Sabemos que la funcin f (x, y) es convexa si:
A

z
}|
{ z
}|
{
f (P1 + (1 )P2 ) f (P1 ) + (1 )f (P2 )

(7.7)

y cncava si
A

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 combinacin


lineal de los puntos P1 y P2 , y la parte B es la combinacin lineal de las imgenes.
Para analizar la concavidad y convexidad de cualquier funcin por este mtodo visualizamos las partes A y B de las ecuaciones 7.7 y 7.8 en la grca de la funcin.
En nuestro ejemplo:

Paso 1. Crear la funcin en un M-file llamado fej1:


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

Paso 2. Crear los datos:


x=[-100:10:100];y=x;
[X,Y]=meshgrid(x,y);
F=fej8(X,Y);

Paso 3. Gracar
mesh(X,Y,F)
Como se observa en la Figura 7.7, se aadi una lnea continua y una discontinua
que representan las partes A y B de las ecuaciones 7.7 y 7.8, respectivamente.
Observamos que para estos dos puntos la lnea continua est por debajo de la lnea
discontinua, lo cual implica que AB, es decir, que la denicin de funcin convexa

198

GEDEM - Versin Preliminar

f(x,y)=x2+y2+(x+y)2
4

x 10
6
5

P1

P2

f(x,y)

4
3
2
1
0
100
100

50

50
0

0
50

50
100

100

Figura 7.7: Mtodo Grco - Concavidad y Convexidad


se cumple para estos dos puntos. Adems se observa que esto ocurre para cualquier
pareja de puntos del dominio de la funcin. Por esta razn podemos concluir que la
funcin es convexa estricta.

Ejemplo 7.9. Analizar la cuasiconvexidad y cuasiconcavidad de f (x, y) = x2 + y 2 +


(x + y)2 por el mtodo grco.
Sabemos que la funcin f (x, y) es cuasiconvexa si:
A

B0

}|
{ z
}|
{
z
f (P1 + (1 )P2 ) M ax{f (P1 ), f (P2 )}

(7.9)

y cuasicncava 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 combinacin lineal de los


puntos P1 y P2 , la parte B0 es la imagen ms pequea y la parte B00 es la imagen
ms grande. Para analizar la cuasiconvexidad y cuasiconcavidad de cualquier funcin
por este mtodo visualizamos las partes A, B0 y B00 de las ecuaciones 7.9 y 7.10 en
la grca de la funcin.

CONCAVIDAD Y CONVEXIDAD

199

f(x,y)=x2+y2+(x+y)2
4

x 10
6

P2

f(x,y)

4
3

P1

2
1
0
100
100

50

50
0

0
50

50
100

100

Figura 7.8: Mtodo Grco - Cuasiconcavidad y Cuasiconvexidad


En la gura 7.8 se observa que todos los puntos de la lnea continua (parte A de la
denicin 7.9) son ms pequeos o iguales al punto P2 (parte B de la denicin 7.9).
Como esto ocurre para cualquier par de puntos podemos concluir que la funcin es
cuasiconvexa.

Ejemplo 7.10. Analizar la convexidad y concavidad de la funcin f (x, y) = x0.5 y 0.5


Paso 1. Crear la funcin en un M-file llamado fej9:
function f=fej9(v);
y=v(2);
x=v(1);
f=(x.^0.5).*(y.^0.5);;

Paso 2. Crear los datos. Se crean los datos para el conjunto de salida en los vectores x e y, y el producto cartesiano entre ellos utilizando la instruccin
meshgrid. Adems, es necesario almacenar en un vector p todas las parejas ordenadas de la forma (x, y) en las que se va a calcular numricamente
la matriz hessiana. Esto se hace con la ltima instruccin11 .

x=[0.1:10:100.1];
y=x;
11

Para una explicacin de la sintaxis X(:) para una matriz X, ver el captulo 2

200

GEDEM - Versin Preliminar

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

Paso 3. Calcular la matriz Hessiana y determinar si es denida, semidenida o indenida. Con operaciones matriciales podemos calcular los menores principales dominantes y arbitrarios de la matriz hessiana, y con el comando det
podemos hallar el determinante de estas submatrices. Tambin podemos hallar los valores propios de la matriz Hessiana con el comando eig. A partir
de estos clculos podemos establecer si la matriz hessiana, calculada en un
punto, es denida positiva o negativa, o semidenida positiva o negativa.
Repitiendo el proceso en m puntos y teniendo en cuenta las proposiciones
7.4 y 7.5 podemos concluir sobre concavidad o convexidad.

for m=1:length(p);
H=fdhess(fej9,p(:,m));
vp(1:2,m)=eig(H);
end
Una vez calculamos la matriz hessiana de la funcin en un punto, podemos
repetir el proceso para un conjunto nito de puntos y luego utilizar alguno
de los criterios denidos anteriormente con el n de determinar si la funcin
es cncava (estricta) o convexa (estricta). Por ejemplo, con operaciones matriciales podemos calcular los menores principales dominantes y arbitrarios de
la matriz hessiana, y con el comando det podemos hallar el determinante de
estas submatrices. Tambin podemos hallar los valores propios de la matriz
Hessiana con el comando eig. A partir de estos clculos podemos establecer
si la matriz hessiana, calculada en un punto, es denida positiva o negativa, o
semidenida positiva o negativa. Repitiendo el proceso en m puntos y teniendo
en cuenta las proposiciones podemos concluir sobre concavidad o convexidad.
Siguiendo nuestro ejemplo, comencemos por calcular en 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 funcin en un M-file llamado fej72.

CONCAVIDAD Y CONVEXIDAD

201

function f=fej72(v);
y=v(2);
x=v(1);
f=x.^2+y.^2+(x+y).^2;
Ntese que la funcin recibe como input un vector v (y no dos variables
separadas x,y ), el cual contiene, en su primera posicin, el valor de la
variable x y en la segunda posicin el valor de la variable y .
2. Denir el punto en el cual va a calcular la Hessiana. Aunque en nuestro
ejemplo sabemos que la Hessiana es constante, es necesario determinar un
punto. La razn de ello es que la matriz hessiana es calculada por medio
de mtodos numricos. Utilicemos el punto v = (x, y) = (4, 5).

v=[4;5];
3. Invocar la rutina fdhess:

H=fdhess(fej72,v)
o, en el caso de fhess:

H=fhess(fej72,[1,1],v)
La salida de MATLABr es:

H = 4 2
2 4
Aunque los procedimientos numricos y los resultados son los mismos, para
nuestro propsito es ms prctico utilizar la rutina fdhess, por lo cual sta
es la que utilizaremos de aqu en adelante.
Como mencionamos anteriormente, la matriz hessiana es til si logramos adecuadamente extraer la informacin que sta nos ofrece. Para ello, podemos
utilizar las proposiciones que citamos al comienzo de esta seccin. Ms especcamente, podemos calcular los menores principales dominantes o arbitrarios
y calcular su determinante con la instruccin det, o hallar los valores propios
de la matriz hessiana por medio de la instruccin eig. Aunque es fcil calcular
en MATLABr los menores principales dominantes de una matriz de cualquier
tamao, es difcil calcular los menores principales arbitrarios. Por simplicidad,
en este caso utilizaremos el criterio de valores propios. Los valores propios de

202

GEDEM - Versin Preliminar


nuestra matriz H son 1 = 2, 2 = 6. Debido a que los valores propios son
estrictamente positivos y a que la matriz hessiana es constante (tiene el mismo
valor en todo punto (x, y )), podemos concluir que la matriz hessiana es denida
positiva y por lo tanto la funcin f (x, y) es estrictamente convexa.
Conjuntos Contorno. En el captulo 4 estudiamos la instruccin contour y
contour3, que son tiles para visualizar las curvas de nivel y los conjuntos
contorno de una funcin de dos variables f (x, y). Recordemos que la instruccin
contour sirve para visualizar las curvas de nivel de nuestra funcin f (x, y) en
en plano x, y (R2 ), mientras que la funcin contour3 sirve para visualizar las
curvas de nivel en el plano x, y, f (R3 ). Tambin recordemos de este captulo
la instruccin subplot, que muestra diferentes grcos simultneamente.
Una vez creada la funcin y los datos (pasos para grcar) podemos analizar
la cuasiconcavidad y cuasiconvexidad de nuestra funcin f (x, y) de la siguiente
manera:

subplot(2,2,1)
contour3(X,Y,Z,40) % 40 Curvas de nivel arbitrarias
title(Contour3);
subplot(2,2,2)
cn=[2 6 10 14 20 30]; % Curvas de nivel predeterminadas
contour(X,Y,Z,cn)
title(Contour);
subplot(2,2,3)
[cs,h]=contour(X,Y,Z,cn);
hs=clabel(cs,h)
title(Contour - clabel);
subplot(2,2,4)
contourf(X,Y,Z,cn)
title(Contourf);
A partir de estas instrucciones, obtenemos:
La gura ??a muestra las curvas de nivel de la funcin f (x, y) en el plano x,y,f.
La gura ??b muestra las curvas de nivel en el plano x,y. La gura ??c, adems
de mostrar algunas curvas de nivel, muestra el valor de f (x, y) en cada una de

CONCAVIDAD Y CONVEXIDAD

203

estas curvas. Por ltimo, en la gura ??d se observan las curvas de nivel con
los contornos relllenos.
Se observa en estas grcas que los conjuntos contorno inferiores de la funcin
f (x, y) son convexos, por lo cual podemos armar que la funcin es cuasiconvexa. Era de esperarse, puesto que ya habamos visto que la funcin es convexa,
y adems sabemos por la proposicin ?? que toda funcin convexa es cuasiconvexa.
Matriz Hessiana Orlada. Un ltimo criterio para determinar la cuasiconcavidad
(x, y)) deniy cuasiconvexidad de la funcin es la matriz Hessiana Orlada (Hf
da en (??). Para nuestro ejemplo, podemos empezar por hallar analticamente
la matriz Hessiana Orlada de f (x, y) y calcularla en el punto (x, y)=(3,4):

0
2x + 2(x + y) 2y + 2(x + y)

(x, y) =
Hf
4
2
2x + 2(x + y)

2y + 2(x + y)
2
4

0 80 100

(3, 4) =
Hf
2
80 4
100 2
4
Ahora vamos a calcular esta matriz en MATLABr . Para ello, utilizamos la
funcin fej72 combinamos los comandos fdjac y fdhess, as:

p=[3,4]; % Punto de evaluacin


J=fdjac(fej72,p); % Gradiente de f
H=fdhess(fej72,p); %Hessiana de f
Ho=[0 J;J H]; % Hessiana Orlada de f
La salida de MATLABr es:

Ho = 0
80
100

80
4
2

100
2
4

Sabemos, por la proposicin ??, que si el determinante de todos los Dk de esta


matriz es menor que cero, la funcin es cuasiconvexa. Calculemos los Dk de
esta matriz:

204

GEDEM - Versin Preliminar

for k=1:1:length(Ho)-1;
D=Ho(1:k+1,1:k+1); %MPD de orden k
dt(i)=det(D); % Determinante de MPD
end
dt
La primera lnea indica a MATLABr que los clculos de las siguientes lneas deben repetirse para cada valor de k. En esa misma lnea se establece que k tomar los valores de 1 ,2, siendo 2 el resultante de la instruccin length(Ho)-1.
El comando de la segunda lnea extrae el Menor principal Dominante de orden
k de la Matriz Hessiana Orlada. Por ejemplo, cuando k = 1, D es el menor
principal de orden 2 y est dado por D=Ho(1:2,1:2). La tercera lnea calcula el determinante del menor principal dominante que se calcul en la segunda
lnea, y guarda este valor en la posicin i del vector dt. La ltima lnea la utilizamos para ver los componentes del vector dt. La salida de MATLABr (con
format bank) es:

dt = -6400.00 -33600.00
No es de nuestro inters la magnitud de estos nmeros, sino ms bien su signo.
Para ello es til el comando format +. Al utilizar este comando, la salida
muestra los smbolos +,- o espacio en blanco para indicar elementos que son
positivos, negativos o cero, respectivamente. Deniendo este formato, la salida
de MATLABr es:

dt = indicando que tanto el primer componente del vector como el segundo son
negativos. Esto nos permite concluir que la funcin f (x, y) es cuasiconvexa en
el punto (x, y) = (3, 4)
A diferencia de la matriz hessiana de nuestra funcin f (x, y), la matriz Hessiana Orlada cambia segn el punto en donde la calculemos. Necesitamos entonces
generalizar el mtodo anterior para calcular la Matriz hessiana orlada en diferentes puntos a la vez. Para ello, necesitamos repetir el proceso m veces, donde
. Para ilustrar la
m son todas los puntos en los que se desea evaluar la matriz H
en un conjunto nito
forma en que se generaliza, vamos a evaluar la matriz H
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(:)];
, donde m es el nmero de
Por ltimo repetimos m veces el proceso de calcular H
, es decir, el nmero de columnas
puntos en donde vamos a evaluar la matriz H
del vector p:
for m=1:length(p); % Repetir m veces
J=fdjac(fej72,p(:,m)); % Gradiente
H=fdhess(fej72,p(:,m)); % Hessiana
Ho=[0 J;J H]; % Hessiana Orlada
for k=1:1:length(Ho)-1; % Repetir k veces
D=Ho(1:k+1,1:k+1); % MPD
dt(k,m)=det(D); % Determinante de MPD
end
end
dt
El vector dt resultante es de tamao 2x12, donde 2 corresponde al nmero de
y 12 corresponde
menores principales dominantes que se evalan en la matriz H
. Por ejemplo, la primera
al nmero de puntos en los que se evalu la matriz H
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
son menores que cero y
implica que los menores principales dominantes de H
por lo tanto la funcin en el conjunto S es cuasiconvexa12 .
A lo largo de toda la seccin hemos analizado la concavidad, convexidad, cua12

Aunque en el ejemplo se tomaron muy pocos valores para x y y , es fcil hacer los mismos
clculos para un conjunto S ms extenso. An as, los componentes del vector dt son negativos.

206

GEDEM - Versin Preliminar


siconcavidad y cuasiconvexidad de la funcin f (x, y) = x2 + y 2 + (x + y)2
por diferentes mtodos. Sin embargo, esta funcin es evidentemente convexa,
y aunque ha sido til para propsitos de explicacin, es importante tratar con
funciones en donde su concavidad o convexidad no es tan evidente, ya que es
en estos casos en donde la herramienta computacional puede resultar muy til.
En el siguiente ejemplo, realizamos el anlisis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad para una funcin un poco ms complicada.
A diferencia del ejemplo anterior, no explicaremos en detalle cada instruccin13 , ya que nuestro propsito con este ejemplo es mostrar la utilidad de
MATLABr para analizar rpidamente la forma de la funcin, y no ensear los
pasos que se deben seguir en cada mtodo de anlisis, como si lo era en el
ejemplo anterior.

7.3.1.

Ejemplo 7.3. f (x, y) = x0.5 y 0.5

Mtodo Grco
En la gura ?? se observa que esta funcin es cncava (y por lo tanto
cuasicncava) a lo largo de su dominio.

Matriz Hessiana. Deniendo previamente la funcin en un M-file llamado fej73, y a partir del conjunto nito de puntos S = {(x, y)\x
(0, 100] y (0, 100]}, se tiene:
x=[0.1:10:100.1]; % Valores para x
y=[0.1:10:100.1]; % Valores para y
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:);Y(:)]; % Vector con puntos (x,y)
for m=1:length(p); % Repetir en todos los puntos
H=fdhess(fej73,p(:,m)); % Matriz Hessiana
vp(1:2,m)=eig(H); % Valores propios
end
tam=size(vp);
tol=0.000016
for i=1:tam(1)*tam(2); % Valores propios
if abs(vp(i))>tol; % V. propios cercanos a cero
13

Aunque las instrucciones son bsicamente las mismas.

CONCAVIDAD Y CONVEXIDAD

207

vp(i)=vp(i);
else
vp(i)=round(vp1(i)); % Redondear
end
end
Hemos asumido valores para x y y estrictamente positivos. Adems, debido a que el clculo de la matriz Hessiana es numrico, los valores que sta
matriz contiene se aproximan con gran precisin a los valores reales, aunque no son exactamente iguales, por lo que en algunos puntos hay valores
propios de la matriz hessiana que son positivos, aunque muy cercanos a
cero. Para depurar el vector vp de estos valores, es necesario el segundo
procedimiento, en el cual, por medio del comando round, aquellos valores
sucientemente cercanos a cero (tol) se aproximan a cero.
Se observa que todos los componentes del vector vp son no positivos (menores o iguales que cero), por lo cual podemos concluir que la funcin es
cncava, y por lo tanto tambin es cuasicncava. Esto ltimo lo podemos
vericar con la matriz Hessiana Orlada.

Matriz Hessiana Orlada


x=[0.1:10:100.1]; % Valores para x
y=[0.1:10:100.1]; % Valores para x
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:);Y(:)]; % Vector con puntos
for m=1:length(p); % Repetir m veces
J=fdjac(fej73,p(:,m)); % Gradiente
H=fdhess(fej73,p(:,m)); % Hessiana
Ho=[0 J;J H]; % Hessiana Orlada
for k=1:1:length(Ho)-1; % Repetir k veces
D=Ho(1:k+1,1:k+1); % MPD
dt(k,m)=det(D); % Determinante de MPD
end
end
El vector dt es de tamao 2x121. En la posicin (i, j ) se este vector se
ha calculado el determinante del menor principal dominate de orden i
de la matriz Hessiana Orlada calculada en el punto j . Al observar los

208

GEDEM - Versin Preliminar


componentes de este vector utilizando las instrucciones:

format +
dt
se observa que todos los componentes de la primera la de este vector son
negativos, mientras que los componentes de la segunda la son positivos,
indicando que los Menores Principales Dominantes de orden 1 (D1 ) evaluados a lo largo del conjunto S son negativos, mientras que los de orden
2 son positivos. A partir de los criterios de evaluacin y de la informacin que nos proporciona este vector podemos concluir que la funcin es
cuasicncava.

Conjuntos Contorno
Se observa que el conjunto contorno superior es convexo, por lo cual podemos concluir tambin por este criterio, que la funcin es cuasicncava.

7.4. Funciones con tres o ms variables (Multivariadas)


Nuestro propsito en esta seccin es ilustrar con dos ejemplos la manera en que
se extienden los mtodos de anlisis de concavidad y convexidad para funciones
de tres o ms variables. Cuando tenemos funciones con tres variables, ya no
se puede utilizar el mtodo grco, puesto que ya no es posible visualizar la
funcin. Sin embargo, sus curvas de nivel se visualizan en R3 , y por lo tanto es
vlido en estas funciones utilizar el mtodo de conjuntos contorno, adems de
los mtodos de matriz Hessiana y Hessiana Orlada. En funciones de cuatro o
ms variables no es posible utilizar el mtodo grco y el mtodo de Conjuntos
contorno, por lo cual solo disponemos de los mtodos de matriz Hessiana y
matriz Hessiana Orlada.

7.4.1.

Ejemplo 7.4. f (x, y, z) = x4 + 3y 4 + 5z

Matriz Hessiana Al igual que en los caso anteriores, primero debemos


crear la funcin en un M-file llamado fej74:
function f = fej74(v);
z=v(3);

CONCAVIDAD Y CONVEXIDAD

209

y=v(2);
x=v(1);
f=x.^4+3*y.^4+5*z;
Luego de esto, debemos crear un conjunto nito de puntos S en los que
queremos evaluar la matriz H . Para este ejemplo, podemos asumir un
conjunto S = {(x, y, z)\x [10, 10] y [10, 10] z [10, 10]}, que
va a estar contenido en el vector p:

x=[-10:1:10]; % Valores para x


y=x;z=x; % Valores para y,z
[X,Y,Z]=meshgrid(x,y,z); % Valores para f(x,y)
p=[X(:);Y(:);Z(:)]; % Vector con puntos
Por ltimo, invocamos la rutina fdhess para calcular la matriz hessiana
en cada punto del vector p, calculamos sus valores propios (con su correspondiente depuracin) y a partir de la informacin contenida en el vector
vp podemos concluir sobre la concavidad y convexidad de la funcin.

for m=1:length(p);
H=fdhess(fej74,p(:,m));
vp(1:3,m)=eig(H);
end
tam=size(vp)
tol=0.000016
for i=1:tam(1)*tam(2);
if abs(vp(i))>tol;
vp(i)=vp(i);
else
vp(i)=round(vp(i));
end
end
Se observa que todos los componentes del vector vp son no negativos, lo
cual indica que la funcin es convexa.

Matriz Hessiana Orlada. Se siguen los mismos pasos que trabajamos en


el ejemplo anterior. La nica modicacin es que, al igual que hicimos
con el vector de valores propios de la matriz hessiana, necesitamos de-

210

GEDEM - Versin Preliminar


purar el vector que contiene los determinantes de los menores principales
dominantes de la matriz hessiana orlada.

x=[-10:1:10]; % Valores para x


y=x;z=x; % Valores para y,z
[X,Y,Z]=meshgrid(x,y,z); % Valores para f(x,y)
p=[X(:);Y(:);Z(:)]; % Vector con puntos (x,y,z)
for m=1:length(p);
J=fdjac(fej74,p(:,m));
H=fdhess(fej74,p(:,m));
Ho=[0 J;J H];
for k=1:1:length(Ho)-1;
D=Ho(1:k+1,1:k+1);
dt(k,m)=det(D);
end
end
tam=size(dt);
tol=0.00016;

for i=1:tam(1)*tam(2); % Depuracin


if abs(dt(i))>tol;
dt(i)=dt(i);
else
dt(i)=round(dt(i));
end
end
Se observa que todos los componentes del vector dt (una vez depurados)
son no positivos, lo cual implica que a partir de la informacin de la matriz
Hessiana Orlada, podemos concluir que la funcin es cuasiconvexa.

Conjuntos Contorno. Recordemos que las curvas de nivel para f (x, y, z) =


x4 + 3y 4 + 5z resultan de igualar la funcin a una constante . De esta
manera, tenemos que las curvas de nivel estn dadas por:
= x4 + 3y 4 + 5z

z=

x4 3y 4
5

As, a pesar de no poder visualizar la funcin f (x, y, z), s podemos visualizar sus curvas de nivel en el plano (x, y, z). Para visualizar estas curvas

CONCAVIDAD Y CONVEXIDAD

211

de nivel en MATLABr , utilizamos los mismos pasos que se requieren para


gracar una funcin en R3 , es decir, especicar la funcin, crear los datos
y por ltimo invocar el comando para gracar. Lo particular en este caso
es que vamos a repetir el ltimo paso n veces, donde n es el nmero de curvas de nivel que deseamos visualizar. Para este ejemplo vamos a visualizar
cuatro curvas de nivel de la funcin dadas por = (10000, 0, 10000).
1. Crear la funcin en un M-file llamado fcnej74:

function z=fcnej74(x,y,alpha)
z=(alpha-x.^4-3*y.^4)*(1/5);
2. Crear los datos:

x=[-10:0.1:10];y=x; % Datos para x,y


[X,Y]=meshgrid(x,y);
alpha=[-10000 0 10000]; % Curvas de nivel
3. Invocar el comando para gracar:

for i=1:length(alpha)
Z=fcnej74(X,Y,alpha(i));
mesh(X,Y,Z)
hold on
end
A partir de estas instrucciones, tenemos:
Se observa en esta grca que el conjunto contorno inferior es convexo, y por
lo tanto podemos concluir que la funcin es cuasiconvexa.
Por ltimo, mostraremos un ejemplo de una funcin con ms de tres variables.
En este caso, tampoco podemos utilizar el mtodo de conjuntos contorno, ya
que no se pueden visualizar las curvas de nivel de la funcin. Por lo tanto, los
nicos mtodos computacionales disponibles para este caso son los de matriz
hessiana y matriz hessiana orlada.

7.4.2. Ejemplo 7.5. f (w, x, y, z)


Matriz Hessiana

212

GEDEM - Versin Preliminar

Matriz Hessiana Orlada

Captulo 8

Optimizacin
Lida Quintero, Norman Maldonado
La racionalidad de los agentes es un supuesto frecuentemente utilizado la teora
econmica. Esto implica que ellos busquen siempre la mejor manera de realizar sus
cosas, es decir, busquen optimizar sus actividades. As, los consumidores siempre
quieren maximizar la utilidad que le proporcionan los bienes que compran, y los
productores maximizar sus benecios o minimizar sus costos.
En este captulo trabajaremos a partir de herramientas computacionales, el problema
de hallar los mximos o mnimos de una funcin (optimizacin esttica); dependiendo
de si ella representa utilidad, benecios o costos; delimitando el conjunto de soluciones de acuerdo a restricciones si las hay.
Segn (?), una caracterizacin tpica de problemas de optimizacin es encontrar valores extremos de una funcin f (x, y) restringida a un subconjunto bien especicado
de R2+ :
Maximizar f (x, y) sujeta a g(x, y) 0
x0
y0
donde f , g : R2++ R son funciones diferenciables. Aqu a f (, ) se le conoce
como funcin objetivo, y a g(, ) como funcin restriccin o conjunto factible. En el
problema general hablamos de maximizar, dado que minimizar equivale a maximizar
el negativo de la funcin.
Tambin podemos establecer una secuencia general para resolver un problema de
optimizacin computacionalmente. Primero, debemos hacer un anlisis cualitativo
213

214

GEDEM - Versin Preliminar

del problema, es decir, identicar el tipo de funcin objetivo al que nos enfrentamos,
el tipo de restricciones, y su comportamiento si es posible de manera grca para
tener idea de la regin donde se puede encontrar la solucin.
Teniendo claras las condiciones iniciales del problema, podemos crear las funciones
computacionalmente(funcin objetivo, restricciones, gradientes, etc)1 . Por ltimo,
aplicamos la rutina computacional pertinente segn el problema. Adicionalmente,
debemos ser muy cuidados con la interpretacin de los resultados.
Al optimizar se pueden presentar varios casos segn el tipo de funciones que estemos
trabajando: cuando la funcin objetivo no es lineal, y no hay restricciones, caso que
veremos en la primera seccin; en la segunda presentamos optimizacin de funciones del mismo tipo pero con restricciones; y por ltimo tendremos el caso en que
las funciones son lineales. El anlisis de concavidad, convexidad, cuasiconcavidad y
cuasiconvexidad de funciones que vimos en el captulo anterior, nos har mucho ms
fcil la comprensin de estos problemas.

8.1. Optimizacin no lineal sin restricciones


De nuestro problema general de optimizacin, en esta seccin veremos el caso particular en el que f (x, y) tiene forma no lineal. Adems, no tenemos g(x, y), o funcin
restriccin, por lo que debemos buscar la solucin en todo el dominio de la funcin
objetivo.
Existen varios mtodos numricos para solucionar este caso particular de optimizacin como tales, tales y tales; que veremos en esta seccin junto con las rutinas de
MATLABr que hacen uso de ellos.

8.1.1. Minimizar
Con esta rutina hallamos la imagen ms pequea de nuestra funcin objetivo, por lo
que la utilizamos para solucionar problemas de minimizacin.

Ejemplo 8.1.
mn f (x) = x3 4x2 + 6
1

En general es mejor trabajar con funciones denidas en un m-le, ya que se pueden modicar
r
fcilmente y permiten hacer uso de otras funciones disponibles en MATLAB . En problemas
sencillos es prctico trabajar con funciones inline.

OPTIMIZACIN

215

Paso 1. Anlisis Cualitativo del problema. Podemos ver en la Figura 8.1 el comportamiento de la funcin f (x) y de su derivada fx en una parte de su dominio:
S = {x [3, 6]}.
Figura 8.1: Comportamiento de f (x)
Sabemos del captulo anterior que la funcin es cncava para el intervalo
(, 1.3333) y convexa en el intervalo (1.3333, ). En la grca observamos que, en un punto cercano a x = 0, esta funcin tiene un mximo, y en
un punto cercano a x = 3, un mnimo2 .

Paso 2. Crear funciones. Podemos introducir la funcin como un m-le o por medio
del comando inline:

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

Paso 3. Invocar rutina de solucin. Debemos crear las imgenes de f (x) en una
vecindad sucientemente grande alrededor de x = 3, y luego, teniendo estos
valores, escoger el ms pequeo de todos ellos3 .

h=0.01; x=[2:h:4]; % Puntos cercanos a x=3


y=f(x); % Crear imgenes
[ym,ind]=min(y); % Imgen ms pequea
xm=x(ind); % Argumento que minimiza
En la primera lnea creamos los puntos cercanos a x = 3 (x [2, 4]), que,
segn lo que analizamos en el paso 1, es un punto cercano al mnimo que
buscamos. En la segunda lnea estn las imgenes de ese conjunto de puntos.
En la tercera, se halla la imgen ms pequea junto con su posicin dentro
del vector y. Finalmente en la cuarta lnea encontramos el valor de x que
minimiza a f (x).
Como resultado, obtenemos xm=2.67 y ym=-3.4814. En caso de requerir
mayor precisin para x, solo se requiere reducir el valor del parmetro h.
Para el caso de funciones univariadas, ste es el mtodo ms sencillo en el
que se hallan mnimos computacionalmente.
2

Ntese en la gura 8.1 que en estos puntos la primera derivada de la funcin se hace cero.
Recordemos que establecimos el conjunto S = {x [3, 6]}, slo con el propsito de visualizar
el comportamiento de la funcin. En realidad, nuestro conjunto de salida o dominio de f (x) son
todos los reales, por lo que no estamos buscando puntos ptimos que estn en la frontera, sino
puntos ptimos interiores en los que se cumpla la condicin f = 0.
3

216

GEDEM - Versin Preliminar

Captulo 9

Sistemas Dinmicos
Diego Corredor, Mario Gonzlez
En los captulos anteriores nos hemos ocupado de los procedimientos utilizados para
analizar y optimizar diferentes tipos de funciones. Todos estos mtodos se enmarcan
dentro de un contexto esttico en el que no es posible observar los comportamientos
de las variables a travs del tiempo. En este captulo nos concentramos en los mtodos numricos, y aplicaciones computacionales utilizados en situaciones donde el
tiempo juega un papel importante, ya sea como una variable continua (ecuaciones
diferenciales) o discreta (ecuaciones en diferencias).
En la primera parte del captulo explicamos los mtodos numricos, y computacionales, utilizados en la solucin de ecuaciones diferenciales ordinarias, presentando
algunos ejemplos y aplicaciones econmicas. En la segunda parte desarrollamos el
mismo esquema para las ecuaciones en diferencias.

9.1. Ecuaciones Diferenciales y Dinmica Continua


Ecuaciones DiferencialesDinmica Continua
FALTA UNA INTRODUCCIN AL USO DE LAS ECUACIONES DIFERENCIALES EN ECONOMA
ecuaciones diferenciales ordinarias
las ecuaciones no son simplemente con respecto al tiempo.

9.1.1.

Mtodos Numricos

Desde el punto de vista algebraico, solucionar un sistema de ecuaciones diferenciales


implica encontrar la frmula de la o las funciones que satisfagan el sistema. Cuando
ninguna condicin inicial es denida la solucin consiste en hallar una frmula general
217

218

GEDEM - Versin Preliminar

de las funciones. Pero si las condiciones iniciales del problema son determinadas, es
posible obtener las funciones especcas que solucionan el conjunto de ecuaciones.
Por ejemplo, al solucionar algebraicamente la ecuacin x = 3x, obtenemos que el
conjunto de funciones que cumplen esta ecuacin viene dado por la frmula general:
x(t) = Ae3t ; donde A puede ser cualquier nmero real. Pero si agregamos la condicin
inicial x(0) = 4, la nica funcin que satisface la ecuacin diferencial y la condicin
inicial es x(t) = 4e3t . Es necesario anotar que las condiciones no necesariamente
tienen que ser iniciales, tambin pueden imponerse condiciones en otros momentos del
tiempo, o condiciones de fronteraCondicin de Frontera. En el ejemplo, si imponemos
la condicin de frontera x(2) = 5, la funcin particular que satisface la condicin y
el sistema de dinmico es: x(t) = 0.0123e3t .
Por otro lado, por la naturaleza de los mtodos, la solucin numrica de sistemas
dinmicos implica que algn tipo de condicin deba ser impuesta. Es decir que,
al contrario del mtodo algebraico, no es posible obtener ningn tipo de ecuacin
general de las funciones solucin. An ms, al utilizar mtodos numricos nunca
encontramos tales funciones, sino que realizamos una aproximacin numrica a ellas.
Dependiendo del tipo de condicin impuesta (inicial o de frontera) el procedimiento
de solucin numrica cambia. Si tomamos una condicin inicial, resolver un sistema
dinmico consiste en aproximar las funciones solucin a partir del momento del
tiempo en el que es impuesta tal condicin. En otras palabras, la aproximacin
se realiza hacia adelante. A este tipo de problemas se les conoce con el nombre de
Problemas de Valor InicialProblemas de Valor! Inicial o IVPIVP|seeProblemas de
Valor InicialInicial Value Problems|seeIVP (por sus siglas en ingls), y formalmente
consisten en aproximar x(t), en un intervalo de tiempo determinado, de modo que:

x(t)

= f t, x(t)
x(t0 ) = x0

(9.1)

El procedimiento de solucin de un IVP consiste, por lo general, en tomar la condicin


inicial y evaluarla en la ecuacin diferencial. De esta forma se tiene un punto y la
derivada de la funcin en el punto. Con estos dos elementos, y haciendo uso del
polinomio de Taylor, es posible aproximar el valor de la funcin en el siguiente perodo
de tiempo. Este procedimiento se repite una y otra vez hasta alcanzar el lmite
superior del intervalo de tiempo considerado. Los mtodos numricos utilizados para
la solucin de problemas de valor inicial son explicados en detalle ms adelante.

SISTEMAS DINMICOS

219

Una generalizacin de los problemas de valor inicial son los denominados Problemas
de Valores en la FronteraProblemas de Valor! en la Frontera o BVPBVP|seeProblemas
de Valor en la FronteraBounded Value Problems|seeProblemas de Valor en la Frontera. En este tipo de problemas imponemos, como su nombre lo indica, condiciones de
frontera al sistema dinmico. La solucin de estos sistemas resulta ms complicada
porque es posible imponer varias condiciones a la vez, y porque la aproximacin a
las funciones se realiza antes y despus de cada condicin. Los mtodos numricos
utilizados para resolver este tipo de problemas son avanzados, por lo que no sern
tratados en este libro.1
A continuacin presentamos algunos mtodos numricos utilizados para solucionar
problemas de valor inicial. Es necesario aclarar que existe una gran cantidad de
mtodos por lo que no pretendemos abarcar todos los algoritmos existentes. Nos
limitamos a los mtodos ms sencillos que sirven de base para los dems.

Mtodo de Euler Mtodo de Euler: Conocido tambin como mtodo de la


tangente, aproxima la curva solucin de la ecuacin diferencial a travs de un
polinomio de Taylor de grado 1. Para entender el algoritmo, supongamos que la
funcin x(t) satisface el sistema de ecuaciones (9.1) y, tras hacer la expansin
del polinomio de Taylor de grado 1 alrededor de t + h, obtenemos:

x(t + h) x(t) + hx(t)

(9.2)

Con base en el sistema (9.1), en la ecuacin (9.2) y asumiendo h = 1, es posible


aproximar x1 :

x1 = x0 + f (0, x0 )
Ya con x1 , es posible encontrar una aproximacin de x2 y as sucesivamente.
En general, tenemos que:

xi+1 = xi + hf (ti , xi )

(9.3)

Es importante recalcar que hallamos aproximaciones, por lo que en cada iteracin la solucin exacta es el valor aproximado ms un error cuadrtico:2
1

Para una explicacin clara y sencilla de estos mtodos ver Fackler (2003, cap. 6).
Como la aproximacin es de primer grado, el error resulta ser una funcin cuadrtica del tamao
del paso; si la aproximacin es de segundo grado, el error asociado a sta es una funcin cbica, y
as sucesivamente.
2

220

GEDEM - Versin Preliminar


x (t + h) = x(t + h) + O h2
Una forma de disminuir la inexactitud de los resultados es tomar tamaos de
paso ms pequeos, por ejemplo h = 0.1. Sin embargo, al reducir el tamao del
paso de la iteracin se aumenta el nmero de operaciones aritmticas, lo que
disminuye la velocidad del algoritmo. Existe un tipo de algoritmos, conocidos
como algoritmos adaptativos, que durante el proceso iterativo observan el comportamiento de los errores en cada etapa con el n de reducir o incrementar el
tamao del paso, segn sea necesario.
El programa, o script, que se presenta a continuacin muestra la programacin
del mtodo de Euler3 . El usuario debe denir con anterioridad el nmero de
iteraciones n, la condicin inicial x0, el tamao del paso h y el tiempo inicial
t0. Tambin debe ser especicada, en otro chero, la ecuacin diferencial cuya
sintaxis es dxdt=f(t,x):
x(1)=x0;
t(1)=t0;
for i=1:n
x(i+1)=x(i)+h*f(t(i),x(i));
t(i+1)=t(i)+h;
end
Existen ecuaciones diferenciales particulares en las cuales el algoritmo de Euler
puede resultar poco efectivo a la hora de aproximar la solucin numricamente.
En estos casos, es recomendable recurrir a otro tipo de mtodos ms estables.
Uno de los procedimientos alternativos ms simples, es el mtodo modicado
de EulerMtodo Modicado de Euler. Al igual que en el mtodo de Euler,
aproximamos la solucin con un polinomio de Taylor de grado 1. Sin embargo,
no lo evaluamos alrededor de t + h sino de t, obteniendo:4
3

El lector avanzado en mtodos numricos puede constatar que existen programaciones ms


ecientes que las presentadas en esta parte del captulo. Los programas aqu presentados tienen un
objetivo expositivo y, por tanto, no fueron programados teniendo en cuenta el nmero de operaciones
aritmticas, o cualquier otra medida de eciencia de un mtodo numrico.
4
El mtodo de Euler modicado se basa en el hecho de que para una funcin cualquiera g(x), si
la funcin es relativamente bien comportada y h es lo sucientemente pequeo, la derivada de la

SISTEMAS DINMICOS

221

x(t) x(t h) + hx(t)

(9.4)

A partir de la ecuacin anterior, llegamos a la siguiente regla de iteracin:

xi = xi1 + hf ti , xi )
Finalmente, la regla de iteracin para xi+1 es:

xi+1 = xi + hf ti+1 , xi+1 )

(9.5)

Esta regla de iteracin es denominada frmula implcita de Euler, ya que no es


posible despejar xi+1 en trminos de ti y de xi . Dados un t0 y un x0 , el valor
de la variable en la siguiente iteracin es el valor que solucione la siguiente
ecuacin:

x1 x0 hf t1 , x1 ) = 0

(9.6)

Como se puede observar, en cada iteracin es necesario solucionar una ecuacin


similar a la (9.6). Independientemente del tipo de ecuacin (lineal o no lineal),
su solucin incrementa el nmero de clculos y, por lo tanto, disminuye la
velocidad de solucin. En algunos casos, un mtodo ms efectivo es el Mtodo
de Runge - Kutta, que presentamos a continuacin.

Mtodo de Runge - KuttaMtodo de Runge - Kutta: Este mtodo encuentra una solucin aproximada de la ecuacin diferencial partiendo de un
polinomio de Taylor determinado. Cuando el polinomio de Taylor utilizado
es de grado 2, se habla de un mtodo de Runge - Kutta de segundo orden
(RK2)RK2|seeMtodo de Runge - Kutta; si por ejemplo, un algoritmo RK
proviene de un polinomio de Taylor de grado 4, es denominado mtodo de
Runge - Kutta de 4 orden, o simplemente RK4RK4|seeMtodo de Runge Kutta5 . Este ltimo es uno de los procedimientos ms utilizados para resolver
problemas de valor inicial, por su fcil programacin, estabilidad y velocidad
de solucin.
funcin en un punto es aproximadamente igual a la derivada de la funcin en un punto adyacente:
g 0 (x) g 0 (x + h) o g 0 (x h) g 0 (x).
5
De la misma forma, el mtodo de Euler es tambin conocido como mtodo de Runge Kutta de
primer orden, ya que se obtiene a partir de un polinomio de Taylor de grado 1.

222

GEDEM - Versin Preliminar


La idea bsica del mtodo consiste en expresar las derivadas de orden superior
del polinomio de Taylor, en trminos de la primer derivada. Para hallar la
aproximacin de Runge - Kutta de, por ejemplo, segundo orden, partimos de
la aproximacin de Taylor de grado dos:

h2

x(t + h) = x(t) + hf t, x(t) + f 0 t, x(t) +O(h3 )


2

(9.7)

Una vez obtenida esta aproximacin, se busca formular la segunda derivada en

trminos de la primera, f t, x(t) . Reorganizando los trminos de la ecuacin


(9.7), tenemos:

x(t + h) x(t) +

i
hh
h
f t, x(t) + f t, x(t) +hf 0 t, x(t)
2
2

A partir de una aproximacin de Taylor de primer orden para una funcin de


dos variables, es posible mostrar que:6

x(t + h) x(t) +

h
f t, x(t) + f t + h, x(t) + f t, x(t)
2
2

De esta forma, la ecuacin que determina el proceso iterativo en el mtodo de


Runge - Kutta de segundo orden es:

xi+1 = xi +

1
(F1 + F2 )
2

donde,

F1 = hf (ti , xi )
F2 = hf (ti + h, xi + F1 )

El siguiente script muestra una programacin del mtodo de Runge - Kutta de


segundo orden. El nmero de iteraciones, el tamao del paso, la condicin y el
tiempo iniciales deben ser especicados con anterioridad, al igual que debe ser
denida la ecuacin diferencial en otro chero:
6

Si se desea revisar una deduccin estricta ver Kincaid (1994, pgs 514 - 516).

SISTEMAS DINMICOS

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 aproximacin de Runge - Kutta de cuarto orden, partimos del
polinomio de Taylor de grado 4 y seguimos un procedimiento anlogo. As, la
regla de iteracin es:

xi+1 = xi +

1
(F1 + 2F2 + 2F3 + F4 )
6

donde,

F1 = hf (ti , xi )

F = hf (t + 1 h, x + 1 F )
2
i
i
2
2 1
1
1

F
=
hf
(t
+
h,
x
+
3
i
i

2
2 F2 )

F = hf (t + h, x + F )
4
i
i
3
Dado que la aproximacin es realizada a partir de un polinomio de Taylor
de grado 4, el mtodo de Runge - Kutta de orden 4 tiene un error asociado

O h5 . Aunque es posible obtener mtodos RK de orden superior, con el n
de disminuir la magnitud del error, su uso resulta ms costoso, en trminos de
procesamiento, con respecto al algoritmo RK4.

Regla del Trapecio:Regla del TrapecioRegla del Trapezoide|seeRegla del Trapecio Recordemos que en la seccin 6.2 nos referimos a la Regla del Trapecio
como un mtodo de aproximacin lineal de una integral. El procedimiento consista en dividir el intervalo de integracin en subintervalos, para luego sumar
las reas de los trapecios de cada uno de estos, y as poder aproximar el rea
bajo la curva. La frmula que utilizamos para calcular el rea de cada trapecio
era:7
7

Ver la gura 6.1.

224

GEDEM - Versin Preliminar

x
y0 + y1
2

(9.8)

La idea bsica de la Regla del Trapecio, en la solucin de IVPs, consiste en

integrar la ecuacin diferencial (9.1) en el intervalo t, t+h y luego aproximarla


utilizando la ecuacin (9.8).
Al integrar la ecuacin diferencial (9.1) en el intervalo especicado obtenemos
la siguiente expresin:

t+h

t+h

f t, x(t) dt

t+h

f t, x(t) dt

x(t)dt

=
t

Z
x(t + h) x(t) =

(9.9)

Reorganizando trminos, llegamos a una regla de iteracin de la forma:

Z
xi+1 = xi +

ti+1

f t, x(t) dt

ti

(9.10)

Por la ecuacin (9.8), la integral puede ser aproximada de la siguiente manera:

ti+1

ti

h
f t, x(t) dt = f (ti , xi ) + f (ti+1 , xi+1 )
2

De esta forma, obtenemos la siguiente regla de iteracin, conocida como la


Regla del Trapecio:

xi+1 = xi +

h
f (ti , xi ) + f (ti+1 , xi+1 )
2

El mtodo del Trapecio, al igual que el mtodo de Euler modicado, es un


proceso implcito de solucin que resulta ser estable, aunque de baja velocidad
y alto costo computacional.
Una caracterstica esencial de los mtodos ya presentados es que son mtodos de un
solo paso, es decir, calculan xi+1 tomando como base a xi . Sin embargo, existe otro
tipo de algoritmos, denominados mtodos multipaso, que en cada iteracin hacen
uso de los valores xi1 , xi2 , ..., x0 .

SISTEMAS DINMICOS

225

La diferencia entre cada uno de los mtodos multipaso radica en el numero de valores
utilizados y en la forma como se realiza la aproximacin de la integral. Uno de los
mtodos multipaso ms conocido es el Mtodo de Adams - Bashforth - Moulton, que
presentamos a continuacin:

Mtodo de Adams - Bashforth - Moulton:Mtodo de Adams - Bashforth


- Moulton Este mtodo, adems de ser un algoritmo multipaso, hace parte de
los mtodos denominados predictor - corrector. Esta clase de algoritmos realiza
una primer iteracin para calcular una prediccin de xi+1 (predictor), y luego
la utiliza para iterar de nuevo, con el n de obtener un valor corregido del
clculo inicial de xi+1 (corrector).
El algoritmo de Adams - Bashforth - Moulton consiste de dos procedimientos
muy parecidos: el Mtodo Adams - Bashforth y el Mtodo Adams - Moulton.
El primero se encarga de calcular el predictor, mientras que el segundo genera
el corrector. Veamos cada uno de estos mtodos por aparte:

Mtodo Adams - Bashforth:Mtodo de Adams - Bashforth El algoritmo


consiste en aproximar la integral del sistema (9.10), encontrando los coecientes
desconocidos (a, b, c, ...) de la siguiente ecuacin:

ti+1

ti

h
i

f t, x(t) dt = h af (ti , xi ) + bf (ti1 , xi1 ) + cf (ti2 , xi2 ) + ... (9.11)

Dependiendo del nmero de valores anteriores utilizados, el orden de las frmulas de Adams - Bashforth cambia. Por ejemplo, si utilizamos los valores xi
y xi1 , hablamos de una frmula Adams - Bashforth de orden 2, en la cual
debemos encontrar los coecientes (a, b). A continuacin presentamos el procedimiento para obtener sus valores.
Para facilitar la exposicin, y sin prdida de generalidad, supongamos que
ti = 0 y h = 1. Por lo que nuestro problema consiste en resolver:

Z
0

0+1

f t, x(t) dt af (0, xi ) + bf (0 1, xi1 )

(9.12)

Debemos determinar los coecientes a y b, exigiendo que la ecuacin (9.12)


sea exacta cuando los integrandos son polinomios de segundo o menor grado.8
Tomamos como base los siguientes polinomios:
8

Aqu utilizamos el procedimiento propuesto por Kincaid (1994, pg 824)

226

GEDEM - Versin Preliminar

p0 (t) = 1
p1 (t) = t
De esta forma, los coecientes deben cumplir el siguiente sistema de ecuaciones:

p0 (t)dt = ap0 (0) + bp0 (1)

p1 (t)dt = ap1 (0) + bp1 (1)

El primer sumando de las dos ecuaciones anteriores corresponde al trmino


af (ti , xi ) de la ecuacin (9.11), y el segundo sumando corresponde al trmino
bf (ti1 , xi1 ) de la misma ecuacin. Al solucionar las integrales denidas obtenemos dos ecuaciones en trminos de nuestras dos incgnitas a y b. Para la
frmula de segundo orden, los coecientes son: a = 3/2 y b = 1/2, los cuales
solucionan el siguiente sistema de ecuaciones.

1 = (1)a + (1)b
1
= (0)a + (1)b
2
Ahora consideremos una frmula Adams - Bashforth de orden 4. Debemos
exigir que la aproximacin sea exacta cuando el integrando sea un polinomio
de cuarto o menor grado. Tomamos como base los siguientes polinomios:

p0 (t) = 1
p1 (t) = t
p2 (t) = t(t + 1)
p3 (t) = t(t + 1)(t + 2)
De manera que las ecuaciones que deben satisfacer los cuatro coecientes son:

SISTEMAS DINMICOS

227

1=a+b+c+d
1
= b 2c 3d
2
5
= 2c + 6d
6
9
= 6d
4

La solucin del sistema es: a = 55/24, b = 59/24 c = 37/24 y d = 9/24.


As, la regla de iteracin de la ecuacin (9.10) es:

xi+1 = xi +

i
hh
55f (ti , xi ) 59f (ti1 , xi1 ) + 37f (ti2 , xi2 ) 9f (ti3 , xi3 )
24
(9.13)

Es importante mencionar que el mtodo de Adams - Bashforth requiere, dependiendo del orden, cierto nmero de valores anteriores. Por lo general, se
utiliza el algoritmo el RK4 para calcularlos. En estos casos el algoritmo RK4
es denominado algoritmo de inicio.

El siguiente script presenta una programacin del mtodo Adams - Bashforth


de cuarto orden, en el que el algoritmo de inicio utilizado es el mtodo de Euler.
El usuario debe denir previamente: el nmero de iteraciones n, la condicin
inicial x0, el tamao del paso h, el tiempo inicial t0 y el nal tf. En otro chero
es necesario especicar la ecuacin diferencial con la sintaxis dxdt=f(t,x).

228

GEDEM - Versin Preliminar


x(1)=x0;
t(1)=t0;
h=(tf-t0)/n;
for i=1:3
% Algoritmo de Inicio - Euler
d=h*f(t(i),x(i));
x(i+1)=x(i)+d;
t(i+1)=t(i)+h;
end
for i=4:n-3
% Formula de AB de cuarto orden
x(i+1)=x(i)+(h/24)*(55*f(t(i),x(i))-59*f(t(i-1)...
,x(i-1))+37*f(t(i-2),x(i-2))-9*f(t(i-3),x(i-3)));
t(i+1)=t(i)+h;
end
Partiendo de la condicin inicial, y utilizando el mtodo de Euler, el programa
realiza tres iteraciones para calcular los primeros valores de x. Una vez obtenidos x1 , x2 y x3 , la regla de iteracin (9.13) es utilizada para generar los
siguientes valores hasta alcanzar el nmero predenido de iteraciones n. En
total el algoritmo realiza n iteraciones, tres con el algoritmo de Euler y el resto
con la frmula de Adams - Bashforth.

Mtodo Adams - Moulton:Mtodo de Adams - Moulton Este mtodo resulta muy parecido a la frmula Adams - Bashforth; sin embargo, incorpora
un elemento adicional, dado que la regla de iteracin que se obtiene es un
algoritmo implcito.
Ahora, buscamos los coecientes adecuados para aproximar la integral de la
siguiente forma:

ti+1

ti

h
i

f t, x(t) dt = h af (ti+1 , xi+1 ) + bf (ti , xi ) + cf (ti1 , xi1 ) + ...

El procedimiento para hallar los valores de (a, b, c, ...) es el similar al utilizado


para calcular los coecientes de la frmula de Adams - Bashforth. As, es posible
obtener la frmula de Adams - Moulton de orden 5 para aproximar la integral
con la siguiente regla de iteracin:

SISTEMAS DINMICOS

xi+1

i
h h
= xi +
251fi+1 + 646fi 264fi1 + 106fi2 19fi3
720

229

(9.14)

donde fi = f (ti , xi ). Como podemos observar, el primer sumando dentro del


parntesis est en trminos de xi+1 , es decir que el valor de la variable debe
ser calculado de forma implcita. Debemos encontrar el xi+1 que cumpla la
siguiente ecuacin:

xi+1 xi

i
h h
251fi+1 + 646fi 264fi1 + 106fi2 19fi3 = 0 (9.15)
720

donde ti , ..., ti3 y xi , ..., xi3 son valores conocidos. Cuando el sistema dinmico es de tercer o mayor orden, la ecuacin (9.15) resulta ser no lineal, y su
solucin, en cada iteracin, requiere el uso de algoritmos especiales.9 Como resultado de esto, el algoritmo implcito resulta ms estable, pero tambin, ms
lento y ms costoso en trminos de procesamiento.
Otra forma de calcular el valor de xi+1 consiste en introducir, en la ecuacin
(9.14), el valor de xi+1 obtenido por el algoritmo de Adams - Bashforth. En
otras palabras, en el algoritmo de Adams - Bashforth - Moulton, el resultado
de la frmula de Adams - Bashforth es el predictor, mientras que el corrector
es resultado de la frmula Adams - Moulton.
El chero presentado en la siguiente pgina, muestra una programacin del mtodo Adams - Moulton de quinto orden junto con la frmula Adams - Bashforth
de cuarto; como algoritmo de inicio se utiliza el RK4. El usuario debe denir
previamente: el nmero de iteraciones n, el tamao del paso h, la condicin
inicial x0, el tiempo inicial t0 y el nal nal tf. Tambin es necesario denir
la ecuacin diferencial con la sintaxis dxdt=f(t,x).
9

Para una breve introduccin sobre los mtodos numricos utilizados para resolver ecuaciones
no lineales ver Fackler (2003, cap. 3)

230

GEDEM - Versin Preliminar


x(1)=x0;
t(1)=t0;
xp(1)=x(1);
h=(tf-t0)/n;
for i=1:3
% Algoritmo de Inicio - RK4
f1=h*f(t(i),x(i));
f2=h*f(t(i)+h,x(i)+f1);
x(i+1)=x(i)+0.5*(f1+f2);
xp(i+1)=x(i+1);
t(i+1)=t(i)+h;
end
for i=4:n-3
% Calculo del predictor (Adams - Bashforth)
xp(i+1)=xp(i)+(h/24)*(55*f(t(i),xp(i))-59*f(t(i-...
1),xp(i-1))+37*f(t(i-2),xp(i-2))-9*f(t(i-3),xp...
(i-3)));
% Calculo del corrector (Adams - Moulton)
x(i+1)=x(i)+(h/720)*(251*f(t(i)+h,xp(i+1))+646*f...
(t(i),x(i))-264*f(t(i-1),x(i-1))+106*f(t(i-2)...
,x(i-2))-19*f(t(i-3),x(i-3)));
xp(i+1)=x(i+1);
t(i+1)=t(i)+h;
end
El programa calcula inicialmente los valores x1 , x2 y x3 por el mtodo RK4.
Con estos valores, y con x0 , el programa obtiene el predictor de x4 utilizando la
frmula de Adams - Bashforth. Una vez obtenido el predictor (xp), el corrector
es generado por medio del algoritmo de Adams - Moulton.

Los anteriores son los mtodos numricos bsicos utilizados para la solucin de problemas de valor inicial. Es importante conocer la tcnica aplicada por cada uno de
los algoritmos ya que, dependiendo de las propiedades particulares del sistema dinmico, algunas veces resulta mejor utilizar uno u otro mtodo. Un ejemplo claro de

SISTEMAS DINMICOS

231

esto son los sistemas dinmicos rgidos.Ecuaciones Diferenciales Rgidas


Para nalizar esta primera parte sobre mtodos numricos, a continuacin hacemos
mencin a los sistemas dinmicos rgidos y la forma como se solucionan computacionalmente. Aunque en economa los sistemas de ecuaciones diferenciales rara vez
resultan ser de este tipo, es necesario tener en cuenta este criterio a la hora de enfrentarse a un sistema dinmico, con el n de escoger el algoritmo ms eciente en
trminos de estabilidad y velocidad de solucin.

Sistemas Dinmicos Rgidos


Ecuaciones Diferenciales Rgidas
Un sistema de ecuaciones diferenciales se dice rgido cuando uno o varios valores
propios de su matriz jacobiana asociada son demasiado grandes en magnitud.10 Esto
implica que la solucin numrica es muy sensible a pequeos cambios en el tamao del
paso, lo que puede generar errores importantes en el proceso de integracin numrica
y, por tanto, en la aproximacin a la solucin de la ecuacin diferencial.
Un ejemplo sencillo de una ecuacin rgida es la siguiente ecuacin diferencial:

x = 10x

(9.16)

La solucin analtica es de la forma x(t) = Ae10t , indicando que, a medida que pasa
el tiempo, el valor de x(t) 0. Utilizando la frmula de Euler (ecuacin 9.3), la
regla de iteracin que obtenemos, para este caso particular, es:

xi+1 = xi + h(10xi )
xi+1 = (1 10h)xi
Es claro que si en el proceso de integracin numrica utilizamos un tamao de paso
h > 2/10, el proceso iterativo no converge (|x(t)| ), lo cual no concuerda con la
intuicin de la solucin analtica. En la gura (9.1) se observa la solucin analtica y
la solucin numrica de la ecuacin anterior con x0 = 10 y h = 0.21.
Mientras la solucin analtica converge monotnicamente a cero, la solucin numrica
presenta un comportamiento oscilante explosivo. Si reducimos el tamao del paso de
10

No existe una regla para denir cundo un valor propio es demasiado grande o no. Esto depende
del sistema dinmico con que estemos trabajando. En el ejemplo, el valor propio = 10 resulta
demasiado grande en magnitud, pero en otros casos tal vez no.

232

GEDEM - Versin Preliminar


Solucion Numerica vs. Solucion Algebraica
40

30

20

10

x(t)

10

20

30

40

x(t)=10e10t
xi+1=(110h)xi
0

0.5

1.5

2.5

3.5

Figura 9.1: Solucin Numrica (h = 0.21)

0.21 a 0.09, obtenemos un comportamiento diferente en la solucin numrica (ver


gura (9.2)).
En este caso, aunque la solucin numrica no es completamente igual a la solucin
analtica, s observamos un comportamiento similar (monotnico convergente). Es
claro que la integracin numrica de la ecuacin x = 10x resulta muy sensible a
cambios en el tamao del paso, lo que puede generar aproximaciones numricas muy
diferentes a las soluciones analticas.
En el ejemplo anterior, el problema de convergencia lo solucionamos reduciendo h. Sin
embargo, este procedimiento presenta dos dicultades: 1) deducir qu tan pequeo
debe ser el tamao del paso puede resultar complicado;11 y 2) an si lograramos
obtener un h lo sucientemente pequeo, esto implica un mayor nmero de iteraciones
y, por lo tanto, un mayor costo computacional.
Otra forma de solucionar la ecuacin diferencial (9.16), consiste en utilizar el mtodo
modicado de Euler (ecuacin 9.5). La regla de iteracin que obtenemos es:

11

En ecuaciones diferenciales sencillas es posible determinar un h lo sucientemente pequeo para


obtener una solucin estable, pero con ecuaciones diferenciales ms complicadas este procedimiento
resulta ms complejo y, en algunos casos, casi imposible.

SISTEMAS DINMICOS

233
Solucion Numerica vs. Solucion Algebraica

10
10t

x(t)=10e
x =(110h)x

i+1

8
7
6
5

x(t)
4
3
2
1
0
1

0.5

1.5

2.5

3.5

Figura 9.2: Solucin Numrica (h = 0.09)

xi+1 = xi + h(10xi+1 )
xi
xi+1 =
(1 + 10h)
Por este mtodo, la integracin numrica resulta estable, sin importar el tamao del
paso utilizado. En general, los mtodos ms utilizados para la solucin de sistemas
dinmicos rgidos son los algoritmos implcitos, por su gran estabilidad con respecto
al tamao del paso. La desventaja de estos algoritmos es su baja velocidad de solucin y su gran costo de procesamiento, lo que puede ser crucial en problemas de
gran magnitud. Otros mtodos, como algoritmos predictor - corrector o el mtodo
de Rosenbrock, tambin son utilizados para la solucin de ecuaciones diferenciales
rgidas. Escoger un mtodo de solucin depende de las caractersticas particulares
del sistema dinmico que estemos trabajando.

9.1.2.

Ejemplos Computacionales

MATLABr dispone de varias rutinas, o solvers, que utilizan algunos de los mtodos
presentados. En el Cuadro 9.112 se resean los diferentes solvers, los diferentes mr

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

234

GEDEM - Versin Preliminar

todos numricos que utilizan, y las situaciones en las cuales se recomienda el uso de
uno u otro. A continuacin presentamos algunas aplicaciones computacionales.
Comando
ode45odesolvers!ode45

Tipo de Problema
No Rgido

Algoritmo
Combinacin de un mtodo Runge-Kutta de cuatro
con uno de cinco evaluaciones, conocido como el
par de Dormand-Prince
Combinacin de un mtodo Runge-Kutta de orden dos con otro de orden
tres, denominado el par
de Bogacki-Shampine
Adams - Bashforth Moulton

ode23odesolvers!ode23

No Rgido

ode113odesolvers!ode113

No Rgido

ode15sodesolvers!ode15s

Rgido

Frmulas de Diferenciacin Numrica (opcionalmente: Frmulas de Diferenciacin hacia Atrs)

ode23sodesolvers!ode23s

Rgido

Frmula Modicada de
Rosenbrock

ode23todesolvers!ode23t

Moderadamente Rgido

ode23tbodesolvers!ode23tb

Rgido

Regla del Trapecio

Frmula Implcita
Runge-Kutta
r

Cuadro 9.1: Rutinas de MATLAB

de

para solucionar IVPs

Uso
Debe ser
lizarse: s
lucin en
diatamen
tiempo.
Cuando
cia de to
rigidez m

Cuando
ticularme
luar o la
escasa. E
tipaso.
Cuando
inecient
que el p
do. Es ta
multipas
Como es
solo paso
te que OD
una toler
la matriz
te.
Slo si
moderad
se neces
sin
a
numrico
Cuando
cias muy
cionar sis

SISTEMAS DINMICOS

235

Todos los solvers de ecuaciones diferenciales que incluye MATLABr utilizan la misma sintaxis. Por esta razn, proponemos los siguientes pasos generales para solucionar
un problema de valor inicial:

Paso 1: Denir en un m-file la ecuacin diferencial con la siguiente sintaxis:


f=odefun(t,x0,p1,p2,...), donde odefun es el nombre de la funcin.
Sus inputs son un vector con los valores correspondientes al tiempo (t), las
condiciones iniciales del problema (x0) y unos parmetros adicionales (p1,
p2,...). En el caso de un sistema de ecuaciones diferenciales con n variables,
se debe hacer un planteamiento matricial, siendo x0 un vector de tamao n 1
que contiene las condiciones iniciales de las n variables (ver el ejemplo 9.4).

Paso 2: En otro m-file, especicar las condiciones iniciales x0 y el intervalo


de tiempo t en el que se desea hallar la solucin. Este intervalo de tiempo
puede construirse de dos maneras. Una forma es colocar el valor inicial y nal
del tiempo, haciendo que el vector t sea de tamao 21. La otra posibilidad es
determinar los m momentos en que se desea evaluar la solucin numricamente,
donde el tamao del vector tiempo es m 1.

Paso 3: Fijar las opciones del solver para los distintos tipos de ecuaciones
diferenciales. El comando odegetodeget muestra los valores en los que estn
conguradas actualmente estas opciones y odesetodeset permite modicar
esta conguracin, a partir de la siguiente sintaxis:
options=odeset('Opcin1','Valor','Opcin2','Valor',...)
Entre otras, las principales opciones que se pueden congurar con odeset son:

Outputfcnodeset!Outputfcn : Establece la manera en que se ve la


solucin de la ecuacin diferencial. Existen cuatro posibles valores:
odeprintodeset!Outputfcn!odeprint (default): Despliega en la
Command Window, la solucin numrica del sistema dinmico para
las diferentes condiciones iniciales.
odeplotodeset!Outputfcn!odeplot : Muestra grcamente la solucin a la ecuacin diferencial. El eje horizontal corresponde al tiempo y el eje vertical a x(t).
odephas2odeset!Outputfcn!odephas2 : Contrasta grcamente
la solucin de la ecuacin diferencial a partir de dos condiciones ini-

236

GEDEM - Versin Preliminar


ciales diferentes. Cada eje corresponde a la solucin para cada una de
las condiciones iniciales.

odephas3odeset!Outputfcn!odephas3 : Es similar a odephas2


pero para tres condiciones iniciales.
Outputselodeset!Outputsel . Especica las componentes del vector
solucin que son utilizadas por Outputfcn. Su valor debe ser un vector
de nmeros enteros.
Statsodeset!Stats : Visualiza, en la Ventana de Comandos, las estadsticas del proceso de integracin numrica. Su valores son on y off
(default).
Jacobianodeset!Jacobian : Permite asignar una funcin que calcula
la matriz jacobiana de la ecuacin diferencial, con el n de reducir los
costos computacionales al calcular la solucin. Su valor debe ser el nombre
de la funcin.
Vectorizedodeset!Vectorized : Se establece en on cuando la
funcin odefun est vectorizada.
InitialStepodeset!InitialStep : Sugiere un tamao inicial de
paso13 . Su valor debe ser un escalar positivo.

Paso 4: Invocar el solver para hallar la solucin de la ecuacin diferencial,

utilizando la siguiente sintaxis:14

[T,X]=odesolver(@odefun,t,x0,options,p1,p2,...)
Donde los inputs corresponden a:

odefun: funcin donde est contenida la ecuacin diferencial.


t,x0: vector de tiempo y vector de condiciones iniciales previamente denidos.
options: vector que dene las opciones que el odesolver va a utilizar.
p1,p2,...: son los parmetros adicionales que puediera requerir la funcin
odefun.
r

Por default, las rutinas de MATLAB calculan automticamente el tamao del paso.
La sintaxis ms general es SOL=odesolver(@odefun,t,x0,options,p1,p2,...). Donde
SOL es una variable estructura.
13
14

SISTEMAS DINMICOS

237

Cuando la funcin utiliza los parmetros adicionales, y no se congura alguna


opcin, es necesario colocar [] en lugar de options, de modo que el solver no
interprete el valor de alguno de los parmetros como el valor de las opciones.
De otro lado, el solver entrega una serie de outputs, cuyas caractersticas son:

T: Un vector de tamao t 1 con los valores de la variable tiempo en los que


se calcul la solucin (tambin conocidos como pasos).
X: Una matriz de tamao t n, donde las columnas contienen la solucin de
la ecuacin diferencial para cada una de las n condiciones iniciales.
A continuacin presentamos distintos ejemplos que ilustran la forma de utilizar cada
solver de MATLABr , haciendo nfasis en las diferencias puntuales de cada rutina.
Debido al gran nmero de opciones existentes, intentamos generalizar al mximo el
uso de estas. La aplicacin exhaustiva de todas ellas, para cada ejemplo, se propone
como ejercicio para el lector.

Ejemplo 9.1. Encontremos computacionalmente la solucin, los equilibrios y estudiemos la estabilidad de la siguiente ecuacin diferencial:

x = 3 x
Tomando las siguientes condiciones iniciales: x0 = 1 y x0 = 5.
Al solucionar analticamente la ecuacin, encontramos que la solucin general es de
la forma x(t) = 3 et C , con un nico equilibrio en x = 3, que adems es estable. A
continuacin vamos a solucionar numricamente la ecuacin dinmica para comparar
las soluciones analtica y computacional.

Paso 1. Crear la ecuacin diferencial en el archivo ej1.m:


function dxdt=ej1(t,x);
dxdt=3-x;

Paso 2. En otro chero, jar las condiciones iniciales x0 y el intervalo de tiempo t


en el que se desea hallar la solucin:
t=[0:0.1:5]; % Se especican todos los momentos
x0=[1,5]; % Dos condiciones iniciales 1 y 5

238

GEDEM - Versin Preliminar

Paso 3. Denir las opciones del solver. En este ejemplo utilizamos outputfcn y
stats:
options=odeset('outputfcn',@odeplot,'stats','on');

Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Las caractersticas


de esta ecuacin diferencial permiten utilizar ode45:
[T,X]=ode45(@ej1,t,x0,options);
En la Ventana de Comandos se despliega un vector T, de tamao 51 1, que contiene
los momentos en el tiempo (pasos) en los que se evalu la solucin de la ecuacin
diferencial15 . Tambin se genera una matriz X, de tamao 51 2, que indica que ha
evaluado la solucin en 51 momentos (pasos) partiendo de dos condiciones iniciales.
Adems, las estadsticas del proceso son presentadas:

11
0
67
0
0
0

successful steps
failed attempts
function evaluations
partial derivatives
LU decompositions
solutions of linear systems

Finalmente, MATLABr arroja el diagrama de fase (t, x), evidente en la Figura 9.3.
Las dos trayectorias corresponden a cada condicin inicial, y los crculos a lo largo de
ellas, sealan los momentos en los que se evalu la solucin. As encontramos que el
equilibrio es x = 3 y es estable, por cuanto a partir de valores superiores e inferiores
se converge asintticamente.
Si deseamos visualizar el vector T y la matriz X sin generar el diagrama de fase, podemos hacer una pequea variacin en el Paso 3, deniendo la opcin Outputfcn
como odeprint. As, MATLABr nos presenta a T y a X en la Ventana de Comandos, sin gracarlos.
De otra parte, cuando tenemos diferentes condiciones iniciales, es posible, o deseable,
realizar comparaciones entre las diferentes soluciones. Si en el Paso 3 denimos
15

En este caso, el vector T resulta ser igual al vector t. Slo cuando el vector t tiene dos compor
nentes (t=[t0 tfinal]), MATLAB entrega un vector de salida T con un nmero diferente de
componentes.

SISTEMAS DINMICOS

239
dxdt=3x

4.5

3.5

2.5

1.5

0.5

1.5

2.5

3.5

4.5

Figura 9.3: Diagrama de Fase (t, x) de x = 3 x

Outputfcn como odephas2, el programa genera la grca que observamos en la


Figura 9.4. El punto inicial es (1,5), correspondiente a los dos valores de x en t0 ; y
el punto nal es (3,3), indicando que cada solucin converge a x = 3. Nuevamente,
los crculos a lo largo de la lnea indican los momentos en los que se evaluaron las
soluciones.
Cuando la ecuacin diferencial es ms compleja, identicar el punto inicial y el punto
nal resulta ms complicado. En estos casos, es posible observar que los ltimos
momentos son gracados automticamente con crculos de color verde.
Es necesario aclarar, que no siempre que las soluciones sean convergentes, el punto nal tendr ambas componentes iguales. Por ejemplo, cuando las soluciones convergen
a diferentes equilibrios, el punto nal no tendr las componentes iguales. El siguiente
ejemplo ilustra este caso, y la forma para poder identicar convergencia utilizando
odephas2.

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 ecuacin


diferencial:
16

Observemos que la solucin puede ser calculada a partir de cualquier momento del tiempo, no
es necesario iniciar en t0 = 0.

240

GEDEM - Versin Preliminar


dxdt=3x
5

4.8

4.6

4.4

4.2

x =5
0

3.8

3.6

3.4

3.2

1.2

1.4

1.6

1.8

2.2

2.4

2.6

2.8

x =1
0

Figura 9.4: Contraste de Dos Condiciones Iniciales con odephas2

x = 4x2 x3 x 6
Encontrar la solucin general de esta ecuacin resulta complicado. Sin embargo, no
es necesario encontrar la solucin para poder determinar que tiene tres equilibrios;
dos estables (x = 3 y x = 1), y uno inestable (x = 2). Calculemos la solucin
computacional y analicemos numricamente la estabilidad.

Paso 1. Crear la ecuacin diferencial en un chero llamado ej2:


function dxdt=ej2(t,x);
dxdt=4*x.^2-x.^3-x-6;

Paso 2. En otro m-file, denir las condiciones iniciales x0 y el intervalo de tiempo


t en el que se desea hallar la solucin:17

t=[0 3]; % Se especica t inicial y t nal


x0=[-1.5 -0.5 2.5 5]; % Separados por espacios

Paso 3. Denir las opciones del solver. Aqu vamos a utilizar las opciones18 outputfcn
17

Aqu denimos el vector tiempo y el vector x0 de una manera alternativa.


Notemos que la funcin odephas2 la invocamos de una manera diferente a la utilizada en el
Paso 3 del ejemplo 9.1.
18

SISTEMAS DINMICOS

241

y outputsel:
options=odeset('outputfcn','odephas2','outputsel',[1 3]);

Paso 4. Invocar el solver para hallar la solucin a la ecuacin. El solver que utilizamos es ode45:19

[T,X]=ode45(@ej2,t,x0,options);

El vector t contiene slo 2 elementos, correspondientes al momento inicial y al momento nal de evaluacin, y obtenemos un vector salida T de tamao 2501 1 cuyos
elementos inician y terminan en estos dos valores, pero entre los que tambin se encuentran todos los dems momentos en que se evalu la solucin. De esta manera,
cuando t contiene 2 elementos, no es posible controlar los momentos y el nmero de
componentes adecuado es determinado por el solver. MATLABr tambin genera un
vector X de tamao 2501 4, lo que signica que el proceso de solucin de la ecuacin diferencial se hizo en 2501 momentos a partir de cuatro diferentes condiciones
iniciales.
Al denir outputsel con el vector [1 3], le indicamos al solver que las condiciones
que queremos contrastar, con odephas2, son la uno y la tres, es decir: x0 = 1.5 y
x0 = 2.5. En la Figura 9.5 es posible observar la convergencia de ambas soluciones
dado que los crculos correspondientes a los ltimos momentos se encuentran ms
cerca unos a otros que los crculos de los momentos iniciales. Esto signica que el
cambio en cada una de las soluciones, a medida que transcurre el tiempo, es cada vez
ms pequeo. Adems, es claro que cada solucin converge a un equilibrio diferente
porque el punto nal es (-1,3), indicando que la solucin de la primer condicin
converge al equilibrio x = 1, mientras que la segunda lo hace a x = 3.
A partir de la grca podemos comparar cul de las dos soluciones converge ms
rpido. La solucin de la primer condicin inicial converge ms rpido que la tercera,
dado que la curva, en los ltimos momentos, es casi vertical: el cambio en la solucin
de x0 = 1.5 es casi cero, mientras que el de la tercera sigue siendo relativamente
grande, aunque cada vez menor.
19

En realidad, las soluciones de los diferentes solvers son similares, por lo que hemos escogido el
solver ms sencillo (ode45).

242

GEDEM - Versin Preliminar


2

dxdt=4x x x6
3

2.95

2.9

2.85

2.8

x =2.5
2.75
0

2.7

2.65

2.6

2.55

2.5
1.5

1.4

1.3

1.2

1.1

0.9

0.8

x =1.5
0

Figura 9.5: Comparacin de las Condiciones x0 = 1.5 y x0 = 0.5


Cuando ninguna de las soluciones converge, los crculos nunca se acercan unos a
otros y, por el contrario, tienden a separarse (ver Ejercicio 7). Una situacin muy
parecida, en la cual los crculos no se acercan unos a otros, sucede cuando una de las
soluciones no converge, mientras que la otra s. En este caso, la grca muestra una
curva horizontal, o vertical, dependiendo de cual de las dos soluciones sea convergente
(ver Ejercicio 8).
En resumen tenemos que si los crculos, de la grca obtenido con la funcin odephas2,
tienden a acercarse unos a otros, entonces tenemos que ambas soluciones son convergentes; y si adems se presentan tendencias extremas como una curva horizontal
o vertical, entonces alguna de las soluciones se encuentra convergiendo ms rpidamente que la otra. Por otro lado, cuando no observemos un acercamiento de los
crculos, la existencia de una curva horizontal o vertical es indicio de que una de las
soluciones converge, mientras que la otra no20 .
La funcin odephas3 nos permite extender el anlisis comparativo a tres condiciones
iniciales. En este caso, la grca es visualizada en tres dimensiones. Los criterios de
convergencia son iguales a los de odephas2, siempre y cuando se tenga en cuenta que
20

Es claro que esta forma de identicar convergencia, adems de resultar muy subjetiva, depende ampliamente de la escala adoptada en cada eje, y slo es aplicable a ecuaciones diferenciales
autnomas. Recomendamos complementar el anlisis basado en odephas2, con diagramas de fase
(odeplot).

SISTEMAS DINMICOS

243

se trata de una grca 3D. La Figura 9.6 muestra la grca obtenida con odephas3,
para las condiciones iniciales: x0 = 1.5, x0 = 0.5 y x0 = 2.5.
2

dxdt=4x x x6

2.9

2.8

x =2.5
0
2.7

2.6

2.5
0.4
0.8

0.6
0.9
1

0.8

1.1
1.2

x =0.5
0

1.3
1.2

1.4
1.5

x0=1.5

Figura 9.6: Contraste de Tres Condiciones Iniciales con odephas3

Ejemplo 9.3. Resolvamos la siguiente ecuacin diferencial no autnoma:


x =

b atx2
x

Con las cuatro condiciones iniciales: x0 = 8, x0 = 2, x0 = 4 y x0 = 10, en


el intervalo [0, 15]. Esta ecuacin no es separable, no es homognea y solucionarla
analticamente es un proceso complejo. Veamos su solucin computacional con a =
0.4 y b = 30:

Paso 1. Crear la ecuacin diferencial en un m-file:


function dxdt=ej3(t,x0,a,b);
dxdt=(b-a*t.*x.^2)./x;

% Parametros Adicionales

Paso 2. En otro chero, denir las condiciones iniciales x0, el intervalo de tiempo
t y los valores de los parmetros a y b:

244

GEDEM - Versin Preliminar


t=[0 15];
x0=[-8 -2 4 10];
a=0.4; b=30; % Denicion de los Parametros

Paso 3. Denir las opciones del solver. En este ejemplo no utilizamos opciones.
Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Las caractersticas de
esta ecuacin diferencial hacen necesario utilizar una rutina para ecuaciones
rgidas:21
[T,X]=ode23tb(@ej3,t,x0,[],a,b);
Dado que hemos decidido no especicar ninguna opcin, debemos utilizar los parntesis cuadrados ([]) al momento de invocar la rutina. De lo contrario, el programa
interpreta el valor del primer parmetro como el valor de las opciones.
2

dxdt=(300.4tx )/x
30

20

10

x(t)

10

20

30

10

15

Figura 9.7: Diagrama de Fase (t, x) de x =

batx2
x

Al igual que en cualquier ecuacin diferencial no autnoma, el o los equilibrios se encuentran en funcin del tiempo. En este caso, la ecuacin que describe los equilibrios
(x = 0) es:
21

Cuando a toma valores grandes, o cuando la solucin se realiza para valores de t muy altos,
el proceso de integracin numrica presenta problemas. Es posible utilizar cualquier rutina para
solucionar ecuaciones diferenciales rgidas. Hemos escogido ode23tb por su mayor velocidad de
solucin en este problema particular.

SISTEMAS DINMICOS

245

r
x
e(t) =

b
at

Si utilizamos la opcin odeplot obtenemos el diagrama de fase (t, x) (Figura 9.7),


en el que podemos observar que las trayectorias de equilibrio son estables porque,
al partir de condiciones iniciales diferentes, las soluciones siempre convergen hacia
ellas.
Hasta ahora hemos resuelto una ecuacin diferencial a la vez, ahora presentaremos
una generalizacin para la solucin de sistemas de ecuaciones diferenciales. El siguiente ejemplo ilustra el procedimiento de solucin de un sistema de 2 2.

Ejemplo 9.4. Resolvamos computacionalmente el siguiente sistema de ecuaciones:

v = 10u + 7v
u = u + 4v
Con la condicin inicial v0 = 1 y u0 = 0, en el intervalo [0, 0.5].
La solucin analtica del sistema dinmico, dadas las condiciones iniciales, viene dada
por las siguientes ecuaciones:

v(t) = 0.7143 e11t + 0.2857 e3t


u(t) = 0.2857 e11t 0.2857 e3t
El nico equilibrio es v = 0 y u = 0 y, dados los valores propios de la matriz (1 = 11,
2 = 3), sabemos que se trata de un equilibrio de punto de silla.
Ahora calculemos numricamente la solucin y comparemosla con la solucin anterior.

Paso 1. Denir el sistema dinmico en el archivo ej4.m

246

GEDEM - Versin 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;
dudt=u+4*v;

% Sistema dinamico

dxdt=[dvdt; dudt];
% componente 1 de dxdt es dvdt
% componente 2 de dxdt es dudt

Paso 2. En otro chero, denir el intervalo de tiempo t y las condiciones iniciales


x0:
t=[0 0.5];
v0=1;
u0=0;
x0=[v0; u0];
% componente 1 de x0 es v0
% componente 2 de x0 es u0

Paso 3. Denir las opciones del solver. En este ejemplo utilizamos odeplot como
funcin de salida:
options=odeset('outputfcn','odeplot');

Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Utilizamos la rutina


ode45:22

[T,X]=ode45(@ej4,t,x0,options);
En este caso, para solucionar el sistema dinmico, creamos una vector x que contiene
a las variables v y u. De esta forma, el vector de condiciones iniciales x0 tiene los
valores de las condiciones iniciales para cada variable (v0 y u0); y el vector dxdt
22

Dado que el mximo valor propio de la matriz asociada al sistema no es mucho ms grande,
en valor absoluto, que el valor propio ms pequeo, estamos seguros que el sistema dinmico no es
rgido.

SISTEMAS DINMICOS

247

tiene los valores de la derivada de cada variable con respecto al tiempo (dvdt y
dudt). Al plantear de esta forma el sistema dinmico, las rutinas de MATLABr
pueden solucionar simultneamente ambas ecuaciones. Como salidas, ode45 genera
un vector T, de tamao m1, que contiene los momentos de evaluacin de la solucin;
y una matriz X, de tamao m 2, donde las columnas son la solucin para cada
variable.23
La funcin odeplot genera simultneamente los diagramas de fase (t, v ) y (t, u) en la
misma grca (ver Figura 9.8 a.). Por otro lado, si utilizamos la funcin odephas2
obtenemos el diagrama de fase (v, u) (Figura 9.8 b.). En ambas grcas podemos
observar que las soluciones para cada variable son no convergentes.
a)

b)

150

70

60

50
100
40

v(t)
u(t)

u(t)

v(t)

30

u(t)

50

20

10

0
0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

0
0

20

Figura 9.8: a) Diagramas de Fase (t, v) y (t, u)

40

60

80

100

120

140

160

180

v(t)

b) Diagrama de Fase (v, u)

Para poder observar que (0,0) es un equilibrio de punto de silla es necesario tomar
en cuenta ms condiciones iniciales alrededor de este punto. Sin embargo, considerar
ms condiciones implica un problema, ya que las rutinas de MATLABr , a pesar de
solucionar sistemas dinmicos de varias variables, no permiten solucionarlos para ms
de una condicin inicial a la vez. Si, por ejemplo, necesitamos comparar las soluciones
de dos condiciones iniciales, debemos solucionar dos veces el sistema dinmico. El
siguiente ejemplo presenta la solucin del sistema para 3 condiciones iniciales, por
medio de la rutina rk4.
23

Cuando trabajamos con una sola ecuacin diferencial, si la matriz obtenida X tena un tamao
de mn, esto signicaba que la solucin era calculada en m momentos, para n condiciones iniciales.
Ahora, el tamao m n de la matriz X indica que se han calculado las soluciones de n variables
para m momentos.

248

GEDEM - Versin Preliminar

Ejemplo 9.5. Queremos solucionar el mismo sistema de ecuaciones del ejemplo


anterior, en el intervalo [0, 0.25], para las siguientes 3 condiciones iniciales:

1. (v0 , u0 ) = (10, 9)
2. (v0 , u0 ) = (10, 10)
3. (v0 , u0 ) = (10, 11)
Para poder solucionar el sistema dinmico simultneamente para las 3 condiciones,
vamos a utilizar el solver rk4, que hace parte del toolbox CompEcon. Como su
nombre lo indica, esta rutina utiliza el mtodo de Runge - Kutta de cuarto orden
para hallar la solucin. El comando presenta la misma sintaxis de los odesolvers
de MATLABr , aunque no existe la posibilidad de denir algn tipo de opciones. Es
necesario resaltar que el solver utiliza un tamao de paso jo, por lo que slo puede
ser utilizado para solucionar sistemas dinmicos no rgidos. Por tal razn, la nica
forma de solucionar un sistema rgido, para las diferentes condiciones iniciales, es por
medio de una programacin especial que involucra varias iteraciones (ver ejercicio
9).
A continuacin presentamos el procedimiento de solucin:

Paso 1. Denir el sistema dinmico en un m-file llamado ej5:


function dxdt=ej5(t,x,ag); % Requiere ag
v=x(1); % la sintaxis es la misma que en ej4.m
u=x(2);
dvdt=10*u+7*v;
dudt=u+4*v;
dxdt=[dvdt; dudt];

Paso 2. En otro archivo, denir las condiciones iniciales x0 y el intervalo de tiempo


t:
t=[0:0.05:0.5]';
v0=[10 10 10];
u0=[-9 -10 -11];
x0=[v0; u0];

% Vector Columna con Momentos

SISTEMAS DINMICOS

249

Paso 3. No es posible denir opciones.


Paso 4. Invocar el solver para hallar la solucin a la ecuacin.
[T,X]=rk4('ej4',t,x0);

Para utilizar rk4 debemos introducir flag en la sintaxis de la funcin. Esto simplemente es utilizado para que, al igual que las rutinas de MATLABr , el solver pueda
aceptar como entradas los parmetros adicionales. En este ejemplo no utilizamos
parmetros adicionales, pero en la aplicacin econmica ser de gran importancia la
denicin de estos parmetros para poder realizar simulaciones.
Observemos que la denicin del vector tiempo tambin cambia. Mientras que para
las rutinas de MATLABr no importa si el vector tiempo es un vector la o columna,24 el solver rk4 requiere que el vector de tiempo sea columna, y que contenga
todos los momentos de evaluacin. En el Paso 2 creamos un vector la, con valores
entre 0 y 0.5, y luego lo trasponemos para obtener el vector t.
Los vectores v0 y u0 debemos denirlos de tal forma que la primer componente de
ambos vectores generen la primer condicin inicial, y as sucesivamente. As, la tercer
componente del vector v0 junto con la tercer componente del vector u0 conforman
la tercer condicin inicial. Esto tambin implica que cada una de las columnas de la
matriz x0 es una condicin inicial.
Como resultado obtenemos el vector T de 11 1, igual al vector t, y la hipermatriz
X de 11 2 3. Las dimensiones de X indican que solucionamos un sistema con 2
variables, para tres condiciones iniciales, en 11 momentos diferentes. Al contrario de
los solvers de MATLABr , la rutina rk4 no genera ningn tipo de grca, debemos
gracar manualmente los diagramas de fase:

Diagramas de Fase (t, v) y (t, u): Para generar los diagramas de fase para cada una de las variables, necesitamos utilizar el comando squeeze para
remover una de las dimensiones de la hipermatriz,25 y luego gracar contra
el tiempo. Por ejemplo, para gracar el diagrama de fase (t, v ) tenemos que
remover la dimensin de la variable u:
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 dimensin de una matriz. Vase Cuadro 2.1, pg. 33.

250

GEDEM - Versin Preliminar


plot(t,squeeze(X(:,1,:)))
En este caso, la segunda dimensin corresponde a u. Si deseamos generar el
diagrama de fase (t, u) debemos remover la primera dimensin:
plot(t,squeeze(X(:,2,:)))
En ambos diagramas de fase, Figura 9.9, se observa que para dos de las condiciones iniciales las soluciones de ambas variables son explosivas, mientras que
para la otra, los valores de v y u se acercan lentamente hacia 0.
a)

b)

200

80

150

60

100

40

50

20

u(t) 0

50

20

100

40

150

60

v(t)

200
0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

80
0

Figura 9.9: a) Diagrama de Fase (t, v)

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

b) Diagrama de Fase (t, u)

Diagrama de Fase (v, u): Para gracar este diagrama de fase, tambin es necesario utilizar squeeze. Sin embargo, ahora gracamos una dimensin versus
la otra, as:
plot(squeeze(X(:,1,:)),squeeze(X(:,2,:)))
De esta forma obtenemos el diagrama de fase (v, u) evidente en la Figura 9.10.
Como se puede observar, las condiciones (10,-9) y (10,-11) generan soluciones
inestables que se alejan rpidamente del equilibrio. Por otro lado, la condicin
inicial (10,-10) sigue una trayectoria hacia el equilibrio (0,0). Si hubiramos
calculado la solucin para un intervalo de tiempo ms grande, observaramos
cmo la trayectoria que parte en (10,-10) naliza en el punto de equilibrio.

SISTEMAS DINMICOS

251

15

10

u(t) 0

10

15
25

20

15

10

10

15

20

25

v(t)

Figura 9.10: Diagrama de Fase (v, u)


Para determinar que efectivamente el equilibrio es de silla es necesario tomar ms
condiciones iniciales alrededor de (0,0). El resultado que se obtiene es consistente
con la solucin analtica del problema.

9.1.3.

Aplicaciones Econmicas

El Modelo de Crecimiento de Solow


Modelo de Crecimiento de Solow
El modelo de crecimiento de Solow es uno de los modelos ms utilizados en el anlisis
econmico de muy largo plazo. El modelo fue propuesto por el economista Robert
Solow en un artculo publicado en 1956 en el Quarterly Journal of Economics,26 en
el que buscaba contrastar los resultados obtenidos en el modelo de Harrod - Domar
con los resultados de un modelo en el que se mantenan los mismos supuestos pero la
funcin de produccin agregada cambiaba. Suponiendo la existencia de una funcin
agregada con rendimientos constantes a escala, Solow logra encontrar, al contrario
de Harrod - Domar, que el equilibrio de largo plazo es estable.
Con el objetivo de aplicar las herramientas computacionales presentadas en las secciones anteriores, a continuacin presentamos el modelo bsico y su respectiva pro26

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 - Versin Preliminar

gramacin.27
Modelo:
Suponemos que existe un slo bien en la economa; su nivel de produccin en el
momento t es Yt . Una parte de esta produccin es consumida y la otra es ahorrada.
La fraccin del producto que se ahorra es constante y viene determinada por la
propensin marginal a ahorrar s, as que el ahorro total en el momento t es St = sYt .
El stock de capital, Kt , consiste en la acumulacin del nico bien de la economa. El
cambio en el tiempo de este stock de capital (dKt /dt o K t ) es la inversin neta.28
Adems, como el ahorro siempre es igual a la inversin tenemos la siguiente identidad
bsica en cada instante del tiempo:

K t = sYt

(9.17)

El nico bien de la economa es producido utilizando capital y trabajo. La tecnologa


disponible en la economa se encuentra representada por la siguiente funcin de
produccin:

Yt = F (Kt , Lt )

(9.18)

Adems se supone que la produccin presenta rendimientos constantes a escala, por


lo que esta funcin se supone homognea de grado uno.29
Introduciendo (9.18) en (9.17) obtenemos:

K t = sF (Kt , Lt )

(9.19)

Por otro lado, como resultado de un crecimiento exgeno y continuo de la poblacin,


la fuerza laboral L se incrementa a una tasa constante n, es decir:

Lt = L0 ent
27

(9.20)

En esta seccin nuestro objetivo es presentar la programacin computacional del modelo de


Solow. Para una exposicin terica ms profunda recomendamos revisar el siguiente libro (?), el
artculo original o cualquier texto gua del primer curso de macroeconoma.
28
Hablamos de inversin neta pues suponemos que no hay depreciacin de capital. Cuando existe
depreciacin de capital, la inversin neta es igual a la inversin bruta descontando la depreciacin.
La programacin del modelo con depreciacin se deja como ejercicio para el lector (ver ejercicio 11).
29
Adems del supuesto de homogeneidad de grado uno, por lo general se supone que la funcin
de produccin cumple las siguientes condiciones: FK > 0, FL > 0, FKK < 0, FLL < 0, FKL > 0 y
las denominadas condiciones de Inada.

SISTEMAS DINMICOS

253

En (9.19) L es el empleo total y en (9.20) L es la oferta disponible de trabajo. Asumiendo que la economa siempre se encuentra en pleno empleo, es posible introducir
(9.20) en (9.19) obteniendo:

K t = sF (Kt , L0 ent )

(9.21)

La anterior es una ecuacin diferencial de una sola variable, K(t), que determina la
senda de acumulacin de capital consistente con el pleno empleo de la fuerza laboral
disponible en cada momento del tiempo.
Una vez conocemos las sendas del stock de capital y de la fuerza de trabajo, junto
con la funcin de produccin, podemos calcular la senda temporal del producto real.
Con estas tres podemos calcular la productividad marginal del trabajo y del capital,
y por consiguiente el salario real y la tasa de inters.
Nos interesa reexpresar la ecuacin (9.21) en trminos per cpita puesto que no es
correcto decir que un pas es ms rico porque produce ms que antes; ms bien se
considera que un pas es ms rico si sus habitantes, en promedio, producen ms que
antes.30 Por otro lado, plantear el modelo en variables per cpita resulta conveniente
desde el punto de vista analtico, dado que permite caracterizar grcamente la
ecuacin diferencial.
La ecuacin (9.22) dene la variable k como la relacin capital trabajo. Esta relacin
indica el nmero de mquinas, o cualquier otro bien de capital, que hay por cada
trabajador.

kt =

Kt
Lt

(9.22)

Para calcular la tasa de crecimiento de la variable k , sacamos logaritmo a ambos


lados de la ecuacin y luego derivamos con respecto al tiempo obteniendo:

kt
K t L t
=

kt
Kt Lt

(9.23)

Reemplazando la tasa de crecimiento de la fuerza de trabajo y la ecuacin (9.21)


obtenemos:
30

(?, p. 19)

254

GEDEM - Versin Preliminar

kt
sF (Kt , Lt )
=
n
kt
Kt

kt
1
= sF 1,
n
kt
kt

kt = skF 1,
nkt
kt
kt = sF (kt , 1) nkt

(9.24)

La funcin F (kt , 1) representa la produccin total generada por k unidades de capital


per cpita, cuando una unidad de trabajo es utilizada. De esta forma, el primer
trmino de la ecuacin (9.24) correspondera a la fraccin ahorrada de la produccin
por habitante. El segundo trmino indica que el stock de capital disminuye como
consecuencia del crecimiento de la poblacin. Finalmente es posible observar que el
capital per cpita crece, decrece y es constante cuando el ahorro per cpita es mayor,
menor e igual que el trmino nkt .
Hasta el momento slo hemos denido algunas propiedades generales de la funcin de
produccin, pero al programar debemos utilizar una funcin de produccin especca.
En este caso vamos a trabajar con la funcin de produccin tipo Cobb - Douglas31
con = 0.5 y = 0.5. Por lo tanto la funcin de produccin per cpita es:

F (Kt , Lt ) = Kt0.5 L0.5


t
F (kt , 1) = kt0.5 10.5
F (kt , 1) = kt0.5
Tambin es necesario denir unos valores para las tasas de ahorro y crecimiento de
la poblacin. Suponemos que s = 15.5 % y n = 2.2 %. A continuacin presentamos
la respectiva programacin del modelo.
Programacin:
En primer lugar debemos crear un m-file, llamado fsolow.m, en el cual vamos a
especicar la ecuacin diferencial (9.24). Al contrario de los ejemplos anteriores, en
los cuales la nica funcin especicada en el m-file era la ecuacin diferencial, en
el mismo chero vamos a denir kt y la funcin de produccin per cpita:
31

Ver caps. 4,5 y 7

SISTEMAS DINMICOS

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 lneas de programacin son utilizadas para denir la ecuacin diferencial (9.24). Observemos que la funcin de produccin no es denida en estas
lneas, simplemente es referenciada. La funcin de produccin tipo Cobb-Douglas es
especicada en las dos ltimas lneas del programa. Esta forma de programacin es
muy utilizada por cuanto permite disminuir el nmero de cheros destinados para el
modelo al tiempo que genera mayor exibilidad en la especicacin del mismo.
El siguiente paso consiste en construir un nuevo chero, llamado solowprog.m, en
el cual vamos a denir los parmetros del modelo y a invocar la rutina de solucin
ode45.
clear; clc; close all
alpha=0.5; s=0.155; n=0.022;
t=[0:0.1:40];
k0=2;
options=odeset('outputfcn','odeplot');
Vamos a considerar un horizonte de tiempo de (0,40) y, al igual que cualquier problema de valor inicial, es necesario imponer una condicin inicial por lo que k0 = 2.
La rutina de solucin y sus opciones son invocadas de la misma forma que en los
ejemplos anteriores.
[T,K]=ode45(@fsolow,t,k0,options,alpha,s,n);
El diagrama de fase (t, k) muestra que el capital per cpita de equilibrio corresponde
a k = 49, 63

El Modelo de Crecimiento de Ramsey


Modelo de Crecimiento de Ramsey

El Modelo de Ciclo de Goodwin

9.2. Ecuaciones en Diferencia y Dinmica Discreta

256

GEDEM - Versin Preliminar


Modelo de Solow
41.8

41.6

41.4

41.2

41

kt
40.8

40.6

40.4

40.2

40

10

20

30

40

50

60

70

80

90

100

Figura 9.11: Diagrama de Fase (t, kt )

Ejercicios
1) Considere el siguiente Problema de Valor Inicial:

x = 4x
x0 = 2
a) Calcule la solucin numrica utilizando el script del mtodo de Euler y del
mtodo RK2, presentados en la primera seccin del captulo. La solucin numrica debe calcularse para 10 momentos, y para el intervalo de tiempo [0, 2]
(Tenga en cuenta que debe calcular el tamao de paso adecuado para cubrir
el intervalo de tiempo en 10 momentos).
b) Graque la solucin algebraica y numrica de ambos mtodos en una misma
gura. Existe alguna diferencia entre los dos mtodos?
c) Construya un m-file en el que el tamao del paso itere tomando 20 valores. Estos valores deben encontrarse entre 0.05 y 1, y deben estar igualmente
espaciados (Ayuda: utilice el comando linspace para generar este vector).
Solucione el IVP considerado para 10 momentos y un tiempo inicial t0 = 0.
Genere una gura para cada valor de h en la que se muestren las soluciones
de ambos mtodos junto con la solucin algebraica. Qu sucede al cambiar
el tamao del paso?Qu mtodo es ms estable?

SISTEMAS DINMICOS

257

2) Realice la programacin del mtodo de Runge - Kutta de cuarto orden presentado


en la pgina 223. El programa debe requerir los mismos inputs que el script del
mtodo RK2.
a) Solucione el IVP del ejercicio 1 con la programacin desarrollada. Los parmetros utilizados son los mismos que en el literal a.
b) Compare grcamente la soluciones obtenidas por el mtodo RK2 y el RK4
con la solucin algebraica.
c) Qu sucede si aumenta el tamao del paso?

3) Compare grcamente la solucin por el mtodo de Adams - Bashforth con el


mtodo de Adams - Bashforth - Moulton, en el intervalo [t, t + h]. De la siguiente
ecuacin diferencial:

x =
x0 =
Cul es ms sensible a cambios en el tamao del paso?.

4) Considere problema de valor inicial del ejercicio anterior.


a) Genere una matriz A202 donde la primer columna sea la solucin obtenida
por el comando ode113 y la segunda la del script del algoritmo Adams Bashforth - Moulton de la pgina 230.
b) Calcule el vector columna d cuyas componentes cumplan la siguiente regla:
dj = aj1 aj2 .
c) Graque d contra el tiempo. Qu nos dice este resultado?
(Aunque el mtodo utilizado sea el mismo, la diferencia radica en que el comando
de MATLABr incorpora algoritmos adicionales para cambiar el tamao del paso
segn sea necesario, permitiendo una mejor aproximacin a la solucin).

5) Construya un m-file en el que se muestre grcamente que el uso del mtodo


modicado de Euler soluciona el problema de integracin numrica de la siguiente
ecuacin diferencial rgida:

x = 10x

258

GEDEM - Versin Preliminar

6) Considere el siguiente problema de valor inicial:

x = b ax
x0 = 1.8
a) Construya un chero en el que, utilizando el comando tic toc de MATLABr ,
se compare el tiempo que requiere ode23 y ode23tb para solucionar el sistema en el intervalo de tiempo [0,0.5]. Tome a = 10, b = 20 y no especique
los momentos de evaluacin.
b) Asuma a = 10 y calcule el tiempo requerido por cada solver para 5 diferentes
valores de b entre 20 y 1000. Qu sucede con el tiempo de solucin a medida
que b toma valores ms grandes? Cul de las dos rutinas toma ms tiempo
para solucionar el problema?
c) Fije b = 100 y calcule el tiempo requerido por cada solver para 5 diferentes
valores de a entre 10 y 10000. Qu sucede con el tiempo de solucin a
medida que a toma valores ms grandes? Cul de las dos rutinas toma ms
tiempo para solucionar el problema?
d) Por qu una rutina es ms lenta que la otra? Explique.

7) Necesito una ecuacin diferencial que tenga un equilibrio inestable. Las dos condiciones iniciales no llevan al equilibrio. Ponerlos a gracar con odeplot y odephas2.

8) Necesito un IVP con dos condiciones iniciales, donde una converja y la otra no.
Ponerlos a gracar con odeplot y odephas2.

9) En el ejemplo 9.5, si el sistema dinmico planteado fuera rgido, no sera posible


utilizar la rutina rk4. Esto plantea un problema para solucionar simultneamente
sistemas de ecuaciones rgidos para varias condiciones iniciales.
Utilizando cualquier rutina de MATLABr para problemas rgidos, y con ayuda
del comando for, construya un programa en el que en cada iteracin se encuentra
la solucin para cada condicin inicial. El programa debe aceptar como entradas
el nombre de la funcin que contiene el sistema dinmico, las condiciones iniciales,
el intervalo de tiempo, y algunos parmetros adicionales. Como resultado, se debe
obtener un vector T y una hipermatriz X de m n d.

10) Programe la funcin que contiene la ecuacin diferencial en el modelo de Solow,


de tal forma que acepte un parmetro p. Si el valor del parmetro es p = 0

SISTEMAS DINMICOS

259

entonces la funcin de produccin agregada es f (k) = min{ k , 1 }. Si el valor del


parmetro es p = 1 entonces la funcin de produccin es f (k) = k . El chero
debe aceptar como inputs (t, k, alpha, beta, p, s, n, d).

11) Extienda y programe el modelo de Solow incorporando la depreciacin de capital.


Suponga que el capital se deprecia a una tasa constante d.32

12) Utilizando el comando gradient determina la senda del salario real y la tasa de
inters del ejemplo planteado en la pgina 37.

32

Observe que la depreciacin total es: D = dK(t).

260

GEDEM - Versin Preliminar

Bibliografa
Blanchard, Olivier. 1989. Lectures on Macroeconomics. The MIT Press.
Draper, J., y Klingman J. (1979). Matemticas para Administracin y Economa.
5.a Reimpresin. HARLA S.A., Mxico.
Fackler, P., y Mario Miranda. 2003. Applied Computational Economics and Finance.
The MIT Press.
Garca de Jaln, Javier et al. 2001. Aprenda Matlab 6.1 como si estuviera en
primero. Escuela superior de Ingenieros Industriales. Universidad Politcnica de
Madrid.
Grossman, Stanley. 1996. Algebra Lineal. 5a. Mc. Graw Hill.
Judd, Kenneth. 1998. Numerical Methods in Economics. Cambridge : The MIT
Press.
Kincaid, D., y Cheney W. 1994. Anlisis Numrico: Las Matemticas del Clculo
Cientco. Addison-Wesley Iberoamericana, Delaware.
Leithold, L. (1979). El Clculo con Geometra Analtica. 17.a Reimpresin. HARLA
S.A., Mxico.
Mantilla, Ignacio. (2004). Anlisis Numrico. 1.a Edicin. Universidad Nacional
de Colombia.
Monsalve, Sergio, ed. (2004). Matemticas Bsica para Economistas 3: Optimizacin y Dinmica. Mimeo: Universidad Externado de Colombia - Universidad
Nacional de Colombia.
. 2005a. Matemticas Bsicas para Economistas 0: Fundamentos. Universidad Nacional de Colombia y Universidad Externado de Colombia.
. 2005b. Matemticas Bsicas para Economistas 2: Clculo. Universidad
Nacional de Colombia y Universidad Externado de Colombia.
261

262

GEDEM - Versin Preliminar

Mora, Hector. 2001. Optimizacin no lineal y Dinmica. 2a. Universidad Nacional


de Colombia. Facultad de Ciencias.
Nicholson, Walter. 1997. Teora Microeconmica: principios bsicos y aplicaciones.
6a. McGraw-Hill.
Sydsaeter, K., y Peter Hammond. (1996). Matemticas para el Anlisis Econmico.
Prentice Hall, Madrid.

ndice alfabtico
acos, 53
alignment, 102
atan, 51
axis, 101
cat, 32
chol, 47, 78
clabel, 106
clc, 9
clear, 9
close, 9
color, 102
colorbar, 109
colormap, 108
contour, 106
contour3, 106
cross, 52, 63
cumtrapz, 171
dblquad, 177
det, 74
diag, 82
diff, 141, 152, 163
doc, 17
dot, 52
eig, 65
eps, 83
fdhess, 154, 188
fdjac, 142
fhess, 188
fjac, 142
font, 102

for, 14, 82
get, 103
gradient, 138, 149
grid, 100
help, 17
if, 13
inf, 98
inline, 94
inv, 73
ipermute, 35
legend, 100
line, 100, 102
linestyle, 102
linewidth, 102
lu, 46, 76
marker, 102
markersize, 102
mesh, 105
meshgrid, 57, 104
min, 191
ndims, 34
norm, 49
orth, 55
permute, 35
plot, 95, 188
plot3, 105
polyder, 136, 148
polyint, 169
qnwsimp, 175
qnwtrap, 173
263

264

quad, 175
rref, 70
rrefmovie, 71
set, 103
size, 33
sparse, 37
squeeze, 34
subplot, 101, 115
surf, 105
syms, 163
texlabel, 100
text, 100
title, 100
trapz, 171
view, 101
xlabel, 100
ylabel, 100
zlabel, 100
svd, 50
Inputs, 10
Apndice
integracin, 179
Bifurcacin, 13
Bucle, 13
Cell Array, 24
cell-array, 122, 124
comandos, 234-236
Comentarios, 7, 8
Command History, 5
Command Window, 2
CompEcon, 2
Compecon Toolbox, 173, 175
Concavidad, 183
Conjunto

GEDEM - Versin Preliminar

de llegada, 94
de salida, 94
Conjuntos
contorno inferior, 185
contorno superior, 185
constante de integracin, 169
Contador, 14
Convexidad, 183
Current Directory, 6
Curvas de nivel, 185
Derivacin de orden superior, 147
Derivacin de primer orden, 136
ejm8, 54
Entradas, 10
Error de Truncamiento, 137
Expansin de Taylor, 156
Funcin, 94
cncava, 184
CES, 126
Cobb-Douglas, 125, 128
convexa, 184
cuasicncava, 184
cuasiconvexa, 184
de dos variables, 103
visualizacin de, 103
de una variable, 94
visualizacin de, 94
discontinua, 98, 99
dominio de una, 94
Leontieff, 128
Lineal, 128
Mnimo, 128
parmetros de, 114
rango de una, 94
recorrido de una, 94

SISTEMAS DINMICOS

univariada, 188
Funcin Cobb-Douglas, 145
Funcion
CARA, 132
CRRA, 132
Funciones, 10, 93
econmicas, 124

265

directos, 70
factorizacin de Cholesky, 78
factorizacin de Crout, 76
indirectos, 70, 79
iterativos, 70
numricos, 70, 79
Matrices, 29

Gauss-Jacobi, 80, 81, 87


Gauss-Seidel, 80, 83
Grfico
opciones de, 99, 108

a partir de vectores, 57
de coeficientes, 69
de descomposicin, 80, 81, 83
determinante de, 43
dispersas, 36

Hipermatrices, 31, 35
comandos para, 33
imagen, 94
integracin, 167
integracin definida, 168
integracin indefinida, 168
integral, 169
Integrales Dobles, 176
Iteracin, 11
regla de, 80, 81, 83

comandos para, 37
divisin de, 41
divisin izquierda, 41
factorizables, 46
factorizacin de Cholesky, 47
factorizacin LU, 46
generadas automticamente, 37
introduccin de, 30
inversa de, 43
multiplicacin de, 41
norma de, 43

Launch Pad, 3

operaciones entre, 41

M-File, 6, 8, 9
Mtodo
analtico, 11
Gauss-Jordan, 70
inversa, 73
numrico, 11, 13
regla de Cramer, 74
Mtodo de aproximacin lineal,
170
Mtodo de Diferencia Finita, 137
Mtodos
analticos, 70

ortogonales, 55
potenciacin de, 41
rango de, 43
resta de, 41
suma de, 41
tipos de, 36
transpuesta de, 43
traza de, 43
triangular inferior, 77
triangular superior, 77
triangulares inferiores, 43
triangulares superiores, 43

266

GEDEM - Versin Preliminar

valores singulares, 47
Scripts, 10
Matrices
Sentencia, 13
Dbilmente Condicionadas, 80Simulacin
Matriz
funciones de dos variables,
ampliada, 70
121
definida negativa, 186
funciones de una variable, 114
definida positiva, 186
Sistemas de Ecuaciones, 69
escalonada reducida, 71
homogineos, 73
hessiana, 184
Sistemas Homogneos, 70
hessiana orlada, 185
Sistemas Singulares, 70
semidefinida negativa, 186 Symbolic Toolbox, 163
semidefinida positiva, 186
tematico, 217-221, 223, 225, 228,
Matriz Hessiana, 149
231, 251, 255
Matriz Jacobiana, 142
Tolerancia, 83
Menor principal dominante, 186
Toolbox, 1, 3
Metodos
factorizacin LU, 76
Valores propios, 64
Modelo de Cournot, 157
Variables
Nodo, 173
peso, 173
ponderacin, 173
Objetos, 19
Optimizacin, 213
Outputs, 10
Pareja Ordenada, 103
Path, 16
Planos, 58, 61
distancia a un punto, 63
Rectas, 58, 59
Regla de Iteracin, 16
Regla de Simpson, 174
Regla del Exponente, 168
Regla del Trapecio, 170
Salidas, 10

simblicas, 13
Vectores, 29, 48
ngulo entre, 53
de resultados, 69
de variables, 69
direccin de, 50
magnitud de, 48
norma de, 48
operaciones entre, 51
producto cruz, 52
producto escalar, 52
proyeccin, 54
solucin, 69
Vectores propios, 64
Ventanas de Matlab, 2
Workspace, 4

También podría gustarte