Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Economía Matemática en Mathlab de Norma Gomez
Economía Matemática en Mathlab de Norma Gomez
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.3. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
16
1.5.1. Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
17
1.5.3. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
LGEBRA LINEAL
27
2. Matrices y Vectores
29
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
2.1.1. Hipermatrices . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
36
41
43
46
2.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
48
51
ii
. . . . . . . . . . . . . . . . . . . . . . .
54
58
2.3.1. Rectas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
2.3.2. Planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
63
64
3. Sistemas de Ecuaciones
69
70
70
73
74
76
78
79
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
89
II CLCULO
91
4. Funciones
93
94
94
99
. . . . . . . . . . . . .
. . . . . . . . . . . . . 108
iii
5. Derivacin
135
. . . . . . . . . . . . . . . . . . . . . . 147
6. Integracin
167
III
OPTIMIZACIN Y DINMICA
7. Concavidad y Convexidad
181
183
iv
8. Optimizacin
213
9. Sistemas Dinmicos
9.1. Ecuaciones Diferenciales y Dinmica Continua
9.1.1. Mtodos Numricos . . . . . . . . . .
9.1.2. Ejemplos Computacionales . . . . . .
9.1.3. Aplicaciones Econmicas . . . . . . . .
9.2. Ecuaciones en Diferencia y Dinmica Discreta
217
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
217
217
233
251
255
ndice de guras
1.1. Conjunto Inicial de Ventanas . . . . . . . . . . . . . . . . . . . . . .
1.4. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
19
20
22
31
. . . . . . . . . . . . . . . . . . . . . . . . .
50
51
53
55
58
59
62
86
97
98
99
4.4. Malla
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
v
vi
. . . . . . . . . . . . . . 146
5.5. Izquierda: Productividad Marginal del Capital. Derecha: Productividad Marginal del Trabajo. . . . . . . . . . . . . . . . . . . . . . . . . 147
2
vii
7.4.
7.5.
7.6.
7.7.
7.8.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
194
195
196
198
199
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
(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.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
21
23
25
2.1.
2.2.
2.3.
2.4.
2.5.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
37
38
41
43
.
.
.
.
.
.
.
.
.
.
ix
Introduccin
En la academia a diario se producen desarrollos tericos que ms adelante llegan a
ser aplicados para la solucin de una gran variedad de problemas reales. En particular, en economa y nanzas, se han producido desarrollos tericos y prcticos para
abordar problemas econmicos como el crecimiento, los ciclos y el diseo de poltica
econmica, o nancieros como la valoracin de activos nancieros y la cuanticacin
del riesgo de un portafolio.
En general, para que tales desarrollos puedan ser utilizados se requiere hacer clculos
matemticos que en algunas ocasiones llegan a ser bastante complicados e incluso
imposibles de realizar analticamente. Por otro lado, en la actualidad el uso de los
computadores para la solucin de problemas se ha convertido en una prctica comn
dada su gran capacidad de clculo y precisin en comparacin con los mtodos tradicionales.
Es posible entonces, en economa y nanzas, utilizar mtodos computacionales para
realizar los clculos que permitan aplicar los desarrollos tericos y prcticos que se
producen en la academia. Por ejemplo, la estimacin de modelos economtricos, la
calibracin de modelos de equilibrio general, simulacin de sistemas dinmicos, entre
otros, son desarrollos que necesitan utilizar mtodos computacionales para la precisa
realizacin de los clculos que estos requieren.
El presente texto ha sido desarrollado por GEDEM (Grupo de Estudios De Economa Matemtica) y tiene como objetivo facilitar a los estudiantes de las ciencias
econmicas un primer acercamiento a la aplicacin de mtodos computacionales en
economa y nanzas. Especcamente, este libro va dirigido a estudiantes de Pregrado de carreras como Economa, Administracin de empresas o Contadura, ya
que utiliza aplicaciones en economa y en nanzas. En la mayora de los casos los
libros que trabajan con herramientas computacionales en estas reas estn dirigidos a estudiantes de Posgrado o de Doctorado, por lo cual pocas veces se ensea
xi
xii
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
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
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
1 + 5
al programa que realice la siguiente operacin:
; primero debemos digitar:
2
3
CONCEPTOS BSICOS
(1+sqrt(5))/2
Luego presionamos `Enter'y el resultado es:
ans =
1.6180
Si por algn motivo se presenta un error, el programa despliega un mensaje de alerta,
en letra de color rojo, que describe el error que se ha presentado.
1.2.2.
Launch Pad
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
CONCEPTOS BSICOS
1.2.4.
Command History
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.
CONCEPTOS BSICOS
10
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.
12
(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
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
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
Se sugiere consultar algunos textos como Fackler (2003), Judd (1998) y Mora (2001).
CONCEPTOS BSICOS
17
1.5.2.
Help y Doc
El comando help permite desplegar la ayuda de cada uno de los comandos y funciones. En esta ayuda, generalmente aparece la sintaxis del comando y las diferentes
opciones que este tiene. En la mayora de casos, este comando se utiliza en la Ventana de Comandos y se escribe de la forma help rutina, donde rutina se reere
al nombre del comando o rutina del que se desea obtener informacin. Por ejemplo,
xlabel es un comando que permite colocar una etiqueta al eje x de una grca. Al
escribir help xlabel en la Ventana de Comandos, se obtiene:
18
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:
CONCEPTOS BSICOS
19
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
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
CONCEPTOS BSICOS
21
Caractersticas
char(c1,c2,...)
deblank(c1)
c1==c2
int2str(a)
num2str(a,n)
str2double(c1)
c1=cellstr(C)
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
22
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
% 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
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
ans =
col:
arg:
bra:
pry:
67.93
69.06
65.75
77.14
Contrario a los otros objetos, que solo permiten un mismo tipo de datos en todas sus posiciones.
CONCEPTOS BSICOS
25
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.
Las totalidad de opciones se pueden ver utilizando el help de format o consultando la documentacin.
26
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.
.
.
.
.
.
am1 am2
29
...
amn
30
1 3 9
7 5 4
A=[1,3,9;7,5,4]
O tambin de la forma:
A=[1 3 9;7 5 4]
MATRICES Y VECTORES
31
2.1.1.
Hipermatrices
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):
32
C(:,:,1) = 2 5 6
4 1 0
6 6 9
C(:,:,2) = -4 6 0
0 1 1
8 3 5
Otra manera en que se pueden denir hipermatrices es por medio del comando cat,
cuya sintaxis es cat(dim,A,B). Este comando concatena las matrices A y B a lo
largo de la dimensin dim. Por ejemplo deniendo las matrices:
C=cat(3,A,B)
Obteniendo la hipermatriz C de (3 3 2) dimensiones. Los comandos relacionados
en el Cuadro 2.1 se pueden utilizar con hipermatrices.
Para ilustrar el uso de estos comandos, veamos un ejemplo.
Ejemplo 2.2. Supongamos que un analista desea organizar una serie de informacin
compuesta por los indicadores macroeconmicos de tres pases (P1 , P2 , P3 ) durante
los ltimos dos aos (A1 , A2 ).
Es as como l obtiene los datos para el crecimiento del PIB, la variacin en la Tasa
de cambio respecto al EURO, la inacin y la variacin en el nivel de desempleo:
MATRICES Y VECTORES
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)
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
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
C(:,:,3) =
6
5
10 11
10 9
7 10
Cada una de estas matrices nos dejan analizar los datos de forma distinta, cada una
de ellas tiene, en las columnas, los aos y las las corresponden a los indicadores,
cada una de estas expresiones podra entenderse como la informacin organizada por
pas.
Por su parte, el comando ipermute realiza la operacin inversa del comando permute,
y su sintaxis es ipermute(A,v). En este ejemplo, al aplicar ipermute a la matriz
C volvemos a la matriz inicial A.
En esta seccin hemos observado como las hipermatrices sirven para manejar informacin, sin embargo esta no es su nica funcin, mas adelante veremos el papel que
juegan en la construccin del producto cartesiano y de grcas.
Matrices Dispersas
Un concepto de inters computacional son las matrices dispersas, matrices en las que
la mayora de sus componentes son cero. Cuando se trabaja con matrices de gran ta5
6
MATRICES Y VECTORES
37
Comando
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)
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.
D = 0
3
9
0
5 -6 0
0
0 0
0 -7 0
0
0 4
38
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.
ans = (2,1)
3
(3,1)
9
(1,2)
5
(1,3) -6
(3,3) -7
(4,4)
4
[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
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
MATRICES Y VECTORES
41
ans = (1,1) 1
(2,2) 1
(3,3) 1
2.1.3.
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
2 3 9
A = 7 5 3
8 5 8
5 4 9
B= 6
2
3
1 5 7
42
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.
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
A
inv(A)
det(A)
norm(A)
rank(A)
trace(A)
size(A) o length(A)
ndims(A)
numel(A)
diag(A)
tril(A)
triu(A)
Ejemplo 2.5. A partir del Cuadro 2.5, analicemos las caractersiticas de la matriz
A:
44
A23
1
3 2
= 7 5
4
3
6
4
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
[L,U,P]=lu(A)
L =
1.0000
0
0
-0.6667
1.0000
0
-0.3333 -0.2500 1.0000
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:
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.
48
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.
q
k v k=
v12 + v22
(2.2)
k a k=
q
a21 + a22 + ... + a2n
(2.3)
MATRICES Y VECTORES
d=
49
(2.4)
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)
P1 P2 = P2 P1 :
p1=[15 23 4]
p2=[-9 10 -1]
p=p2-p1
50
P1
z
1
P2
15
0
10
5
1
30
25
0
20
15
10
5
5
10
0
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
MATRICES Y VECTORES
51
tan =
b
a
= tan1
b
a
(2.6)
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
2.2.2.
Como los vectores son tipos particulares de matrices, a ellos aplican tambin sus
operaciones (ver Cuadro 2.4), siempre y cuando su tamao lo permita. A continuacin
veremos aquellas operaciones propias de los vectores: el producto escalar y el producto
cruz, as como algunas relaciones entre vectores que utilizan estas operaciones como
son el ngulo entre dos vectores, la proyeccin de un vector, el calculo de la matriz
ortogonal y las matrices creadas a partir de vectores.
52
Producto Escalar
Dados dos vectores ~a = (a1 , a2 , ..., an ) y ~b = (b1 , b2 , ..., bn ) en <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 ).
Slo es aplicable para dos vectores en la misma dimensin, es decir, con el mismo nmero de
componentes.
11
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
cos =
~l ~e
k ~l kk ~e k
= cos1
~l ~e
k ~l kk ~e k
(2.9)
acos(dot(l,e)/((norm(l)*norm(e))))
54
Recordemos que podemos clasicar los vectores de acuerdo al ngulo entre ellos: es
as como, dos vectores a y b son paralelos si el ngulo entre ellos es 0 o 180 grados 12 ;
y, segundo, dos vectores a y b son perpendiculares u ortogonales si el ngulo entre
ellos es de 90o , es decir, cuando a b = 0. Si alguno de los vectores es nulo el ngulo
entre ellos es 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)
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]
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
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 .
5 7 4
A = 8 6 3
9 0 1
Introducimos la matriz A y luego invocamos el cdigo orth:
13
56
0.8375
0.5441
-0.0515
-0.3844
0.5196
-0.7631
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
[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
58
[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.
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)
P~ = P~0 + P~0 P
(2.12)
tv
P
PP
0
P0
P
P0
60
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)
Ejemplo 2.10. Encontrar la ecuacin paramtrica de la recta que pasa por los
puntos P0 = (5, 6, 8, 7) y P1 = (9, 2, 0, 2).
MATRICES Y VECTORES
61
p0=[-5,6,8,7];
p1=[9,-2,0,-2];
-8
-8
-9
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)
d(x a) + e(y b) + f (z c) = 0
De la ecuacin 2.16 se desprende la forma:
(2.16)
62
~n
P
P0
dx + ey + f z = g
(2.17)
Ejemplo 2.11. Determinar la ecuacin del plano que pasa por los puntos P0 =
(4, 1, 1), P1 = (2, 0, 1) y P2 = (1, 2, 4)
MATRICES Y VECTORES
63
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)
(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.
D=
|ad + be + cf + g|
p
d 2 + e2 + f 2
(2.18)
64
Am
~ = m
~
(2.19)
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:
1 1 4
A = 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
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:
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
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
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:
(3.1)
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)
En el Captulo 2 seccin 2.3, vimos grcamente que, cada una de las ecuaciones del sistema
69
70
Al resolver un sistema de ecuaciones lineales existen dos casos: primero, los sistemas
de ecuaciones denidos, en donde existe slo un punto de corte, es decir, una nica solucin; y segundo, los sistemas singulares, que pueden tener innitos puntos de
interseccin, es decir innitas soluciones, o pueden no tener ningn punto de interseccin, caso en el que no existe solucin. Por otra parte, los sistemas normales denidos
cuyo punto de interseccin es el origen, se conocen como sistemas homogneos.
El objetivo de este captulo es presentar las herramientas computacionales que provee
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.
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
A1=[1 2;2 1]
b1=[8;1]
M1=[A1 b1]
S1 =
1
0
0
1
-2
5
72
S2 =
1
0
0
0
1
0
-6
11
0
-4
10
0
S3 =
1
0
0
0
1
0
2.2
-0.2
0
0
0
1
SISTEMAS DE ECUACIONES
73
S4 =
1
0
0
3.1.2.
0
1
0
0
0
1
0
0
0
Mtodo de la Inversa
x = A1 b
(3.5)
74
x = Cb
(3.6)
x + y + 2z = 6
3x + 2y + z = 3
4x + 2y + z = 2
x =
-1
1.6667
2.6667
SISTEMAS DE ECUACIONES
75
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
76
x=
-1
y=
1.6667
z=
2.6667
LU x = b
(3.7)
Ly = b
(3.8)
Ux = y
(3.9)
cuya solucin, por sustitucin hacia atrs o mediante el mtodo de la inversa, es:
x = U 1 y
(3.10)
SISTEMAS DE ECUACIONES
77
matriz de coecientes (A) y los resultados son una matriz triangular inferior y una
matriz triangular superior.
Las matrices L y U sern tiles para hallar los valores de los vectores x e y de las ecuaciones 3.7 a 3.10. Veamos en el siguiente ejemplo cmo trabajar con la factorizacin
LU.
Ejemplo 3.7. Solucionemos el sistema del Ejemplo 3.5 por factorizacin LU:
Paso 1. Introducimos la matriz A y el vector b:
A=[1 1 2;3 2 1;4 2 1]
b=[6;3;2]
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
4.0000
x=
-1.0000
1.6667
2.6667
U T U x = U T (U x) = b
(3.11)
UT y = b
(3.12)
Ux = b
(3.13)
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
U=
3.0000
0
0
0.6667
1.5986
0
1.3333
1.3206
0.6916
y=
0
0
0
x=
0
0
0
80
En general, en todos los procesos iterativos que se utilizan para resolver sistemas de
ecuaciones lineales de la forma Ax = b se utiliza una matriz Q, llamada matriz de
descomposicin, escogida de tal forma que el problema original se pueda reescribir
como4 :
Qx = (Q A)x + b
(3.14)
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.
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
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
2x + z = 5
x + 2y = 1.345
0.5y + 8z = 8.76
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
Qxk (Q A)x(k1) + b
Aunque la regla de iteracin es idntica a la del mtodo Gauss-Jacobi, la matriz de
descomposicin no es la misma. Veamos en el siguiente ejemplo la diferencia entre
este y el mtodo anterior:
x+z =7
5x + 2y = 4
8z = 2
9
Para observar la deduccin matemtica del mtodo y su regla de iteracin vea el apndice
matemtico de este captulo.
84
Q=tril(A);
Paso 3. Especicamos el lmite de tolerancia, el nmero de iteraciones y programamos las funciones del mtodo, la regla de iteracin y la condicin para que
el programa se detenga y entregue una solucin:
tol=sqrt(eps);
n=1600;
for it=1:1600;
dx=Q\(b-A*x);
x=x+dx
if norm(dx)<tol, break, end
end
El resultado de la operacin, es decir la solucin, es el vector x:
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)
Qo = 100 + 5p
(3.16)
86
SISTEMAS DE ECUACIONES
87
3.3. Apndice
El uso de mtodos iterativos para la solucin de un sistema de ecuaciones lineales
parte de la regla de iteracin denida mediante la transformacin del sistema Ax = b,
evidente en la ecuacin 3.14:
Qx = (Q A)x + b
Esta regla cambia segn la propiedad de cada mtodo iterativo.
3.3.1.
Gauss-Jacobi
Qxk = (Q A)x(k1) + b
(3.17)
Qxk = Rx(k1) + b
(3.18)
88
El producto de la matriz Q por el vector columna x(k) es un vector columna, asimismo, el producto de la matriz R por el vector columna x(k1) es tambin un vector
columna. La ecuacin vectorial 3.18 se puede expresar mediante n ecuaciones escalares (una para cada componente del vector), de modo que, para un elemento i
cualquiera, se cumple la siguiente expresin:
n
X
(k)
qij xj
j=1
n
X
(k1)
rij xj
+ bi
(3.19)
j=1
n
X
(k1)
aij xj
+ bi
(3.20)
j=1
j6=i
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:
SISTEMAS DE ECUACIONES
3.3.2.
89
Gauss-Seidel
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
(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
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:
(3.27)
donde r(k1) es el vector residual denido mediante r(k1) = b Ax(k1) . Replanteemos la ecuacin 3.27:
90
(3.28)
en esta ecuacin, un elemento cualquiera del vector r(k1) vendra dado por la expresin:
(k1)
ri xi
= 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
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.
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
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
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
4
(x1)2
f=inline(4./((x-1).^2));
Recordemos que en el caso de utilizar inline la funcin debe ser creada
en el mismo m-file de los pasos 2 y 3.
98
Como resultado se obtiene una grca de la funcin de color rojo (r), con lnea
segmentada (-) y con marcadores (+) en cada punto. Aadiendo algunas caractersticas al grco, obtenemos la Figura 4.2. Observemos que esta funcin presenta
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
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.
4
(x1)2
con x=[0.8:0.013:1.25],
/ y.
FUNCIONES
99
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
4.1.2.
Hemos observado que las diferentes grcas que han aparecido a lo largo del captulo
tienen ciertas caractersticas en los ejes, ciertas fuentes para los ttulos, determinados
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
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
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.
102
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
4.2.1.
Comencemos por retomar los pasos necesarios para visualizar una funcin en MATLABr y
adaptarlos al caso de funciones con dos variables:
Como se estableci en el Captulo 2, los vectores los denotamos con minsculas mientras que
las matrices con maysculas.
104
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
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)
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
106
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.
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
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
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.
110
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
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
112
FUNCIONES
113
title([Contourf]);
xlabel(x);ylabel(y);zlabel(f(x,y));
Contour3, n = 30
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
114
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
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
% Conjunto de salida
% Valores del Parmetro
% Numero de valores del parametro
116
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
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
FUNCIONES
117
% Eje vertical
En este caso a toma valores entre 0.3 y 1.7, espaciados entre si por 0.2
unidades.
118
f(x)
f(x)
10
10
5
10
15
20
25
10
25
10
10
10
20
f(x)
f(x)
15
15
20
25
10
15
20
25
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
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
120
a [0,4]
f(x)
0
10
% Conjuntos de llegada
FUNCIONES
121
ts=title([f(x) = e^-ax
a = [0.1 0.4 0.7 1]]);
set(ts,Fontsize,16,Fontweight,Bold,...
horizontalalignment,left,...
verticalalignment,baseline);
set([xs ys],FontSize,12,Fontweight,Bold);
set(ls,fontsize,12,fontname,times,location,north);
f(x) = eax
a = 0.1
a = 0.4
a = 0.7
a=1
0.9
0.8
0.7
f(x)
0.6
0.5
0.4
0.3
0.2
0.1
0
0
10
12
14
16
18
20
122
parmetro), crear los datos (con n conjuntos de salida) y gracar n veces. En algunos
casos, para hacer la sintaxis mas sencilla, se crearn en un solo bucle los n conjuntos
de datos y los n gracos.
% Conjunto de Salida
% Valores del parametro
% n Conjuntos de Llegada
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
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
124
function f=ffej11(x,y,a);
f=x.^3-a*x.^2.*y+6*x.*y.^2-y.^3;
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
126
x=[0:0.5:10];y=x;
a=[0.1:0.1:0.9];
[X,Y]=meshgrid(x,y);
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
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);
128
xs=xlabel(k);ys=ylabel(t);zs=zlabel(f(k,t));
ts=title([Funcion CES \rho = ,num2str(p(i))]);
set(ts,Fontsize,10,Fontname,times);
set([xs ys zs],FontSize,8,Fontweight,bold);
pause(0.1)
end
Como resultado, se tiene una secuencia de grcos que cambian de acurdo
a los cambios en el parmetro . Se observa en esta secuencia que la funcin
de produccin es de la forma Leontief, o Funcin mnimo cuando el valor
de ; cuando 0, la funcin de produccin es Cobb-Douglas; y
cuando 1, la funcin de produccin es Lineal. Entonces la CES generaliza diferentes comportamientos de las funciones de produccin al cambiar
el valor de su parmetro, modelando bienes complementarios, sustitutos
imperfectos y sustitutos perfectos, respectivamente 10 . La simulacin para
estos valores lmite de , junto sus curvas de nivel, se muestra en las guras
4.18 y 4.19.
En captulos posteriores se utiliza la herramienta grca para representar algunas
funciones y algunos resultados numricos. Los grcos que se presentan contienen
ttulos, etiquetas de los ejes y otras caractersticas que se explicaron en este captulo.
Como estas caractersticas se crean con el mismo procedimiento que se mostr en
este captulo, no se colocar explcitamente su programacin.
Los captulos, 5, y 6 analizan funciones utilizando clculo (diferencial e integral)
y mtodos numricos. Estos mtodos sirven para estudiar funciones que no pueden representarse grcamente, o cuando se requieren clculos precisos en un punto
determinado. Esto ser til, ya que algunas funciones econmicas presentan estas
caractersticas.
Ejercicios
En los grcos que debe realizar a continuacin recuerde crear para todas las guras
un ttulo, nombre para los ejes, lneas segemtadas en las asntotas y caractersticas
especiales para cada objeto, diferentes en cada ejercicio.
10
FUNCIONES
129
Funcion CES = 100
Minimo
10
f(x,y)
0
10
2
10
1
5
0
0
0
CobbDouglas
30
x 10
9
15
f(x,y)
7
10
5
4
3
0
10
2
10
1
5
0
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
Lineal
9
20
8
7
6
10
f(x,y)
15
5
4
3
0
10
2
10
1
5
0
Maximo
f(x,y)
9
10
0
10
2
10
1
5
0
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
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)
+ 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
CRRA : U (ct ) =
ct
Ln(c )
t
> 0, 6= 1
=1
1
CARA : U (ct ) =
ec
>0
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
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)
136
guiente estructura determina cmo se han creado cada uno de los ejemplos contenidos
en este captulo, buscando hacer un uso apropiado de cada una de las herramientas
disponibles:
Paso 2: Crear los datos pertinentes y unirlos con las funciones y otros parmetros previamente jados en MATLABr para plantear la situacin.
polyder
cn xn + cn1 xn1 + + c2 x2 + c1 x + c0
(5.2)
Ejemplo 5.1. Encontremos la derivada del polinomio g(x) = 5x4 9x3 41x + 32
137
Paso 1: Escribimos en MATLABr el vector de coecientes del polinomio que nos interesa derivar1
F=[5 -9 0 -41 32]
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
138
f 0 (x) =
f (x + h) f (x h)
+ O(h2 )
2h
(5.4)
5.1.2.
gradient
f =
f (~x) f (~x)
f (~x)
,
,...,
x1
x2
xn
!
(5.5)
139
function f=ej2(x)
f=x.^4;
600
400
200
200
f(x)=x
f(x)=4x3
400
600
5
0
X
140
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
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
142
5.1.4.
fjac y fdjac
Una matriz jacobiana hace una generalizacin del gradiente al calcular, simultneamente, las derivadas parciales de varias funciones respecto a diferentes variables,
organizndolas en una matriz. Supongamos un conjunto de m ecuaciones con n variables:
143
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
144
145
5.1.5.
q = f (K, L, ...)
(5.7)
146
Q
5
3
f(K,L)
2
0
10
8
10
6
8
6
4
4
2
0
P M gK =
q
K
P M gL =
q
L
(5.8)
1
147
[K,L]=meshgrid(k,l);
Q=cobb(K,L,a,b);
148
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:
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
Hf (
x) =
2f
x1
..
.
f
xn x1
..
f
x1 xn
..
.
2f
(5.9)
xn
150
2/3
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
!
2 0
0 2
donde observamos que las derivadas cruzadas son iguales, algo caracterstico de la
hessiana.
151
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)
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:
152
PX3
0
10
0
x
10
0
10
0
x
10
5.2.3.
diff
La rutina diff tambin es til para hallar derivadas de orden superior, no obstante, para determinar la derivada de orden superior para, por ejemplo, una funcin
univariada, hay que introducir al comando la derivada inmediatamente anterior (si
queremos hallar la cuarta derivada, el input es la tercera derivada y as sucesivamente). El siguiente ejemplo muestra claramente cmo se trabaja con diff en funciones
univariadas.
153
5
154
que los del Ejemplo 5.8: ZXY y ZYX son cero, sin embargo, las otras derivadas son
ms elocuentes que con gradient: todos los elementos de las matrices ZXX y ZYY
son 2. Esto se percibe en la ecuacin (5.11).
ZXX = 2
2
2
2
2
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.
155
156
f 000 (a)
fn
f 00 (a)
(xa)2 +
(xa)3 + (xa)n +E(x, a, n)
2!
3!
n!
(5.12)
157
5.2.6.
Consideremos un mercado compuesto por dos rmas que producen un bien homogneo y que enfrentan una funcin de demanda p = 100 Q donde Q es la cantidad
agregada del bien (Q = q1 + q2 , donde q1 es la cantidad producida por la rma 1
y q2 es el producto de la rma 2). Cada una de las rmas i tiene una funcin de
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
20
10
10
f(x)20
30
40
50
60
70
2
10
12
14
16
18
x
2
= pqi c(qi )
(5.13)
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
159
function pi=cournot(q1,q2);
pi=(q1.*(100-q1-q2))-((q1.^2)/2);
160
90
80
70
60
2 50
40
30
q*
20
10
10
20
30
q*1
40
50
60
70
80
90
100
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.
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
cu00 (c)
u0 (c)
162
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)
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.
164
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:
mx 5
m cos(x)
x sen(m) 3x + 5m
165
2 m
5 35
x
m sen(x)
sen(m)
(5.17)
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
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
Sustitucin
Partes
Mtodos
de solucin
polyint
Computacional1
Syms int
Integracin
Directos
Algebraicos
(evaluados)
Sustitucin
Partes
Denida
Mtodos
(rea bajo la curva) de solucin
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.
Z
xn dx =
1
2
xn+1
+C
n+1
INTEGRACIN
169
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:
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,
170
0.0833 0 1 5 0
y0=f(x0)
yn
yn1
y
a=x0
x1
x2
. . .
xn=b
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
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
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.
x4 (49 x2 )1/2 dx
Paso 2. Denimos el vector imagen que corresponde a la funcin que vamos a integrar
y=(x.^4).*(49-x.^2).^(1/2);
5
6
172
9
8
7
6
5
(q*,p*)
4
3
2
1
0
0
10
Z
0
q2
192
dq (4 5)
+ 4q + 3
11
INTEGRACIN
173
[x,w]=qnwtrap(n,a,b)
Donde n es el nmero de nodos a,b representa el lmite de los intervalos, x es el
vector de abscisas y w es un vector de ponderaciones.
Ejemplo 6.5. Para observar las diferencias entre trapz y qnwtrap, solucionaremos
la integral del Ejemplo 6.3 con 51 nodos.
Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderaciones w por el vector y:
in=w*y
El rea bajo la curva es 11447.90 que es el mismo resultado alcanzado con el
comando trapz con h=0.1. As podemos ver como, un aumento del nmero de
nodos en qnwtrap es equivalente a un h cada vez mas pequeo en el comando
trapz.
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
y1
y0
y2
yn2
yn
yn1
y
a=x0
x1
x2
. . .
xn2
xn1
xn=b
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
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)
1
1+x2
es decir, calcular:
dx
1 + x2
Ejemplo 6.7. Hallar el excedente del productor (Figura 6.4) en un mercado donde
el precio p = 7 y la oferta del producto est dada por:
p=
q2
q+1
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
12
10
6
Excedente del Productor
4
0
0
10
12
Ejemplo 6.8. Para observar las diferencias entre quad y qnwsimp, solucionaremos
la integral del Ejemplo 6.6 con 50 nodos.
Paso 3. Para obtener la integral, multiplicamos el vector traspuesto de ponderaciones w por el vector y:
in=w*y
Obtenemos:
in= 0.8814
INTEGRACIN
177
d
c
a
Z bZ
f (x, y)dydx
a
ind=dblquad(f(x,y),a,b,c,d)
11
178
3Z 2
(x + y)dxdy
1
ind=dblquad(x+y,0,2,1,3)
Y obtenemos:
ind = 12
Es decir, 12 unidades cbicas ya que corresponde al volmen existente en los intervalos dados.
x3 + 2xy dydx
ind=dblquad(x.^3+2.*x.*y,-2,3,5,7)
Obteniendo como respuesta:
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
2
1 x ln xdx
R0 3
2
2 t / 4+t
R /2 x
/8 xe /(1 +
x2 )
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.
APENDICE
Adems de los mtodos numricos para hallar integrales denidas, existen mtodos
algebraicos para hallar integrales indenidas como se observa en el diagrama que se
14
180
x4 (49 x2 )1/2 dx
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
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:
(7.1a)
Convexa:
(7.1b)
(7.1c)
(7.1d)
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)
(~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)
f (~x) =
(7.4)
CS = {~x S : f (~x) }
(7.5)
CI = {~x S : f (~x) }
7.1.2.
(7.6)
Criterios de clasicacin
186
Proposicin 7.4 (Funcin Cncava). La funcin f es cncava (estrictamente cncava) si y solamente si la matriz hessiana Hf es semidenida negativa (denida
negativa) en todo punto x de S .
Proposicin 7.5 (Funcin Convexa). La funcin f es convexa (estrictamente convexa) si y solamente si la matriz hessiana Hf es semidenida positiva (denida
positiva) en todo punto x de S .
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
CONCAVIDAD Y CONVEXIDAD
187
188
Paso 1. Crear la funcin. Esto se puede hacer creando un m-file que contenga la funcin o utilizando el comando inline.
CONCAVIDAD Y CONVEXIDAD
189
2.5
f(x)
1.5
P1
0.5
10
15
190
h=0.01
% Amplitud de x y del gradiente
x=[-2:h:5];
y=f(x);
f(x) = x 4x + 8
40
f
fx
30
f(x)
20
10
10
20
2
CONCAVIDAD Y CONVEXIDAD
[p,i]=min(fx)
pinf=[x(i) p]
191
% Mnimo de fx
% Punto de inflexion
x7 por
el mtodo de derivadas (calculando gradientes de la funcin sucesivamente).
192
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
CONCAVIDAD Y CONVEXIDAD
193
ind=find(yxx>-10*h&yxx<10*h);
pinf=[x(ind);yxx(ind)];
En la primera lnea, el comando find encuentra la posicin de los valores del vector
yxx que son mayores que -0.01 (10 h), y menores que 0.01(10 h); este es el
criterio para determinar los valores sucientemente cercanos a cero.8
La segunda lnea almacena en el vector pinf los elementos de los vectores x y yxx
correspondientes a las posiciones del vector ind. De esta forma el vector pinf es:
pinf = 2.7780
-0.0032
Una de las ventajas que ofrece este mtodo es que el clculo de la segunda derivada es
numrico, por lo que no requiere que se introduzca explcitamente la forma funcional
de la segunda derivada.
x
2x2 +3
por
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
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
CONCAVIDAD Y CONVEXIDAD
195
2
f(x) = x
25
20
y=16
f(x)
15
10
y=9
5
y=4
0
5
196
f(x) = x 4x + 6
8
y=4
f(x)
2
y=1
y=2
2
6
1
CONCAVIDAD Y CONVEXIDAD
197
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)
Paso 3. Gracar
mesh(X,Y,F)
Como se observa en la Figura 7.7, se aadi una lnea continua y una discontinua
que representan las partes A y B de las ecuaciones 7.7 y 7.8, respectivamente.
Observamos que para estos dos puntos la lnea continua est por debajo de la lnea
discontinua, lo cual implica que AB, es decir, que la denicin de funcin convexa
198
f(x,y)=x2+y2+(x+y)2
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
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)
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
Paso 2. Crear los datos. Se crean los datos para el conjunto de salida en los vectores x e y, y el producto cartesiano entre ellos utilizando la instruccin
meshgrid. Adems, es necesario almacenar en un vector p todas las parejas ordenadas de la forma (x, y) en las que se va a calcular numricamente
la matriz hessiana. Esto se hace con la ltima instruccin11 .
x=[0.1:10:100.1];
y=x;
11
Para una explicacin de la sintaxis X(:) para una matriz X, ver el captulo 2
200
[X,Y]=meshgrid(x,y);
p=[X(:);Y(:)];
Paso 3. Calcular la matriz Hessiana y determinar si es denida, semidenida o indenida. Con operaciones matriciales podemos calcular los menores principales dominantes y arbitrarios de la matriz hessiana, y con el comando det
podemos hallar el determinante de estas submatrices. Tambin podemos hallar los valores propios de la matriz Hessiana con el comando eig. A partir
de estos clculos podemos establecer si la matriz hessiana, calculada en un
punto, es denida positiva o negativa, o semidenida positiva o negativa.
Repitiendo el proceso en m puntos y teniendo en cuenta las proposiciones
7.4 y 7.5 podemos concluir sobre concavidad o convexidad.
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
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:
Ho = 0
80
100
80
4
2
100
2
4
204
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
7.3.1.
Mtodo Grco
En la gura ?? se observa que esta funcin es cncava (y por lo tanto
cuasicncava) a lo largo de su dominio.
Matriz Hessiana. Deniendo previamente la funcin en un M-file llamado fej73, y a partir del conjunto nito de puntos S = {(x, y)\x
(0, 100] y (0, 100]}, se tiene:
x=[0.1:10:100.1]; % Valores para x
y=[0.1:10:100.1]; % Valores para y
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:);Y(:)]; % Vector con puntos (x,y)
for m=1:length(p); % Repetir en todos los puntos
H=fdhess(fej73,p(:,m)); % Matriz Hessiana
vp(1:2,m)=eig(H); % Valores propios
end
tam=size(vp);
tol=0.000016
for i=1:tam(1)*tam(2); % Valores propios
if abs(vp(i))>tol; % V. propios cercanos a cero
13
CONCAVIDAD Y CONVEXIDAD
207
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.
208
format +
dt
se observa que todos los componentes de la primera la de este vector son
negativos, mientras que los componentes de la segunda la son positivos,
indicando que los Menores Principales Dominantes de orden 1 (D1 ) evaluados a lo largo del conjunto S son negativos, mientras que los de orden
2 son positivos. A partir de los criterios de evaluacin y de la informacin que nos proporciona este vector podemos concluir que la funcin es
cuasicncava.
Conjuntos Contorno
Se observa que el conjunto contorno superior es convexo, por lo cual podemos concluir tambin por este criterio, que la funcin es cuasicncava.
7.4.1.
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:
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.
210
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
function z=fcnej74(x,y,alpha)
z=(alpha-x.^4-3*y.^4)*(1/5);
2. Crear los datos:
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.
212
Captulo 8
Optimizacin
Lida Quintero, Norman Maldonado
La racionalidad de los agentes es un supuesto frecuentemente utilizado la teora
econmica. Esto implica que ellos busquen siempre la mejor manera de realizar sus
cosas, es decir, busquen optimizar sus actividades. As, los consumidores siempre
quieren maximizar la utilidad que le proporcionan los bienes que compran, y los
productores maximizar sus benecios o minimizar sus costos.
En este captulo trabajaremos a partir de herramientas computacionales, el problema
de hallar los mximos o mnimos de una funcin (optimizacin esttica); dependiendo
de si ella representa utilidad, benecios o costos; delimitando el conjunto de soluciones de acuerdo a restricciones si las hay.
Segn (?), una caracterizacin tpica de problemas de optimizacin es encontrar valores extremos de una funcin f (x, y) restringida a un subconjunto bien especicado
de R2+ :
Maximizar f (x, y) sujeta a g(x, y) 0
x0
y0
donde f , g : R2++ R son funciones diferenciables. Aqu a f (, ) se le conoce
como funcin objetivo, y a g(, ) como funcin restriccin o conjunto factible. En el
problema general hablamos de maximizar, dado que minimizar equivale a maximizar
el negativo de la funcin.
Tambin podemos establecer una secuencia general para resolver un problema de
optimizacin computacionalmente. Primero, debemos hacer un anlisis cualitativo
213
214
del problema, es decir, identicar el tipo de funcin objetivo al que nos enfrentamos,
el tipo de restricciones, y su comportamiento si es posible de manera grca para
tener idea de la regin donde se puede encontrar la solucin.
Teniendo claras las condiciones iniciales del problema, podemos crear las funciones
computacionalmente(funcin objetivo, restricciones, gradientes, etc)1 . Por ltimo,
aplicamos la rutina computacional pertinente segn el problema. Adicionalmente,
debemos ser muy cuidados con la interpretacin de los resultados.
Al optimizar se pueden presentar varios casos segn el tipo de funciones que estemos
trabajando: cuando la funcin objetivo no es lineal, y no hay restricciones, caso que
veremos en la primera seccin; en la segunda presentamos optimizacin de funciones del mismo tipo pero con restricciones; y por ltimo tendremos el caso en que
las funciones son lineales. El anlisis de concavidad, convexidad, cuasiconcavidad y
cuasiconvexidad de funciones que vimos en el captulo anterior, nos har mucho ms
fcil la comprensin de estos problemas.
8.1.1. Minimizar
Con esta rutina hallamos la imagen ms pequea de nuestra funcin objetivo, por lo
que la utilizamos para solucionar problemas de minimizacin.
Ejemplo 8.1.
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 .
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
Captulo 9
Sistemas Dinmicos
Diego Corredor, Mario Gonzlez
En los captulos anteriores nos hemos ocupado de los procedimientos utilizados para
analizar y optimizar diferentes tipos de funciones. Todos estos mtodos se enmarcan
dentro de un contexto esttico en el que no es posible observar los comportamientos
de las variables a travs del tiempo. En este captulo nos concentramos en los mtodos numricos, y aplicaciones computacionales utilizados en situaciones donde el
tiempo juega un papel importante, ya sea como una variable continua (ecuaciones
diferenciales) o discreta (ecuaciones en diferencias).
En la primera parte del captulo explicamos los mtodos numricos, y computacionales, utilizados en la solucin de ecuaciones diferenciales ordinarias, presentando
algunos ejemplos y aplicaciones econmicas. En la segunda parte desarrollamos el
mismo esquema para las ecuaciones en diferencias.
9.1.1.
Mtodos Numricos
218
de las funciones. Pero si las condiciones iniciales del problema son determinadas, es
posible obtener las funciones especcas que solucionan el conjunto de ecuaciones.
Por ejemplo, al solucionar algebraicamente la ecuacin x = 3x, obtenemos que el
conjunto de funciones que cumplen esta ecuacin viene dado por la frmula general:
x(t) = Ae3t ; donde A puede ser cualquier nmero real. Pero si agregamos la condicin
inicial x(0) = 4, la nica funcin que satisface la ecuacin diferencial y la condicin
inicial es x(t) = 4e3t . Es necesario anotar que las condiciones no necesariamente
tienen que ser iniciales, tambin pueden imponerse condiciones en otros momentos del
tiempo, o condiciones de fronteraCondicin de Frontera. En el ejemplo, si imponemos
la condicin de frontera x(2) = 5, la funcin particular que satisface la condicin y
el sistema de dinmico es: x(t) = 0.0123e3t .
Por otro lado, por la naturaleza de los mtodos, la solucin numrica de sistemas
dinmicos implica que algn tipo de condicin deba ser impuesta. Es decir que,
al contrario del mtodo algebraico, no es posible obtener ningn tipo de ecuacin
general de las funciones solucin. An ms, al utilizar mtodos numricos nunca
encontramos tales funciones, sino que realizamos una aproximacin numrica a ellas.
Dependiendo del tipo de condicin impuesta (inicial o de frontera) el procedimiento
de solucin numrica cambia. Si tomamos una condicin inicial, resolver un sistema
dinmico consiste en aproximar las funciones solucin a partir del momento del
tiempo en el que es impuesta tal condicin. En otras palabras, la aproximacin
se realiza hacia adelante. A este tipo de problemas se les conoce con el nombre de
Problemas de Valor InicialProblemas de Valor! Inicial o IVPIVP|seeProblemas de
Valor InicialInicial Value Problems|seeIVP (por sus siglas en ingls), y formalmente
consisten en aproximar x(t), en un intervalo de tiempo determinado, de modo que:
x(t)
= f t, x(t)
x(t0 ) = x0
(9.1)
SISTEMAS DINMICOS
219
Una generalizacin de los problemas de valor inicial son los denominados Problemas
de Valores en la FronteraProblemas de Valor! en la Frontera o BVPBVP|seeProblemas
de Valor en la FronteraBounded Value Problems|seeProblemas de Valor en la Frontera. En este tipo de problemas imponemos, como su nombre lo indica, condiciones de
frontera al sistema dinmico. La solucin de estos sistemas resulta ms complicada
porque es posible imponer varias condiciones a la vez, y porque la aproximacin a
las funciones se realiza antes y despus de cada condicin. Los mtodos numricos
utilizados para resolver este tipo de problemas son avanzados, por lo que no sern
tratados en este libro.1
A continuacin presentamos algunos mtodos numricos utilizados para solucionar
problemas de valor inicial. Es necesario aclarar que existe una gran cantidad de
mtodos por lo que no pretendemos abarcar todos los algoritmos existentes. Nos
limitamos a los mtodos ms sencillos que sirven de base para los dems.
(9.2)
x1 = x0 + f (0, x0 )
Ya con x1 , es posible encontrar una aproximacin de x2 y as sucesivamente.
En general, tenemos que:
xi+1 = xi + hf (ti , xi )
(9.3)
Es importante recalcar que hallamos aproximaciones, por lo que en cada iteracin la solucin exacta es el valor aproximado ms un error cuadrtico:2
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
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
SISTEMAS DINMICOS
221
(9.4)
xi = xi1 + hf ti , xi )
Finalmente, la regla de iteracin para xi+1 es:
(9.5)
x1 x0 hf t1 , x1 ) = 0
(9.6)
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
h2
(9.7)
x(t + h) x(t) +
i
hh
h
f t, x(t) + f t, x(t) +hf 0 t, x(t)
2
2
x(t + h) x(t) +
h
f t, x(t) + f t + h, x(t) + f t, x(t)
2
2
xi+1 = xi +
1
(F1 + F2 )
2
donde,
F1 = hf (ti , xi )
F2 = hf (ti + h, xi + F1 )
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
224
x
y0 + y1
2
(9.8)
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)
Z
xi+1 = xi +
ti+1
f t, x(t) dt
ti
(9.10)
ti+1
ti
h
f t, x(t) dt = f (ti , xi ) + f (ti+1 , xi+1 )
2
xi+1 = xi +
h
f (ti , xi ) + f (ti+1 , xi+1 )
2
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:
ti+1
ti
h
i
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
(9.12)
226
p0 (t) = 1
p1 (t) = t
De esta forma, los coecientes deben cumplir 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
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.
228
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
SISTEMAS DINMICOS
xi+1
i
h h
= xi +
251fi+1 + 646fi 264fi1 + 106fi2 19fi3
720
229
(9.14)
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
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
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
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
11
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
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
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
ode23sodesolvers!ode23s
Rgido
Frmula Modicada de
Rosenbrock
ode23todesolvers!ode23t
Moderadamente Rgido
ode23tbodesolvers!ode23tb
Rgido
Frmula Implcita
Runge-Kutta
r
de
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 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:
236
[T,X]=odesolver(@odefun,t,x0,options,p1,p2,...)
Donde los inputs corresponden a:
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
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.
238
Paso 3. Denir las opciones del solver. En este ejemplo utilizamos outputfcn y
stats:
options=odeset('outputfcn',@odeplot,'stats','on');
11
0
67
0
0
0
successful steps
failed attempts
function evaluations
partial derivatives
LU decompositions
solutions of linear systems
Finalmente, 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
Observemos que la solucin puede ser calculada a partir de cualquier momento del tiempo, no
es necesario iniciar en t0 = 0.
240
4.8
4.6
4.4
4.2
x =5
0
3.8
3.6
3.4
3.2
1.2
1.4
1.6
1.8
2.2
2.4
2.6
2.8
x =1
0
x = 4x2 x3 x 6
Encontrar la solucin general de esta ecuacin resulta complicado. Sin embargo, no
es necesario encontrar la solucin para poder determinar que tiene tres equilibrios;
dos estables (x = 3 y x = 1), y uno inestable (x = 2). Calculemos la solucin
computacional y analicemos numricamente la estabilidad.
Paso 3. Denir las opciones del solver. Aqu vamos a utilizar las opciones18 outputfcn
17
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
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
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
b atx2
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
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
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
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:
246
% Sistema dinamico
dxdt=[dvdt; dudt];
% componente 1 de dxdt es dvdt
% componente 2 de dxdt es dudt
Paso 3. Denir las opciones del solver. En este ejemplo utilizamos odeplot como
funcin de salida:
options=odeset('outputfcn','odeplot');
[T,X]=ode45(@ej4,t,x0,options);
En este caso, para solucionar el sistema dinmico, creamos una vector x que contiene
a las variables v y u. De esta forma, el vector de condiciones iniciales x0 tiene los
valores de las condiciones iniciales para cada variable (v0 y u0); y el vector dxdt
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
40
60
80
100
120
140
160
180
v(t)
Para poder observar que (0,0) es un equilibrio de punto de silla es necesario tomar
en cuenta ms condiciones iniciales alrededor de este punto. Sin embargo, considerar
ms condiciones implica un problema, ya que las rutinas de 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
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:
SISTEMAS DINMICOS
249
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
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
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
Diagrama de Fase (v, u): Para gracar este diagrama de fase, tambin es necesario utilizar squeeze. Sin embargo, ahora gracamos una dimensin versus
la otra, as:
plot(squeeze(X(:,1,:)),squeeze(X(:,2,:)))
De esta forma obtenemos el diagrama de fase (v, u) evidente en la Figura 9.10.
Como se puede observar, las condiciones (10,-9) y (10,-11) generan soluciones
inestables que se alejan rpidamente del equilibrio. Por otro lado, la condicin
inicial (10,-10) sigue una trayectoria hacia el equilibrio (0,0). Si hubiramos
calculado la solucin para un intervalo de tiempo ms grande, observaramos
cmo la trayectoria que parte en (10,-10) naliza en el punto de equilibrio.
SISTEMAS DINMICOS
251
15
10
u(t) 0
10
15
25
20
15
10
10
15
20
25
v(t)
9.1.3.
Aplicaciones Econmicas
Solow, Robert. 1956. A Contribution to the Theory of Economic Growth. Quarterly Journal
of Economics. Vol. 70, No. 1 (Feb. 1956), 65-94.
252
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)
Yt = F (Kt , Lt )
(9.18)
K t = sF (Kt , Lt )
(9.19)
Lt = L0 ent
27
(9.20)
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)
kt
K t L t
=
kt
Kt Lt
(9.23)
(?, p. 19)
254
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)
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
256
41.6
41.4
41.2
41
kt
40.8
40.6
40.4
40.2
40
10
20
30
40
50
60
70
80
90
100
Ejercicios
1) Considere el siguiente Problema de Valor Inicial:
x = 4x
x0 = 2
a) Calcule la solucin numrica utilizando el script del mtodo de Euler y del
mtodo RK2, presentados en la primera seccin del captulo. La solucin numrica debe calcularse para 10 momentos, y para el intervalo de tiempo [0, 2]
(Tenga en cuenta que debe calcular el tamao de paso adecuado para cubrir
el intervalo de tiempo en 10 momentos).
b) Graque la solucin algebraica y numrica de ambos mtodos en una misma
gura. Existe alguna diferencia entre los dos mtodos?
c) Construya un m-file en el que el tamao del paso itere tomando 20 valores. Estos valores deben encontrarse entre 0.05 y 1, y deben estar igualmente
espaciados (Ayuda: utilice el comando linspace para generar este vector).
Solucione el IVP considerado para 10 momentos y un tiempo inicial t0 = 0.
Genere una gura para cada valor de h en la que se muestren las soluciones
de ambos mtodos junto con la solucin algebraica. Qu sucede al cambiar
el tamao del paso?Qu mtodo es ms estable?
SISTEMAS DINMICOS
257
x =
x0 =
Cul es ms sensible a cambios en el tamao del paso?.
x = 10x
258
x = b ax
x0 = 1.8
a) Construya un chero en el que, utilizando el comando tic toc de 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.
SISTEMAS DINMICOS
259
12) Utilizando el comando gradient determina la senda del salario real y la tasa de
inters del ejemplo planteado en la pgina 37.
32
260
Bibliografa
Blanchard, Olivier. 1989. Lectures on Macroeconomics. The MIT Press.
Draper, J., y Klingman J. (1979). Matemticas para Administracin y Economa.
5.a Reimpresin. HARLA S.A., Mxico.
Fackler, P., y Mario Miranda. 2003. Applied Computational Economics and Finance.
The MIT Press.
Garca de Jaln, Javier et al. 2001. Aprenda Matlab 6.1 como si estuviera en
primero. Escuela superior de Ingenieros Industriales. Universidad Politcnica de
Madrid.
Grossman, Stanley. 1996. Algebra Lineal. 5a. Mc. Graw Hill.
Judd, Kenneth. 1998. Numerical Methods in Economics. Cambridge : The MIT
Press.
Kincaid, D., y Cheney W. 1994. Anlisis Numrico: Las Matemticas del Clculo
Cientco. Addison-Wesley Iberoamericana, Delaware.
Leithold, L. (1979). El Clculo con Geometra Analtica. 17.a Reimpresin. HARLA
S.A., Mxico.
Mantilla, Ignacio. (2004). Anlisis Numrico. 1.a Edicin. Universidad Nacional
de Colombia.
Monsalve, Sergio, ed. (2004). Matemticas Bsica para Economistas 3: Optimizacin y Dinmica. Mimeo: Universidad Externado de Colombia - Universidad
Nacional de Colombia.
. 2005a. Matemticas Bsicas para Economistas 0: Fundamentos. Universidad Nacional de Colombia y Universidad Externado de Colombia.
. 2005b. Matemticas Bsicas para Economistas 2: Clculo. Universidad
Nacional de Colombia y Universidad Externado de Colombia.
261
262
ndice alfabtico
acos, 53
alignment, 102
atan, 51
axis, 101
cat, 32
chol, 47, 78
clabel, 106
clc, 9
clear, 9
close, 9
color, 102
colorbar, 109
colormap, 108
contour, 106
contour3, 106
cross, 52, 63
cumtrapz, 171
dblquad, 177
det, 74
diag, 82
diff, 141, 152, 163
doc, 17
dot, 52
eig, 65
eps, 83
fdhess, 154, 188
fdjac, 142
fhess, 188
fjac, 142
font, 102
for, 14, 82
get, 103
gradient, 138, 149
grid, 100
help, 17
if, 13
inf, 98
inline, 94
inv, 73
ipermute, 35
legend, 100
line, 100, 102
linestyle, 102
linewidth, 102
lu, 46, 76
marker, 102
markersize, 102
mesh, 105
meshgrid, 57, 104
min, 191
ndims, 34
norm, 49
orth, 55
permute, 35
plot, 95, 188
plot3, 105
polyder, 136, 148
polyint, 169
qnwsimp, 175
qnwtrap, 173
263
264
quad, 175
rref, 70
rrefmovie, 71
set, 103
size, 33
sparse, 37
squeeze, 34
subplot, 101, 115
surf, 105
syms, 163
texlabel, 100
text, 100
title, 100
trapz, 171
view, 101
xlabel, 100
ylabel, 100
zlabel, 100
svd, 50
Inputs, 10
Apndice
integracin, 179
Bifurcacin, 13
Bucle, 13
Cell Array, 24
cell-array, 122, 124
comandos, 234-236
Comentarios, 7, 8
Command History, 5
Command Window, 2
CompEcon, 2
Compecon Toolbox, 173, 175
Concavidad, 183
Conjunto
de llegada, 94
de salida, 94
Conjuntos
contorno inferior, 185
contorno superior, 185
constante de integracin, 169
Contador, 14
Convexidad, 183
Current Directory, 6
Curvas de nivel, 185
Derivacin de orden superior, 147
Derivacin de primer orden, 136
ejm8, 54
Entradas, 10
Error de Truncamiento, 137
Expansin de Taylor, 156
Funcin, 94
cncava, 184
CES, 126
Cobb-Douglas, 125, 128
convexa, 184
cuasicncava, 184
cuasiconvexa, 184
de dos variables, 103
visualizacin de, 103
de una variable, 94
visualizacin de, 94
discontinua, 98, 99
dominio de una, 94
Leontieff, 128
Lineal, 128
Mnimo, 128
parmetros de, 114
rango de una, 94
recorrido de una, 94
SISTEMAS DINMICOS
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
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
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