Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Economia A en Matlab PDF
Economia A en Matlab PDF
(Versin Preliminar)
Norma Gmez
Lida Quintero
Diego Corredor
Mario Gonzlez
Norman Maldonado
Eduardo Snchez
11 de octubre de 2005
2
ndice general
1. Conceptos Bsicos 1
r
1.1. Qu es MATLAB ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Ventanas de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1. Command Window . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.4. Command History . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.5. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. M-File Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4. Procesos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. Otros Conceptos Bsicos . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.1. Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.2. Help y Doc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.3. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
I LGEBRA LINEAL 27
2. Matrices y Vectores 29
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1. Hipermatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1.2. Tipos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . 36
2.1.3. Operaciones Bsicas entre Matrices . . . . . . . . . . . . . . . 41
2.1.4. Anlisis de una Matriz . . . . . . . . . . . . . . . . . . . . . . 43
2.1.5. Matrices Factorizables . . . . . . . . . . . . . . . . . . . . . . 46
2.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.1. Anlisis de un vector . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.2. Operaciones entre Vectores . . . . . . . . . . . . . . . . . . . 51
i
ii
3. Sistemas de Ecuaciones 69
3.1. Mtodos Directos o Analticos . . . . . . . . . . . . . . . . . . . . . . 70
3.1.1. Eliminacin Gauss-Jordan . . . . . . . . . . . . . . . . . . . . 70
3.1.2. Mtodo de la Inversa . . . . . . . . . . . . . . . . . . . . . . . 73
3.1.3. Regla de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.1.4. Factorizacin de Crout o LU . . . . . . . . . . . . . . . . . . 76
3.1.5. Factorizacin de Cholesky . . . . . . . . . . . . . . . . . . . . 78
3.2. Mtodos Indirectos o Numricos . . . . . . . . . . . . . . . . . . . . . 79
3.2.1. Matrices Dbilmente Condicionadas . . . . . . . . . . . . . . 80
3.2.2. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.2.3. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3. Apndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.1. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.2. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.3.3. Mtodo de Richardson . . . . . . . . . . . . . . . . . . . . . . 89
II CLCULO 91
4. Funciones 93
4.1. Funciones de una Variable . . . . . . . . . . . . . . . . . . . . . . . . 94
4.1.1. Visualizacin de funciones de una variable . . . . . . . . . . . 94
4.1.2. Opciones adicionales para los grcos . . . . . . . . . . . . . 99
4.2. Funciones de dos variables . . . . . . . . . . . . . . . . . . . . . . . . 103
4.2.1. Visualizacin de Funciones de dos variables . . . . . . . . . . 103
4.2.2. Opciones adicionales para los grcos . . . . . . . . . . . . . 108
4.3. Simulaciones en funciones de una variable . . . . . . . . . . . . . . . 114
4.4. Simulaciones en funciones de dos variables . . . . . . . . . . . . . . . 121
4.5. Anlisis de Funciones econmicas . . . . . . . . . . . . . . . . . . . . 124
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
iii
5. Derivacin 135
5.1. Derivacin de primer orden . . . . . . . . . . . . . . . . . . . . . . . 136
5.1.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.1.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.1.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.1.4. fjac y fdjac . . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.1.5. Aplicacin: Una funcin de Produccin tipo Cobb-Douglas . . 145
5.2. Derivacin de orden superior . . . . . . . . . . . . . . . . . . . . . . 147
5.2.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.2.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.2.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
5.2.4. fdhess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
5.2.5. Expansin de Taylor . . . . . . . . . . . . . . . . . . . . . . . 156
5.2.6. Aplicacin: El Equilibrio en el Modelo de Cournot . . . . . . 157
5.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
5.4. Apndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
6. Integracin 167
6.1. Integracin por Regla del Exponente . . . . . . . . . . . . . . . . . . 168
6.2. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.4. Integrales Dobles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8. Optimizacin 213
8.1. Optimizacin no lineal sin restricciones . . . . . . . . . . . . . . . . . 214
8.1.1. Minimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
v
vi
ix
x
Introduccin
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 tra-
dicionales.
xi
xii GEDEM - Versin Preliminar
El texto se desarrolla con base en los temas bsicos de la economa matemtica como
son: Sistemas de ecuaciones lineales, matrices y vectores, rectas y planos, funciones,
clculo diferencial e integral, optimizacin "libre" y restringida y sistemas dinmicos.
Cada uno de los temas mencionados es tratado en un captulo en el que se presenta
el problema matemtico a resolver y su correspondiente desarrollo computacional,
acompaado de ejemplos y ejercicios matemticos y econmicos que permiten una
plena comprensin del tema.
Existen temas ms avanzados que no son objeto de estudio de este libro. En particu-
lar, temas como Optimizacin Dinmica, Ecuaciones Diferenciales y en Diferencias
Estocsticas, Optimizacin Dinmica con Incertidumbre o Modelos de Equilibrio
General Computable no son tratados aqu ya que generalmente estos se trabajan
en libros actualmente disponibles en el mercado que van dirigidos a estudiantes de
Posgrado o de Doctorado, o en Papers de libre acceso por Internet. Este libro es tan
solo una introduccin a la utilizacin de mtodos computacionales en Economa y
Finanzas, pero es til en la medida que permite llenar el vaco existente entre las ma-
temticas bsicas que no se suelen ensear computacionalmente y las matemticas
avanzadas que casi siempre se tratan con este tipo de mtodos.
El libro comienza con una breve introduccin a los conceptos bsicos de MATLABr en
el captulo 1, y luego de ella, ste se divide en tres partes. La primera parte contiene
los Captulos 2 y 3, y trata los temas relacionados con el Algebra Lineal. En el Ca-
ptulo 2 se trabajan las Matrices y los Vectores, junto con sus propiedades (inversa,
traspuesta, norma y traza, entre otros), y en el Captulo 3, se estudian los sistemas
de ecuaciones y los diferentes mtodos computacionales para resolverlos.
La segunda parte del libro est compuesta por los Captulos 4, 5 y 6, y presenta el
anlisis de funciones. El captulo 4 muestra cmo utilizar MATLABr para visualizar
grcamente una funcin de una o de dos variables, y determinar a partir de este
grco sus propiedades. Debido a las limitaciones en trminos de dimensin y de
algunos clculos especcos, en los captulos 5 y 6 se abandona el mtodo grco
y se procede a analizar una funcin a partir del clculo diferencial e integral. En
particular, en el captulo 5 se explican en detalle las herramientas disponibles en
MATLABr para calcular numricamente la derivada de una funcin en un punto o
en un conjunto nito de puntos, a partir de lo cual se pueden determinar regiones
INTRODUCCION xiii
en donde una funcin crece o decrece adems de otras propiedades, mientras que en
el captulo 6 se presentan los diferentes mtodos numricos que se pueden emplear
para calcular en MATLABr integrales denidas de cualquier tipo de funcin.
En este texto hemos decidido trabajar con MATLABr por varias razones: en primer
lugar, muchos autores actualmente trabajan en MATLABr para resolver computacio-
nalmente problemas econmicos. Por ejemplo, Thomas Sargent utiliza MATLABr para
modelos de poltica scal, inacin y desempleo, y para resolver matemticamente
juegos dinmicos y equilibrios de Nash, Filtro de Kalman y ecuacin de Ricatti, entre
1
Rutherford, Thomas (1999). Applied General Equilibrium Modeling with MPSGE as a GAMS
Subsystem: An Overview of the Modeling Framework and Syntax. En: Computational Economics,
14:1-46. Kluwer Academic Piblishers
2
Varian, Hal (1996). Computational Economics and Finance: Modeling and Analysis With
Mathematica (Economic & Financial Modeling with Mathematica). Ed. Telos.
xiv GEDEM - Versin Preliminar
Debemos mencionar que esta es una version preliminar del libro, aunque el mismo ya
se encuentra registrado ante la Direccin Nacional de Derecho de Autor. Actualmente
el Grupo trabaja en la correccin del mismo. Cualquier comentario, correccin o
sugerencia por favor enviarla al correo electrnico grupogedem@yahoo.com.
3
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 in-
teractivo 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 sis-
temas 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 vecto-
res, 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.
1
2 GEDEM - Versin Preliminar
Existen dos tipos de toolboxes: por un lado se encuentran los toolboxes diseados
por el grupo creador de MATLABr (The MathWorks Inc.), y por otro lado, los
toolboxes desarrollados por usuarios comunes del programa con el n de suplir sus
propias necesidades (generalmente estos ltimos son de libre acceso en Internet, e
incluso algunos de ellos se pueden bajar de manera gratuita de la pgina web de
Mathworks Inc. 4 ). En este libro nos centramos en el cdigo bsico del programa y
en un toolbox de distribucin gratuita denominado CompEcon5 aplicado a economa
y nanzas.
(1+sqrt(5))/2
ans =
1.6180
1.2.3. Workspace
Esta ventana se encuentra en la misma posicin del Launch Pad, y para acceder
a ella es necesario hacer click en la pestaa Workspace en la parte izquierda de la
pantalla.
Como se observa en la Figura 1.4, en esta ventana se muestran todos las variables que
el usuario ha denido en la sesin, en la columna Name se muestra el nombre de cada
una de las variables, en la segunda columna llamada Size se muestra el tamao de
cada variable7 , en la tercera y cuarta columna se encuentran especicados el nmero
7
Dado que MATLABr trabaja con matrices, la especicacin del tamao de la variable es
CONCEPTOS BSICOS 5
Como se muestra en la Figura 1.5, los comandos de cada sesin son almacenados y
organizados por fecha, por medio del rtulo %-- Hora Fecha-- %
Esta ventana permite que el usuario observe el directorio sobre el cual est traba-
jando, al igual que los archivos que se encuentran dentro de ste, como se muestra
en la Figura 1.6.
El lugar especicado por defecto para guardar los archivos del usuario es la carpeta
work, que se encuentra ubicada dentro de la carpeta principal del programa; si el
usuario guarda un archivo en alguna ubicacin diferente (por ejemplo C:\Mis do-
cumentos), este no podr ser abierto ni ejecutado, a menos que se le especique al
programa la ubicacin del mismo.
Las anteriores son las ventanas bsicas de trabajo. Existen otras de uso ms espec-
co, como por ejemplo las ventanas de grcos o las de Demos; algunas de ellas las
describiremos a lo largo del libro.
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.
Para comentar mltiples lneas, se deben seleccionar las lneas que se desean comentar
y luego de ello presionar Ctrl+R, o seleccionar en la parte superior del editor de M-
Files, Text Comment. De manera similar, cuando se necesita quitar los % de las
lneas comentadas, se utiliza Ctrl+T o en el men Text se selecciona Uncomment.
Todo M-File debe ser guardado en una carpeta para que pueda ser ejecutado. Por
defecto, el programa utiliza la carpeta Work para almacenar los archivos, aunque se
puede guardar en otra carpeta. En este caso se ha guardado el M-File en la carpeta
Work con el nombre pcb, la ubicacin del archivo se observa en la parte superior de
la pantalla, que en este caso es C:\MATLAB6p1\work \pcb.m.9 como se observa en
la parte superior de la Figura 1.8.
Un M-File, puede ejecutarse de cuatro formas distintas, (en todas ellas el M-File
se guarda automticamente antes de ser ejecutado): primero, presionando la tecla
F5; segundo, seleccionando Debug Run en la parte superior del Editor de M-
Files; tercero, haciendo click sobre el cono , en la ventana del editor; y cuarto,
9
Cuando no se ha guardado el archivo, al lado de esta ubicacin aparece el smbolo * , y una
vez guardado, ste desaparece.
CONCEPTOS BSICOS 9
Cuando hay un error en el M-le. El programa dice en que lnea y en que columna se
presenta este error. Para corregirlo, se puede ir al M-File haciendo doble click sobre
el link que aparece en la Ventana de Comandos y luego de ello realizar la correccin.
Hay dos aspectos del programa que se pueden precisar a partir de la gura 1.9:
por ejemplo, las nuevas ventanas que contienen grcos. Se sugiere que estos
tres comandos se coloquen siempre al comienzo de un M-File.
Hasta ahora hemos visto como los M-les sirven para presentar una sucesin de
comandos anloga a la que se hara desde la Ventana de Comandos, este tipo de M-
les 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)
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)
x1 = -0.2929
x2 = -1.7071
Finalmente, hay que mencionar una caracterstica adicional de la que disponen los M-
les. 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);
Analticamente (utilizando lgebra) sabemos que para hallar x debemos colocar to-
12 GEDEM - Versin Preliminar
Los dos mtodos (analtico y numrico) nos permitieron llegar a la solucin. Sin
embargo, el mtodo numrico, result ser poco eciente, es decir requiri de ms
recursos (tiempo y programacin). Adems, fue ms fcil realizar manualmente las
operaciones requeridas por el mtodo analtico. En general resulta poco eciente el
clculo manual de las operaciones que requiere un metodo numrico. Una herramienta
computacional como MATLABr elimina las limitaciones de clculo, resolviendo este
tipo de problemas.
CONCEPTOS BSICOS 13
En el ejemplo anterior, el mtodo numrico fue un camino largo para hallar la solu-
cin. Esto no siempre ocurre, hay algunos problemas que son imposibles de abordar
analticamente y aunque podran resolverse manualmente utilizando mtodos num-
ricos, se llevara mucho tiempo realizar todos los clculos, adems es probable que
durante el proceso se cometan errores humanos.
if condicion
sentencias1
else
sentencias2
end
En este caso, si se cumple la condicin (if), se realizan las operaciones que componen
el primer grupo de sentencias (sentencias1). Si no se cumple la condicin (else),
se ejecuta el segundo grupo de sentencias (sentencias2). En caso de omitir else
y sus respectivas sentencias (sentencias2) y adems no se cumple la condicion,
14 GEDEM - Versin Preliminar
if condicion1
sentencias1
elseif condicion2
sentencias2
elseif condicion3
sentencias3
else
sentencias4
end
Por otro lado, la sentencia for es un bucle, y realiza de manera repetida una se-
cuencia de operaciones con un determinado conjunto de datos. Su forma 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
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
for x=-4:1:4
li=x+5 % li=Lado Izquierdo
ld=4 % ld=Lado Derecho
if li==ld
break
end;
end
x
La regla de iteracin en el anterior ejercicio era trivial y arbitraria, aunque fue til
para ilustrar el uso de las sentencias if y for. En realidad, las reglas que se utilizan
para la solucin de problemas por medio de mtodos numricos son ms elaboradas
y permiten establecer condiciones para que el problema converja hacia una solucin.
Estas reglas de iteracin y mtodos numricos se mencionan ms detalladamente en
captulos posteriores 10 .
Para aadir una carpeta al Path, se debe ir al men File Set Path, en donde aparece
una Ventana similar a la Figura 1.10. Por medio de la opcin Add Folder, se puede
agregar cualquier carpeta al Path. Una vez agregada la carpeta, es necesario guardar
los cambios en el Path orpimiendo el botn Save. Otras opciones disponibles en este
men permiten eliminar carpetas del Path, colocar el Path que el software trae por
defecto o incluir todas las subcarpetas de una carpeta.
10
Se sugiere consultar algunos textos como Fackler (2003), Judd (1998) y Mora (2001).
CONCEPTOS BSICOS 17
Las rutinas de MATLABr estn organizadas por temas en diferentes carpetas. Por
ejemplo, en la carpeta C:\MATLAB6p1\toolbox\matlab\sparfun se encuen-
tran todas las rutinas para trabajar con un tipo especial de matrices que veremos
18 GEDEM - Versin Preliminar
help tambin es til para ver los comandos o rutinas disponibles para trabajar un
tema en particular, por ejemplo, ejecutando en la Ventana de Comandos la instruc-
cin 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:
Para no entorpecer el trabajo en la Ventana de Comandos, dado que todas las ayudas
CONCEPTOS BSICOS 19
Por otro lado, el comando doc permite consultar la documentacin en lnea disponi-
ble en MATLABr sobre cualquier comando o rutina. Esta documentacin contiene
informacin ms detallada que la especicada en el help sobre la sintaxis y mtodos
numricos que utiliza cada rutina.
Para poder utilizar el comando doc se requiere que el usuario, durante el proceso de
instalacin, haya instalado adems del programa toda la documentacin. La sintaxis
del comando es doc rutina, donde rutina corresponde al comando o rutina del
cual se quiere consultar la documentacin. Por ejemplo, al ejecutar en la Ventana de
Comandos doc clc, MATLABr despliega la documentacin para el comando clc
en una ventana nueva, similar a la que aparece en la Figura 1.12.
1.5.3. Objetos
MATLABr , con base en vectores y matrices, trabaja otro tipo de datos (objetos):
Cadenas de caracteres.
C:\MATLAB6p1\toolbox\matlab\strfun
Comando Caractersticas
char(c1,c2,...) Crea una matriz de caracteres a partir de las cadenas
c1, c2,..., completando con espacios las cadenas
ms cortas.
deblank(c1) Elimina los espacios al nal de una cadena de caracte-
res c1.
c1==c2 Compara dos cadenas carcter a carcter. Devuelve un
vector o matriz de unos y ceros, dependiendo de si el
elemento es igual o diferente, respectivamente.
int2str(a) Convierte un nmero entero a en cadena de caracteres.
num2str(a,n) Convierte un nmero real a en cadena de caracteres.
Cuando el nmero tiene decimales, por defecto, se al-
macenan en la cadena solo cuatro cifras decimales. (el
nmero de decimales puede ampliarse o reducirse a n).
str2double(c1) Convierte una cadena de caracteres representando un
nmero real en el nmero real correspondiente.
c1=cellstr(C) Convierte una matriz de caracteres C en un vector de
celdas c1, eliminando los espacios al nal de cada ca-
dena.
Estructuras.
Podemos crear una estructura que contenga el PIB per cpita y la participacin
del consumo dentro del PIB del ao 2000 para algunos pases latinomaerica-
nos (Colombia, Argentina, Brasil y Paraguay). Para ello, necesitamos crear el
12
Garca de Jaln (2001)
22 GEDEM - Versin Preliminar
(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 partici-
pacin que tiene el consumo en el PIB de Colombia, basta con escribir en la
Ventana de Comandos pcon.col, que arroja como resultado 67.93. el sof-
tware dispone de comandos que sirven para manipular estructuras. Algunos de
ellos se presentan en el Cuadro 1.3.
Comando Caractersticas
e=struct(0 campo10 ,valor1,...) Permite crear la estructura e en una
sola lnea
rmfield(ES,e) Elimina el campo e de la estructura ES
Como las estructuras son objetos que permiten almacenar datos, es de espe-
rar que stas se puedan almacenar en matrices y vectores. Para ello, basta
con especicar la posicin que debe ocupar la estructura dentro de una matriz
o un vector. Por ejemplo, para crear las dos estructuras del ejemplo anterior
(PIB percpita y participacin del consumo para algunos pases de Latinoa-
mrica, ao 2000) y colocar estas estructuras en un vector lat, que contega la
informacin de estas variables para algunos pases de Latinoamrica:
% Pib Percapita
pibp=struct(0 col0 ,5795.55,0 arg0 ,11729.08,...
0 bra0 ,7744.71,0 pry0 ,4801.30)
lat(1)=pibp;
24 GEDEM - Versin Preliminar
lat(2)=pcon;
Con estas instrucciones, se crea un vector lat con dos columnas que contie-
ne campos (12 struct array with fields). En su primera columna
(lat(1)), este vector contiene el PIB percpita:
ans =
col: 5795.55
arg: 11729.08
bra: 7744.71
pry: 4801.30
mientras que en la segunda columna (lat(2)), contiene informacin sobre la
participacin del consumo:
ans =
col: 67.93
arg: 69.06
bra: 65.75
pry: 77.14
En este ejemplo hemos creado un cell array que contiene cuatro objetos: en su
primera posicin, contiene un vector de 31, en la segunda y tercera contiene
matrices vacas, y en la cuarta una cadena de caracteres. Ntese que no es
14
Contrario a los otros objetos, que solo permiten un mismo tipo de datos en todas sus posiciones.
CONCEPTOS BSICOS 25
Matrices dispersas.
Para terminar este captulo, debemos mencionar dos comandos que son fundamenta-
les para la presentacin de resultados numricos y grcos en MATLABr . El primero
es el comando pause, cuya sintaxis es pause(n). Este comando permite detener
una secuencia de operaciones o procesos por n segundos. cuando se utiliza de la for-
ma pause, cualquier clculo posterior a esta instruccin se detiene indenidamente,
hasta que el usuario oprima alguna tecla.
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 compor-
tamiento 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 (ca-
ptulo 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
El estudio del lgebra lineal es til en reas importantes para las ciencias econmi-
cas 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 ca-
ractersticas bsicas del lgebra lineal, utilizando MATLABr . En la primera seccin
examinaremos el manejo bsico de las matrices y sus distintas operaciones; en la
segunda, abordaremos los vectores junto a sus particularidades y operaciones; y en
la tercera, veremos algunas herramientas que facilitan el clculo de valores y vectores
propios.
2.1. Matrices
Una matriz es un arreglo rectangular de elementos dispuestos en renglones (las) y
columnas.
a11 a12 ... a1n
a21 a22 ... a2n
. .. ..
. ..
. . . .
am1 am2 ... amn
29
30 GEDEM - Versin Preliminar
Las matrices deben recibir un nombre en MATLABr para que sean almacenadas du-
rante la sesin. Este nombre puede ser una o varias letras, no obstante, se recomienda
que las matrices se denoten con letras maysculas, sin nmeros o caracteres espe-
ciales 1 . Las matrices deben estar contenidas entre parntesis angulares [ ] y ser
denidas por las, es decir, se separan las componentes de una misma la mediante
espacios o comas (,), mientras que las las se diferencian entre s con punto y coma
(;) o presionando enter.
A=[1,3,9;7,5,4]
O tambin de la forma:
A=[1 3 9;7 5 4]
A = 1 3 9
7 5 4
r
Cuando a la matriz no se le ha asignado un nombre, MATLAB utiliza un nombre de variable
1
2.1.1. Hipermatrices
Una extensin del concepto de matriz es el concepto de hipermatriz, denida como
una matriz de ms de dos dimensiones. Por ejemplo, una hipermatriz de 3 dimensio-
nes3 es una hipermatriz de tamao m n xk donde k es el nmero de matrices del
arreglo (es decir, la tercera dimensin: la profundidad de la hipermatriz), cada una
con m las y n columnas, visible en la Figura 2.1.
N
Figura 2.1: Hipermatriz de 3 dimensiones
3
MATLABr permite trabajar hipermatrices de cualquier dimensin.
32 GEDEM - Versin Preliminar
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)
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) Tamao de la hipermatriz A
ndims(A) Nmero de dimensines de la hipermatriz A
squeeze(A) Elimina dimensiones iguales a uno
reshape(A,m,n) Distribuye los elementos de la hipermatriz A en una
matriz de tamao m n
permute(A) Permuta las dimensiones de la matriz A segn los n-
dices del vector v
ipermute(A) Permutacin inversa
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
ans = 2 3 4
34 GEDEM - Versin Preliminar
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:
" #
3 5 0 7
B24 =
0 3 2 2
MATLABr dispone del comando squeeze para eliminar dimensiones que son igua-
les a uno, simplicando las dimensiones de una matriz. Aplicando este comando a la
matriz B que creamos anteriormente, de la forma squeeze(B), obtenemos:
ans = -3 5 0 7
0 3 2 2
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 macro-
econmicos 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 .
v=[3 1 2]
C=permute(A,v)
C(:,:,1) = 5 5.5
6 7
4 4
10 8
C(:,:,2) = 7 6
8 9
7 6
11 11
36 GEDEM - Versin Preliminar
C(:,:,3) = 6 5
10 11
10 9
7 10
Cada una de estas matrices nos dejan analizar los datos de forma distinta, cada una
de ellas tiene, en las columnas, los aos y las las corresponden a los indicadores,
cada una de estas expresiones podra entenderse como la informacin organizada por
pas.
Por su parte, el comando ipermute realiza la operacin inversa del comando permute,
y su sintaxis es ipermute(A,v). En este ejemplo, al aplicar ipermute a la matriz
C volvemos a la matriz inicial A.
En esta seccin hemos observado como las hipermatrices sirven para manejar infor-
macin, 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 ta-
5
Aunque tambin es posible con ([ ])
6
Si se utiliza "([ ])", las dimensiones tambin se pueden separar por espacios.
MATRICES Y VECTORES 37
D = 0 5 -6 0
3 0 0 0
9 0 -7 0
0 0 0 4
Comando Caractersticas
sparse(D) Convierte una matriz D a su forma dispersa, eliminando todos
los elementos en los que haya cero.
sparse(i,j) Crea una matriz de ceros de tamao i j .
sparse(i,j,s,m,n) Crea una matriz dispersa a partir de: i y j , que indican la po-
sicin 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.
speye(i,j) Forma una matriz dispersa de tamao i j con unos en la dia-
gonal principal.
spones(D) Genera una matriz con la misma estructura de dispersin de D,
pero reemplaza los elementos diferentes de cero por unos.
spdiags(D) Extrae todas las diagonales con elementos diferentes de cero de
la matriz D de tamao (i,j). La nueva matriz tiene i las y tantas
columnas como diagonales diferentes de cero tenga D.
spdiags(D,d) Extrae las diagonales especicadas por d (donde d=0 correspon-
de a la diagonal principal) de la matriz D.
nonzeros(D) Vector columna con los elementos diferentes de cero de D.
[i,j]=find(D) Indica las posiciones (en las y columnas) de los elementos dife-
rentes de cero de D.
nnz(D) Nmero de elementos diferentes de cero en la matriz D.
issparse(A) Si el resultado de esta rutina es uno, indica que la matriz ha sido
guardada de tipo dispersa y, si es cero, de cualquier otra forma.
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 sucesiva-
mente. 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)
ans = (2,1) 1
(3,1) 1
(1,2) 1
(1,3) 1
(3,3) 1
(4,4) 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 3 0 0 0
0 0 0 5 0
0 0 -7 0 -6
0 0 4 0 0
Por ltimo speye genera una matriz dispersa a partir de la matriz identidad, es
decir, en los lugares donde i = j hay unos, por ejemplo speye(3) genera la siguiente
matriz dispersa:
MATRICES Y VECTORES 41
ans = (1,1) 1
(2,2) 1
(3,3) 1
2 3 9 5 4 9
A = 7 5 3 B= 6 2 3
8 5 8 1 5 7
C = -3 7 -18
13 -3 6
7 -10 15
D=A*B
D = 17 59 -72
-68 3 -57
-78 -18 -31
E=A.*B
E = -10 12 81
42 -10 9
-8 25 56
F=A^2
F = -47 36 -81
3 31 -54
45 9 -23
G=A.^2
G = 4 9 81
49 25 9
64 25 64
H=A/B
I=A./B
Ejemplo 2.5. A partir del Cuadro 2.5, analicemos las caractersiticas de la matriz
A:
44 GEDEM - Versin Preliminar
1 3 2
A23 = 7 5 4
3 6 4
C = 1 7 3
3 -5 6
-2 4 4
D=inv(A)
e=det(A)
e = -206
f=norm(A)
f = 9.6869
g=rank(A)
g = 3
h=trace(A)
MATRICES Y VECTORES 45
h = 0
i=size(A)
i = 3 3
j=ndims(A)
j = 2
k=numel(A)
k = 9
m=diag(A)
m = 1
-5
4
N=tril(A)
N = 1 0 0
7 -5 0
3 6 4
P=triu(A)
P = 1 3 -2
0 -5 4
0 0 4
46 GEDEM - Versin Preliminar
Ahora bien, para encontrar los elementos que componen las matrices L, U y
P , utilizamos la rutina lu:
[L,U,P]=lu(A)
L = 1.0000 0 0
-0.6667 1.0000 0
-0.3333 -0.2500 1.0000
P = 0 1 0
0 0 1
1 0 0
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.
T
Amn = Umm Smn Vnn (2.1)
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.
p
d= (b1 a1 )2 + (b2 a2 )2 + (b3 a3 )2 (2.4)
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)
c=[8 1 6 5];
d=norm(c)
Ejemplo 2.6. Hallar la distancia entre los puntos P1 = (15, 23, 4) y P2 = (9, 10, 1)
Paso 1. Comenzamos por introducir los vectores P1 y P2 y calcular P = P1 P2 , donde
P1 P2 = P2 P1 :
p1=[15 23 4]
p2=[-9 10 -1]
p=p2-p1
d=norm(p)
La norma de una matriz A, es el mximo de sus valores singulares. Ahora bien, los
valores singulares de una matriz son los elementos de la diagonal de la matriz S que
resulta de descomponer la matriz original en un producto de tres matrices tal que:
50 GEDEM - Versin Preliminar
4 P1
2
z
1
P2
0 15
10
1 5
30 0
25
20 P
15 5
10
5
10
0 x
y
A=U SVT
[U,S,V]=svd(A)
Direccin de un vector
La direccin de un vector est determinada por el ngulo entre el segmento de recta
que parte del origen (vector) y un eje del espacio en el que ste se encuentra. En
<2 , la direccin es el ngulo entre el segmento de recta y el eje x positivo8 . De esta
manera, para un vector l = [a, b] con a 6= 0, la direccin se calcula de la forma9 :
7
En otras palabras se cumple que: norm(A)=max(svd(A))
8
No obstante, para vectores en <3 y <n con n > 3, surge el problema de especicar con respecto
a qu eje est determinado el ngulo. Por esta razn, generalmente se calcula la direccin slo para
vectores en <2
9
Si a = 0,la direccin del vector depende del signo de b; cuando b > 0, la direccin es de 90o y
cuando b < 0 es de 270o
MATRICES Y VECTORES 51
b b
tan = = tan1 (2.6)
a a
Veamos, por ejemplo, la direccin que corresponde al vector u = (7, 5). As, intro-
ducimos en MATLABr la sintaxis para encontrar la magnitud del ngulo:
c=atan(-5/7)
6
150 30
4
180 0
210 330
324.46
240 300
270
Producto Escalar
Dados dos vectores ~a = (a1 , a2 , ..., an ) y ~b = (b1 , b2 , ..., bn ) en <n , el producto esca-
lar10 a b es igual a:
a b = a1 b1 + a2 b2 + .... + an bn (2.7)
Para calcular el producto escalar entre dos vectores en MATLABr , existe la rutina
dot, cuya sintaxis es c=dot(a,b) (donde a y b son vectores del mismo 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 sinta-
xis es c=cross(a,b) (donde a y b son vectores en tercera dimensin11 ).
a = (6 8 9.7)
b = (4 1.2 5)
a=[6;8;9.7], b=[4;1.2;5]
c=cross(a,b)
10
Slo es aplicable para dos vectores en la misma dimensin, es decir, con el mismo nmero de
componentes.
11
MATLABr slo calcula el producto cruz de vectores en <3 .
MATRICES Y VECTORES 53
El resultado que muestra MATLABr es el producto cruz entre los vectores a y b, que
est contenido en el vector c:
c = 28.3600
8.8000
-24.8000
10
3
b
a
4
z c
11
18
25
0
20 2
4
10 6
8
0
y
x
En la Figura 2.4 observamos los vectores a, b y vemos como el producto cruz que
calculamos, c, es perpendicular tanto a a como a b.
Dados dos vectores no nulos e y l, el ngulo entre ellos esta determinado por:
~l ~e ~l ~e
cos = = cos1 (2.9)
k ~l kk ~e k k ~l kk ~e k
acos(dot(l,e)/((norm(l)*norm(e))))
54 GEDEM - Versin Preliminar
Recordemos que podemos clasicar los vectores de acuerdo al ngulo entre ellos: es
as como, dos vectores a y b son paralelos si el ngulo entre ellos es 0 o 180 grados 12 ;
y, segundo, dos vectores a y b son perpendiculares u ortogonales si el ngulo entre
ellos es de 90o , es decir, cuando a b = 0. Si alguno de los vectores es nulo el ngulo
entre ellos es 2 radianes.
Proyeccin
Dados dos vectores a y b, la proyeccin de a sobre b est determinada por:
ab
proyb a = b (2.10)
k b k2
de tal forma que proyb a es un vector paralelo a b y el vector a proyb a es ortogonal
a b. Veamos en el siguiente ejemplo el clculo de una proyeccin.
Ejemplo 2.8. Dados los vectores v = (1, 1) y u = (1, 2), encontrar proyb a
2 Ortogonalidad entre v y
u menos la proyeccion
1.5
Diferencia entre u
Y
y la proyeccion
0.5
Vector v
0.5 Vector u
Proyeccin
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 .
M =
-0.3884 0.8375 -0.3844
0.6588 0.5441 0.5196
0.6443 -0.0515 -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)
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 vec-
tores (por ejemplo: [X,Y,Z]=meshgrid(x,y,z)). MATLABr permite generar
14
Este comando sirve slo para vectores en <3 .
58 GEDEM - Versin Preliminar
[V,W,X,Y,Z]=ngrid(v,w,x,y,z)
En esta seccin estudiaremos con detalle los mtodos computacionales usados para el
anlisis de rectas y planos. Aunque no existen comandos especcos para su estudio,
MATLABr facilita el clculo de algunos pasos intermedios, simplicando su mtodo
MATRICES Y VECTORES 59
sustancialmente.
2.3.1. Rectas
Una recta es una sucesin innita de puntos en un espacio. Para establecer la ecuacin
de una recta en dos dimensiones necesitamos de un punto y la pendiente de la lnea
o, en ausencia de la pendiente, de dos puntos. En tres dimensiones, no obstante, para
hallar la ecuacin de la recta el concepto de pendiente se hace intil y precisamos de
un vector que describa una direccin denida de la recta.
Consideremos la Figura 2.7. Supongamos una recta r en n dimensiones que pasa por
los puntos P0 = (a, b, c, ..., n) y P = (x, y, z, ..., m). El vector que pasa por estos dos
puntos P~0 P = (x a, y b, z c, ..., m n) es paralelo al vector diferente de cero
~v = (d, e, f, ..., l), es decir, existe un escalar t (t <) tal que
P~0 P = tv (2.11)
tv
P
PP
0
P0
P
P0
P~ = P~0 + tv
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 ecua-
ciones:
a + td = x
b + te = y
c + tf = z
Al despejar t de cada una de las ecuaciones, el resultado es:
xa yb zc
t= t= t=
d e f
Como t es igual en cada uno de los casos, igualamos las tres ecuaciones:
xa yb zc
= = (2.14)
d e f
Esta representacin de la recta en la ecuacin 2.14 se llama ecuacin simtrica o
cartesiana. Aunque cambia la forma de la ecuacin, siguen apareciendo los mismos
componentes necesarios para la construccin de una recta: el vector posicin P~0 =
(a, b, c) y el vector director ~v = (d, e, f ), no obstante, ha desaparecido el parametro
t de la ecuacin.
Ejemplo 2.10. Encontrar la ecuacin paramtrica de la recta que pasa por los
puntos P0 = (5, 6, 8, 7) y P1 = (9, 2, 0, 2).
p0=[-5,6,8,7];
p1=[9,-2,0,-2];
p0p1=
14 -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.
n P~0 P = 0 (2.15)
~n
P0 y
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)
p0p1=p1-p0
p0p1=
[2,1,2]
MATRICES Y VECTORES 63
p0p2=p2-p0
p0p2=
[3,-1,-3]
Paso 3. Hallar el producto cruz entre P0~P1 y P0~P2 , cuya respuesta es el vector
normal al plano:
c=cross(p0p1,p0p2)
c=
-1 12 -5
Paso 4. Usando el punto P~ = (x, y, z) obtenemos el vector P~2 P que est incluido
en el plano:
P~2 P = (x + 1, y + 2, z + 4)
(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.
|ad + be + cf + g|
D= p (2.18)
d 2 + e2 + f 2
Veamos en el siguiente ejemplo cmo hallar computacionalmente la distancia entre
un punto y un plano.
64 GEDEM - Versin Preliminar
j=(-8*3)+(1*-7)+(3*4)+1
k=abs(j)
d=k/m
Am
~ = m
~ (2.19)
Para garantizar que m~ 6= ~0, la solucin de15 A I nunca debe ser trivial (es decir,
~ = ~0). Por tanto, la matriz generada al operar (A I) debe ser singular o, en
m
otras palabras, su determinante debe ser igual a cero.
MATLABr calcula valores propios y un vector propio asociado a cada valor por
medio del comando eig, cuya sintaxis es [V,L]=eig(A). Este comando recibe la
matriz cuadrada con las transformaciones lineales y calculalas matrices L (una matriz
diagonal con los valores propios) y V (una matriz cuyas columnas son los vectores
propios correspondientes), tal que A*V=V*L. Observemos cmo trabaja la rutina con
el siguiente ejemplo:
Ejemplo 2.13. Calculemos los vectores propios de la matriz
1 1 4
A = 3 2 1
2 1 1
Paso 1. Introducimos el input del comando: la matriz A:
A=[1 -1 4;3 2 -1;2 1 -1];
Paso 2. Teniendo ya el input, invocamos eig para hallar los valores y vectores
propios:
[V,L]=eig(A)
As, el resultado de MATLABr es claro: L es la matriz de valores propios y
las columnas de V son sus correspondientes vectores propios, tal que V y L
cumplen, en efecto, la propiedad que A*V=V*L.
L = 3 0 0
0 -2 0
0 0 1
Cabe resaltar que si se especica slo una nica salida (B=eig(A)), esta corresponde
a un vector que contiene nicamente los valores propios de la matriz (matriz L).
66 GEDEM - Versin Preliminar
Ejercicios
1. Una empresa se especializa en la produccin de cinco artculos. La informacin
que describe las unidades vendidas en diferentes meses del ao, la utilidad por
unidad vendida y el valor del impuesto por cada uno de los productos son los
siguientes:
P roducto 1 P roducto 2 P roducto 3 P roducto 4 P roducto 5
U tilidad 22 28 15 20 12
Impuestos 2 8 1 0.5 2
Enero 4 5 8 3 9
F ebrero 9 8 2 2 6
M arzo 1 2 2 1 9
Abril 8 4 1 8 2
M ayo 8 8 9 5 2
Junio 10 21 9 11 6
2. Analice las propiedades de la matriz B (Ver cuadro 2.5) y con cada par de ma-
trices aplique las operaciones de suma, resta, multiplicacin, divisin izquierda,
derecha y potenciacin.
2 6 5
4 5 6
9 0 3
a) A = 1 2 3 B=
8 4 2
0 1 2
6 12 7
" # 1 2 3
10 3 9 5
b) A = B= 4 5 6
2 6 4 3
2 6 7
16 16 5 15 20 3 3 3 4
c) A = 18 1 27 27 20 11 B= 0 1 1
5 18 20 1 1 27 4 3 4
a) u = (3, 2) v = ( 35 , 25 )
b) u = (3, 5, 6) v = (4, 3, 2)
c) u = ( 2, 3, 5) v = ( 3 2, 55 , 0)
!
2 8
5. Con la matriz L = y el vector m = (2, 2)
5 4
a) Halle la inversa de L
b) Multiplique el vector m por la inversa de L
c) Ahora aplique divisin derecha y divisin izquierda entre L y m. Traspon-
ga si es necesario.
d) Qu se puede deducir de los puntos anteriores?
8. Encuentre la ecuacin paramtrica de la recta que pasa por los puntos P (1, 2, 3)
y Q = (0, 2, 8).
10. Genere una matriz aleatoria de distribucin uniforme y una matriz cuyas las
y columnas sumen todas lo mismo, y con cada una:
Sistemas de Ecuaciones
Norma Gmez, Eduardo Snchez
A~x = ~b (3.3)
69
70 GEDEM - Versin Preliminar
Al resolver un sistema de ecuaciones lineales existen dos casos: primero, los sistemas
de ecuaciones denidos, en donde existe slo un punto de corte, es decir, una ni-
ca solucin; y segundo, los sistemas singulares, que pueden tener innitos puntos de
interseccin, es decir innitas soluciones, o pueden no tener ningn punto de intersec-
cin, 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.
Por otro lado, estn los mtodos indirectos (tambin llamados iterativos o numri-
cos), que generan una secuencia de aproximaciones a la respuesta del sistema 3.1,
despus de repetir cierto tipo de operaciones previamente establecidas.
a11 a12 ... a1n b1
a21 a22 ... a2n b2
M =
.. .. .. .. ..
(3.4)
. . . . .
am1 am2 ... amn bm
x + 2y = 8
2x + y = 1
A1=[1 2;2 1]
b1=[8;1]
M1=[A1 b1]
S1 =
1 0 -2
0 1 5
2x + y z = 2
3x + 2y + 4z = 8
5x + 4y + 14z = 20
S2=rref(M2)
S2 =
1 0 -6 -4
0 1 11 10
0 0 0 0
x + y + 2z = 9
3x 2y + 7z = 20
2x + 7y + 3z = 27
S3=rref(M3)
El resultado de MATLABr no es coherente dado que la ltima la indica que la suma
de todas las variables multiplicadas por cero es 1; por esta razsn, podemos concluir
que este sistema no tiene solucin:
S3 =
1 0 2.2 0
0 1 -0.2 0
0 0 0 1
SISTEMAS DE ECUACIONES 73
x + 3y z = 0
y 8z = 0
4z = 0
S4=rref(M4)
S4 =
1 0 0 0
0 1 0 0
0 0 1 0
x = A1 b (3.5)
x + y + 2z = 6
3x + 2y + z = 3
4x + 2y + z = 2
C=inv(A1)
x=C*b
x =
-1
1.6667
2.6667
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)
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 ecua-
ciones 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:
L=
U=
y=
2.0000
1.5000
78 GEDEM - Versin Preliminar
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)
9x + 2y + 4z = 0
6x + 3y + 3z = 0
5x + 4z = 0
3
Esta matriz debe ser simtrica y denida positiva para que el sistema tenga solucin. En caso que
la matriz no tenga esta caracterstica recomendamos solucionar el sistema a travs de la factorizacin
LU.
SISTEMAS DE ECUACIONES 79
U=
y=
0
0
0
x=
0
0
0
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)
3.2.2. Gauss-Jacobi
El mtodo de Gauss-Jacobi5 , muy til cuando A es dispersa, resuelve el sistema
de ecuaciones de la forma Ax = b, slo si la matriz de coecientes A es diagonal
dominante6 . Para hacerlo, utiliza una matriz de descomposicin Q que debe ser
diagonal7 y cuyos elementos corresponden a los de la diagonal principal de A. La
regla de iteracin para este mtodo es:
Qxk (Q A)x(k1) + b
7
Las matrices diagonales son aquellas que slo tienen elementos diferentes de cero en su diagonal
principal.
82 GEDEM - Versin Preliminar
El nmero de repeticiones puede ser establecido por el usuario y existen casos en don-
de el nmero de iteraciones propuestas no son sucientes. Por ende, recomendamos
utilizar un nmero de iteraciones alto, se recomiendan ms de 1510.
2x + z = 5
x + 2y = 1.345
0.5y + 8z = 8.76
Aqu it=1:n determina el nmero de veces que se repite esta operacin, que va de
1 hasta n. En este ejemplo tomamos n = 1600, para saber cul es el nmero de veces
que iter el programa, digitamos it y luego enter.
8
Que la norma del vector sea cero implica que todos los valores de x son positivos y se aproximan
a cero, esto sugiere que se ha llegado a una solucin en la cual b Ax = 0.
SISTEMAS DE ECUACIONES 83
tol es un nmero muy pequeo, cercano a cero, que sirve para establecer el nivel de
tolerancia de la solucin o, en otras palabras, el valor mximo que puede tomar la
norma de x. A tol se le puede asignar el valor que deseemos, no obstante, el ms
pequeo que el software reconoce es sqrt(eps), que equivale a la raz cuadrada del
valor de punto otante del programa (es decir, el nmero ms grande que sumado a
uno da uno).
En esta salida aparecen todas las operaciones que hace el programa antes de llegar a
una solucin. Si MATLABr no entrega la respuesta, bien puede necesitar un mayor
nmero de iteraciones o bien, quiz, menos iteraciones de las ya establecidas. Para
este ejemplo, la solucin del sistema es entonces:
1.9432
-0.2991
1.1137
3.2.3. Gauss-Seidel
La iteracin de Gauss-Seidel9 establece la matriz de descomposicin Q como la parte
triangular inferior de A incluyendo los elementos de la diagonal. La regla de iteracin
para este mtodo es:
Qxk (Q A)x(k1) + b
x+z =7
5x + 2y = 4
8z = 2
9
Para observar la deduccin matemtica del mtodo y su regla de iteracin vea el apndice
matemtico de este captulo.
84 GEDEM - Versin Preliminar
Q=tril(A);
tol=sqrt(eps);
n=1600;
for it=1:1600;
dx=Q\(b-A*x);
x=x+dx
if norm(dx)<tol, break, end
end
7.0000
-15.5000
0.2500
Ejercicios
1. Resuelva los Ejemplos 3.2 a 3.7 utilizando:
a) Factorizacin LU
2. Solucione Ax = b donde:
SISTEMAS DE ECUACIONES 85
27 7 5.5 1 1
7 25 2 17.5 1
A =
b =
5.5 2 27.5 11 1
1 17.5 11 47.5 1
a) Utilizando descomposicin LU
b) Gauss-Seidel
c) Gauss-Jacobi
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)
4. Considere el caso de una economa cuya oferta esta compuesta por cuatro rmas
que ofrecen cantidades diferentes de cada mercanca y son precio-aceptantes. La
rma 1 ofrece 83 unidades de la mercanca 3 y 19 unidades de la mercanca 4.
La rma 2 ofrece 58 unidades de la mercanca 2, 30 unidades de la mercanca 3
y 42 unidades de la mercanca 4. La rma 3 ofrece 43 unidades de la mercanca
1 y 12 unidades de la mercanca 4. Por ltimo, la rma 4 ofrece 48 unidades
de la mercanca 3 y 67 unidades de la mercanca 4. Cada rma debe alcanzar
una meta de ingresos especca: 943, 786, 554, y 624 unidades monetarias,
respectivamente. Cules son los precios ptimos para que todas las rmas
alcancen su meta de ingresos?
7. Una empresa desea ubicar uno de sus puntos de venta en una manzana ubicada
en una zona exclusiva de la ciudad, sin embargo, para ellos, sera mucho mejor
si escogen el local en la calle con mayor ujo vehicular. El modelo de vas
con sus direcciones est indicado en la siguiente gura, en la cual se seala el
nmero de vehculos que circulan en una hora y pasan por las intersecciones
A, B, C, y D.
Determine el ujo vehicular por hora sobre cada calle, es decir sobre x1 , x2 , x3
y x4 , expresado como un sistema de ecuaciones lineales.
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
3.3.1. Gauss-Jacobi
En el mtodo de iteracin de Gauss-Jacobi, la ecuacin 3.14 puede escribirse como:
n
X n
X
(k) (k1)
qij xj = rij xj + bi (3.19)
j=1 j=1
n
X
(k) (k1)
aii xi = aij xj + bi (3.20)
j=1
j6=i
n
X (k1)
xi (k) = (bi 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:
3.3.2. Gauss-Seidel
Tal como en el caso anterior, denimos la matriz R = Q A, de manera que la
ecuacin 3.14 se reescribe de la forma:
Donde un elemento cualquiera, i, del vector Qxk esta determinado por la ecuacin:
n
X n
X
(k) (k1)
aij xj = aij xj + bi (3.23)
j=1 j=1
i
X n
X
(k) (k1)
aij xj = aij xj + bi (3.24)
j=1 j=i+1
i1
X n
X
(k) (k) (k1)
aii xi + aij xj = aij xj + bi (3.25)
j=1 j=i+1
i1
X n
X
(k) (k) (k1)
xi = (bi aij xj aij xj )/aii (3.26)
j=1 j=i+1
en esta ecuacin, un elemento cualquiera del vector r(k1) vendra dado por la expre-
sin:
n
X
(k1) (k1)
ri xi = bi aij xj (3.29)
i=1
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.
93
94 GEDEM - Versin Preliminar
Adems, establecemos las herramientas que ofrece MATLABr para aadir algunas
caractersticas adicionales al grco de la funcin, tales como ttulos, nombres de los
ejes, colores, entre otros.
En la segunda seccin, realizamos el mismo anlisis para funciones con dos variables,
es decir, presentamos el concepto matemtico, visualizamos la funcin y aadimos
caractersticas a los grcos. Tambin, utilizamos el concepto de curva de nivel para
visualizar grcamente los conjuntos contorno de una funcin de dos variables.
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.
function f=ffej0(x);
f=x.^3-4*x.^2+6;
En la primera lnea se dene la funcin ffej0 que tiene como entrada el vector x
y como salida el vector f. En la segunda lnea se especica la forma funcional. Este
m-file debe ser guardado con el nombre que se asign a la funcin, que en este
caso es ffej0. Por ltimo, recordemos del captulo 2 que el operador punto que se
96 GEDEM - Versin Preliminar
utiliza en la segunda lnea sirve para realizar operaciones elemento a elemento; por
ejemplo, en x.^3 toma cada elemento del vector x y lo eleva a la potencia 3.
f=inline(x.^3-4*x.^2+6);
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);
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).
f(x) = x3 4x2 + 6
40
30
20
f(x)
10
10
20
2 1 0 1 2 3 4 5
x
presenta discontinuidades.
Como resultado se obtiene una grca de la funcin de color rojo (r), con lnea
segmentada (-) y con marcadores (+) en cada punto. Aadiendo algunas caracte-
rsticas 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.
4
x 10 f(x) = 4/(x1)2
4
3.5
2.5
f(x)
1.5
0.5
0
0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25
x
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 gu-
ra 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.
Paso 2. Crear los datos. Cambiamos el espaciamiento entre los valores del conjunto
de salida:
FUNCIONES 99
4
x 10 f(x) = 4/(x1)2
16
14
12
10
f(x)
0
0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25
x
El resultado es la Figura 4.3, en donde la funcin se graca con color azul2 , con
lnea continua (-) y con marcadores (o) en cada punto. En esta gura, la funcin
parece ser continua. Esto se debe a que la variable x no tom el valor de 1, para el
cual la imagen era , sino que tom valores muy cercanos a 1 (0.9950 y 1.0080),
cuya imagen es diferente a . El comando plot une con una linea, en la zona de la
discontinuidad, las imgenes de los dos puntos ms cercanos a 1 generando la grca
de una funcin aparentemente continua. Por eso se recomienda siempre asegurarse
de incluir en el vector x los valores del dominio donde la funcin es discontinua.
colores de lnea, o posiciones de las guras. Todos estos aspectos pueden ser progra-
mados en MATLABr , y a continuacin se explicar la manera de modicarlos.
xlabel off, ylabel off, zlabel off: quita la etiqueta de los ejes
x,y,z, respectivamente.
grid: crea una malla o cuadrcula en los grcos. Puede introducirse escri-
biendo grid on, y desaparece con grid off.
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]).
Algunos comandos colocan rangos predeterminados para los ejes. Por ejem-
plo, 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 su-
perior izquierda y crea dos ejes i y j, vertical y horizontal respectivamente.
Los valores de i van de arriba a abajo y los de j de izquierda a derecha.
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 nor-
mal, itlica y oblicua respectivamente. fontname, cambia la fuente del texto.
fontunits especica la unidad en la que se mide el tamao de la letra (pul-
gadas - 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).
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
Para observar o modicar las caractersticas de algn objeto ob, se utilizan los
comandos get y set. El primero muestra las propiedades del objeto, mientras que el
segundo las modica. La instruccin get(ob) el programa muestra la conguracin
actual de las propiedades del objeto ob, mientras que con la instruccin set(ob)
muestra las opciones disponibles para cada propiedad del objeto. Con la instruccin
set(ob,p,v) MATLABr asigna el valor v a la propiedad p del objeto ob.
Para ilustrar estos comandos, en cada uno de los siguientes ejemplos se modicarn
las opciones de algunos objetos.
Paso 2. Crear los datos. En funciones de dos variables se crean tres conjuntos de
datos: las dos variables de salida (x e y ) y la variable de llegada (z ). Estos
tres conjuntos de datos pueden ser vectores o matrices4 de igual dimensin.
(x1 , y1 ) (x2 , y1 ) ... (xn , y1 )
(x1 , y2 ) (x2 , y2 ) ... (xn , y2 )
.. .. ..
..
. . . .
(x1 , yn ) (x2 , yn ) ... (xn , yn )
Grcamente, los puntos generados por esta matriz se pueden ver como
una malla en la parte izquierda de la Figura 4.4. Cada interseccin de las
lneas punteadas corresponde a una de las posiciones de la matriz anterior,
generando el producto cartesiano necesario para denir el dominio o con-
junto 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
0.7
0.8
0.6 0.6
f(x,y)
0.4
0.5
0.2
0.4
0
1
0.3 0.9
0.8
1
0.7 0.9
0.2 0.6 0.8
0.5 0.7
0.6
0.4
0.1 0.5
0.3 0.4
0.2 0.3
0.2
0.1
0 0.1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 y 0 0
x
[X,Y]=meshgrid(x,y)
Paso 2. Crear los datos. En el chero pej3, comenzamos por denir los valores para
los vectores x e y:
x=[5:1:20];y=[5:1:20];
Luego, necesitamos crear la malla (o dominio) sobre la cual est denida la
funcin, por medio del comando meshgrid, as:
FUNCIONES 107
[X,Y]=meshgrid(x,y);
Ahora, hallamos los valores de las imgenes de la funcin sobre este con-
junto, que se guardan en la matriz Z:
Z=ffej3(X,Y);
Paso 3. Gracar. Utilicemos los diferentes comandos que ofrece MATLABr para
visualizar la 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
Plot3 Mesh
40 40
30 30
f(x,y)
f(x,y)
20 20
10 10
20 20
15 20 15 20
15 15
10 10
10 10
y 5 5 y 5 5
x x
40 40
30 30
f(x,y)
f(x,y)
20 20
10 10
20 20
15 20 15 20
15 15
10 10
10 10
y 5 5 y 5 5
x x
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.
Como resultado, tenemos la Figura 4.6. Para este grco se utilizaron las
instrucciones xlabel, ylabel y zlabel para colocar nombres en cada
uno de los ejes. Adems, en el ttulo se colocaron smbolos LATEX7 utilizando
\: la instruccin \in gener el smbolo .
x,y [90,90] x 10
5
10
5
x 10
8
10
6
8
6
4
4
f(x,y)
2
2
0
2
0
4
6
2
80
60
80
40 60
20 4
40
0 20
20 0
40 20
40 6
60 60
80 80
y
x
x2=linspace(-70,70,n);y2=x2;
[X2,Y2]=meshgrid(x2,y2);
Z2=ffej4(X2,Y2);
x3=linspace(-50,50,n);y3=x3;
[X3,Y3]=meshgrid(x3,y3);
Z3=ffej4(X3,Y3);
x4=linspace(-30,30,n);y4=x4;
[X4,Y4]=meshgrid(x4,y4);
Z4=ffej4(X4,Y4);
% Graficar
subplot(2,2,1)
mesh(X1,Y1,Z1);view(50,34);
xlabel(x);ylabel(y);zlabel(f(x,y));
title([(x,y) \in [,num2str(min(x1)), ,,num2str(max(x1)),]]);
FUNCIONES 111
subplot(2,2,2)
mesh(X2,Y2,Z2);view(50,34);
xlabel(x);ylabel(y);zlabel(f(x,y));
title([(x,y) \in [,num2str(min(x2)),,,num2str(max(x2)),]]);
subplot(2,2,3)
mesh(X3,Y3,Z3);view(50,34);
xlabel(x);ylabel(y);zlabel(f(x,y));
title([(x,y) \in [,num2str(min(x3)), ,num2str(max(x3)),]]);
subplot(2,2,4)
mesh(X4,Y4,Z4);view(50,34);
xlabel(x);ylabel(y);zlabel(f(x,y));
title([(x,y) \in [,num2str(min(x4)), ,,num2str(max(x4)),]]);
10
4
5
2
f(x,y)
f(x,y)
0 0
5 2
50 50
50 50
0 0
0 0
50 50 50 50
y y
x x
3
15
2
10
f(x,y)
5 1
0
0
5
50
50 20
20
0 0
0 0
20 20
50 50 y y
x x
subplot(2,2,1)
contour3(X,Y,Z,30)
title(Contour3, n = 30);
xlabel(x);ylabel(y);zlabel(f(x,y));
subplot(2,2,2)
[c1,h1]=contour(X,Y,Z,8);
clabel(c1,h1);
title([Contour, Clabel, n=8]);
xlabel(x);ylabel(y);zlabel(f(x,y));
subplot(2,2,3)
[c2,h2]=contour(X,Y,Z,[-800 -600 -400 -200 200 400 600 800]);
clabel(c2,h2);
title([Contour, Clabel]);
xlabel(x);ylabel(y);zlabel(f(x,y));
subplot(2,2,4)
cn = [-800 -150 0 150 800];
contourf(X,Y,Z,cn)
FUNCIONES 113
title([Contourf]);
xlabel(x);ylabel(y);zlabel(f(x,y));
38
3
71
14
4
5.7
.71
500 10
38
43
f(x,y)
642.8571
128.5
71
0
y
0
642.85
500
7
14
4
10
1
57
1000 14
.57
8.
28
12
1 385.7143
20 20
20
0 642
0 .8571
20 20 30
30 20 10 0 10 20 30
y x
x
10 10
0
20
400
400
800
800
y
0
y
0
600
600
0
20
10 10
20 20
40 2
00 600 0 00
2 800
30 30
30 20 10 0 10 20 30 30 20 10 0 10 20 30
x x
9
En el captulo 7 se estudiar ms a fondo el concepto de conjuntos contorno.
114 GEDEM - Versin Preliminar
El procedimiento para realizar la simulacin parte de los mismos pasos para dibujar
una funcin que hemos trabajado hasta ahora: crear la funcin, crear los datos y
gracar. Sin embargo hay dos modicaciones. La primera consiste en que al crear la
funcin, sta debe recibir como entradas, adems de las variables, los parmetros.
La segunda requiere que los pasos de crear los datos (especcamente, el rango o
conjunto de llegada) y gracar se repitan n veces (que pueden separarse por una
pausa), donde n es el nmero de valores del parmetro que se van a simular. Para
ilustrar este procedimiento veamos el siguiente ejemplo.
0.6 0.3
0.5 0.25
0.4 0.2
f(x)
f(x)
0.3 0.15
0.2 0.1
0.1 0.05
0 0
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2
x x
Estos cambios pueden ser observados estableciendo al interior de las funciones par-
metros que puedan tomar diferentes valores. En el caso anterior, la forma general de
la funcin es f (x) = xa con a (0, 1), y se simul el parmetro a para los valores
de a = 0.3 y a = 0.7. A continuacin extendemos el anterior ejemplo, simulando el
parmetro a (el exponente de la variable x) para los valores de 0.1, 0.4, 0.6 y 0.9.
FUNCIONES 115
Ejemplo 4.6. Simular el parmetro a en f (x) = xa , para a = {0.1, 0.4, 0.6, 0.9}.
for i=1:n;
y(i,:)=ffej6(x,a(i)); % Crear n conjuntos de llegada
end
Se crearon n conjuntos de llegada o rangos, donde n es el nmero de valores
que toma el parmetro (length(a)).
El comando for repite el proceso 4 veces, que es el nmero de valores que toma el
parmetro a (n=length(a)). La instruccin y(i,:)=ffej6(x,a(i)) crea un
conjunto de imgenes de la funcin ffej6 para cada valor del parmetro a, y lo
guarda en la la i de la matriz y.
Una vez creados los datos, se utiliza la instruccin subplot(2,2,i), para hacer
un grco que tenga dos las y dos columnas. En cada posicin i del subplot, se
utiliza plot(x,y(i,:)) para gracar la imagen de la funcin cuando el parmetro
a toma el valor a(i). La salida de MATLABr se muestra en la Figura 4.10.
116 GEDEM - Versin Preliminar
0.8
0.6
0.7
0.5
0.6
0.5 0.4
f(x)
f(x)
0.4 0.3
0.3
0.2
0.2
0.1
0.1
0 0
0 0.05 0.1 0.15 0.2 0 0.05 0.1 0.15 0.2
x x
0.35
0.2
0.3
0.25 0.15
f(x)
f(x)
0.2
0.15 0.1
0.1
0.05
0.05
0 0
0 0.05 0.1 0.15 0.2 0 0.05 0.1 0.15 0.2
x x
Con los comandos xlabel y ylabel se colocaron las etiquetas x y f(x) para
los ejes. La instruccin num2str(a(i)) convierte el valor numrico a(i) en una
cadena de caracteres, por lo que el ttulo cambia para cada valor de a. Al crear la
gura se coloca nombre al ttulo (ts) y a los ejes (xs,ys), para poder modicar
sus propiedades. Con el comando set se dene para el ttulo un tamao de letra 18,
grosor bold y color azul, y para los ejes un tamao de letra 14 y grosor bold.
En este ejemplo se observa que el bucle for repite el proceso n veces, tanto al crear
las imgenes como al gracar. Aunque este bucle se segment para seguir los mismos
pasos, en una sintaxis mas sencilla se pueden unir estos dos bucles en uno solo.
Veamos un ejemplo con la funcin seno.
En este caso a toma valores entre 0.3 y 1.7, espaciados entre si por 0.2
unidades.
Se utiliza un mismo bucle for para crear los rangos y para gracar.
8 8
6 6
4 4
2 2
f(x)
f(x)
0 0
2 2
4 4
6 6
8 8
10 10
5 10 15 20 25 5 10 15 20 25
x x
8 8
6 6
4 4
2 2
f(x)
f(x)
0 0
2 2
4 4
6 6
8 8
10 10
5 10 15 20 25 5 10 15 20 25
x x
En MATLABr podemos simular una funcin de una variable para un gran nmero
de valores de su parmetro, con grcos de tres dimensiones, en donde los valores
del parmetro se colocan en el eje z o eje vertical. Veamos un ejemplo.
Ejemplo 4.8. Simular el parmetro a en la funcin f (x) = asen(x) , con a = [0, 0.2]
Paso 3. Gracar. En el eje z se gracan los valores del parametro (matriz A).
mesh(X,Y,A);
t=texlabel(a^{sin(x)});
xs=xlabel(x);ys=ylabel(f(x));zs=zlabel(a);
FUNCIONES 119
3.5
2.5
2
a
1.5
0.5
0
10
8
6
4
6
2
0
4 2
4
2 6
8
0 10
f(x) x
Se observa que para valores de a cercanos a 1 la funcin tiende a ser lineal, pero a
medida que se aleja de este valor, las oscilaciones caracterstricas de la funcin seno
se hacen ms pronunciadas. Con la instruccin contour(X,Y,A,40) obtenemos
curvas de nivel que muestran el mismo resultado en el plano en donde est denida
la funcin (Figura 4.13).
f(x)
4
0
10 8 6 4 2 0 2 4 6
function f=ffej9(x,a);
f=exp(-a*x);
for i=1:length(a);
y(i,:)=ffej9(x,a(i)); % Conjuntos de llegada
end
% Caracteristicas adicionales
grid on;
xs=xlabel(x);ys=ylabel(f(x));
FUNCIONES 121
1
f(x) = eax a = [0.1 0.4 0.7 1]
a = 0.1
0.9 a = 0.4
a = 0.7
a=1
0.8
0.7
0.6
f(x)
0.5
0.4
0.3
0.2
0.1
0
0 2 4 6 8 10 12 14 16 18 20
x
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.
for i = 1:n
Z{i} = ffej10(X,Y,a(i)); % n Conjuntos de Llegada
end
Para guardar las n matrices Z se utilizaron cell-arrays. Debido a que todos
los conjuntos de llegada son del mismo tamao, tambin era posible utilizar
hipermatrices (Z(:,:,i)).
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
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.
10 1.15
8 1.1
f(x,y)
f(x,y)
6 1.05
4 1
2 0.95
0 0.9
2 2
2 2
0 1 0 1
0 0
1 1
2 2 2 2
y x y x
2 10
8
1.5
f(x,y)
f(x,y)
4
1
2
0.5 0
2 2
2 2
0 1 0 1
0 0
1 1
2 2 2 2
y x y x
function f=ffej11(x,y,a);
f=x.^3-a*x.^2.*y+6*x.*y.^2-y.^3;
3 2 2 3 3 2 2 3
f(x,y) = x ax y+6xy y f(x,y) = x ax y+6xy y
a = 6 a = 2
2000 1000
1000 500
f(x,y)
f(x,y)
0 0
1000 500
2000 1000
5 5
5 5
0 0
0 0
5 5 5 5
y x y x
2000 2000
1000 1000
f(x,y)
f(x,y)
0 0
1000 1000
2000 2000
5 5
5 5
0 0
0 0
5 5 5 5
y x y x
diferentes canastas de bienes, para lo cualse asume que sus preferencias estn repre-
sentadas por una funcin de utilidad. Una de ellas es la funcin Cobb-Douglas, que
modela el consumo de un agente sobre bienes que son sustitutos imperfectos, de ma-
nera que el consumidor preere gastar su presupuesto comprando combinaciones de
los bienes que tiene a su alcance, que gastarlo consumiendo slo uno de ellos. Cuando
el agente consume dos bienes x e y , la funcin es de la forma U (x, y) = xa y 1a ; donde
a (0, 1) representa la ponderacin que da el agente a cada bien.
Para hacer la simulacin del parmetro a, seguimos el mismo procedimiento que para
cualquier otra funcin: creamos la funcin, y en otro m-file creamos los datos,
programamos la simulacin para diferentes valores de a y gracamos.
10 10
8 8
f(x,y)
f(x,y)
6 6
4 4
2 2
0 0
10 10
10 10
5 5
5 5
0 0 0 0
y x y x
10 10
8 8
f(x,y)
f(x,y)
6 6
4 4
2 2
0 0
10 10
10 10
5 5
5 5
0 0 0 0
y x y x
Paso 2. Crear los datos. Le damos valores positivos a los vectores de capital y tra-
bajo. Denimos los valores de entre -15 y 1.
k=[0:1:30];t=k;
p=[-15:0.1:1];
[K,T]=meshgrid(k,t);
for i=1:length(p);
Z=ffej13(K,T,p(i));
mesh(K,T,Z);
128 GEDEM - Versin Preliminar
xs=xlabel(k);ys=ylabel(t);zs=zlabel(f(k,t));
ts=title([Funcion CES \rho = ,num2str(p(i))]);
set(ts,Fontsize,10,Fontname,times);
set([xs ys zs],FontSize,8,Fontweight,bold);
pause(0.1)
end
Ejercicios
En los grcos que debe realizar a continuacin recuerde crear para todas las guras
un ttulo, nombre para los ejes, lneas segemtadas en las asntotas y caractersticas
especiales para cada objeto, diferentes en cada ejercicio.
10
Ver Nicholson (1997, pg. 214).
FUNCIONES 129
9
10 8
8 7
6 6
f(x,y)
5
y
4
4
2
3
0
10 2
10
5 1
5
0
0 0 0 2 4 6 8
y x
x
7
10
6
f(x,y)
y
5
4
3
0
10 2
10
5 1
5
0
0 0 0 2 4 6 8
y x
x
f (x) = |x|
2x 3 si x < 2
g(x) = x 5 2 x 1
3 x x > 1
9
20 8
7
15
6
f(x,y)
10
5
y
5 4
3
0
10 2
10
5 1
5
0
0 0 0 2 4 6 8
y x
x
9
10 8
8 7
6 6
f(x,y)
y
4
4
2
3
0
10 2
10
5 1
5
0
0 0 0 2 4 6 8
y x
x
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
(4.1)
1 + < 1
6. Imagine el mercado de arroz en alguna ciudad del Tolima. Suponga que este
mercado es perfectamente competitivo. La cantidad demandada puede repre-
sentarse por la siguiente 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
1
ct
> 0, 6= 1
1
CRRA : U (ct ) =
Ln(c ) =1
t
1
CARA : U (ct ) = ec >0
a) Calcule matemticamente U 0 y U 00 .
b) Graque en una sola gura U , U 0 y U 00
c) Simule el comportamiento de U , U 0 y U 00 para diferentes valores de y .
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.
Derivacin
f (x + h) f (x)
f 0 (x) = lm (5.1)
h0 h
135
136 GEDEM - Versin Preliminar
guiente estructura determina cmo se han creado cada uno de los ejemplos contenidos
en este captulo, buscando hacer un uso apropiado de cada una de las herramientas
disponibles:
Paso 2: Crear los datos pertinentes y unirlos con las funciones y otros par-
metros previamente jados en MATLABr para plantear la situacin.
Ejemplo 5.1. Encontremos la derivada del polinomio g(x) = 5x4 9x3 41x + 32
Nombre del Captulo 137
f (x + h) f (x)
f 0 (x) = + O(h) (5.3)
h
Donde O() es una funcin que prescribe el error entre la derivada y la aproximacin
numrica, conocido como Error de Truncamiento. Esta funcin depende, en este
caso, de h1 (h 0) y, por esto se considera de orden 1. Mediante la construccin
de un polinomio de Taylor de orden 2 y exigiendo que f sea tres veces diferenciable,
obtenemos un resultado con una aproximacin ms exacta a la derivada:
1
Ntese que el coeciente que acompaa a x2 es cero.
2
Por sus caractersticas, polyder slo permite derivar en una sola dimensin, es decir, con
respecto a una sola variable.
138 GEDEM - Versin Preliminar
f (x + h) f (x h)
f 0 (x) = + O(h2 ) (5.4)
2h
En este caso, el error de truncamiento es de segundo orden - h2 . Muchas de las
rutinas utilizadas por MATLABr para encontrar derivadas se basan en el mtodo
de diferencia nita por su facilidad de clculo, veamos entonces los comandos ms
comunes para la aproximacin de derivadas numricas (Mantilla 2004).
5.1.2. gradient
El Gradiente de una funcin es un vector que contiene sus primeras derivadas y, de
este modo, al evaluar la norma del gradiente, la direccin del vector nos seala si la
funcin crece o decrece. As, para cualquier vector de variables ~x = x1 , x2 , . . . , xn , el
gradiente de la funcin f = f (~x) que depende de n variables corresponde a:
!
f (~x) f (~x) f (~x)
f = , ,..., (5.5)
x1 x2 xn
function f=ej2(x)
f=x.^4;
A partir de los clculos numricos que hemos realizado y los mtodos para gracar
del captulo 4, la funcin f (x) = x4 y su derivada estn en la Figura 5.1, donde
observamos que la derivada numrica de f (x) s tiene una forma cbica.
800
600
400
200
Y
200
4
400 f(x)=x
f(x)=4x3
600
5 4 3 2 1 0 1 2 3 4 5
X
5.1.3. diff
A travs del mtodo de diferencia nita, el cdigo diff hace tambin la derivacin
numrica de una funcin. Sin embargo, en contraste con gradient, para establecer
correctamente la derivada con diff y visualizar el comportamiento de la derivada,
al resultado del comando debemos dividirlo por la distancia. De esta manera, para
utilizar diff se introduce la funcin a derivar y la distancia entre las coordenadas
de la funcin, y el resultado que entrega MATLABr es la aproximacin numrica a
la derivada de la funcin. Veamos en el Ejemplo 5.4 cmo se utiliza diff:
5
Ejemplo 5.4. Calculemos la derivada de la funcin f (x) = x 2
50
40
f(x)30
20
10
f(x)=x5/2
f(x)=(5/2)x3/2
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x
5
Figura 5.3: Derivada de f (x) = x 2 mediante diff
142 GEDEM - Versin Preliminar
Una matriz jacobiana hace una generalizacin del gradiente al calcular, simultnea-
mente, las derivadas parciales de varias funciones respecto a diferentes variables,
organizndolas en una matriz. Supongamos un conjunto de m ecuaciones con n va-
riables:
Nombre del Captulo 143
y 1 = f1 (x1 , x2 , , xn )
y 2 = f2 (x1 , x2 , , xn )
.. ..
. .
y m = fm (x1 , x2 , , xn )
La matriz jacobiana J asociada al sistema anterior contiene, en cada una de sus las,
el gradiente de las funciones fi para todo i = 1, 2, . . . , m. Es decir,
f1
f2
J =
..
(5.6)
.
fm
MATLABr calcula, por diferencia nita, los elementos de una matriz jacobiana
mediante los comandos fjac y fdjac4 . La sintaxis de la rutina fjac es:
J=fjac(f,[i,j],a,P1,P2,...)
Donde f es el nombre del M-le que contiene el sistema a derivar, [i,j] signica
que se derivar la funcin j respecto a la variable i5 , el vector a dene el punto
donde se va a calcular la derivada y P1,P2,..., etc son parmetros adicionales a
la funcin.
Aunque el mtodo utilizado por fdjac es anlogo al aplicado por fjac, su sintaxis
es distinta: J=fdjac(f,a,P1,P2,...). Al igual que antes, f es el nombre
del M-le donde denimos el sistema de funciones, pero a indica el punto donde se
evala la derivada del sistema y P1,P2,... son parmetros adicionales aplicables
la funcin. Veamos un ejemplo de cmo se usan los comandos fjac y fdjac:
Ejemplo 5.6. Hallemos la matriz jacobiana en el punto (1,1) del siguiente sistema
de ecuaciones:
z1 = x2 + y 2
z2 = x3 + y 3
4
Estas rutinas pertenecen al toolbox COMPECON
5
Si por ejemplo se deseara calcular la derivada de la segunda ecuacin con respecto a la primer
variable el vector debera ser [1,2].
144 GEDEM - Versin Preliminar
No obstante, las empresas no pueden producir innitamente debido a que existe una
restriccin de recursos y capacidad que se lo impide. Intuitivamente, un aumento en
la cantidad de un factor (por ejemplo, capital), manteniendo constantes los dems
factores, debe producir ms producto, sin embargo, esos incrementos disminuyen cada
vez la productividad de ese factor. Por ejemplo, si tenemos un restaurante y queremos
atender a todos los clientes, podemos contratar un mesero que lo haga. Si contratamos
otro mesero sera de gran ayuda para el mesero ya contratado, siempre y cuando las
mesas les sean asignadas claramente, de forma que no atiendan dos veces la misma
mesa. Pero si se contratan ms meseros que mesas, el ltimo mesero contratado
no tendr a quien atender y, por tanto, su aporte a la produccin es prcticamente
nulo. Supongamos entonces que una empresa tiene la siguiente funcin de produccin:
1 1
f (K, L) = K 3 L 3 . Veamos grcamente su comportamiento y su forma en la Figura
5.4. All observamos que la funcin tiene rendimientos decrecientes en cada factor,
ya sea K o L.
f(K,L)
2
0
10
8 10
6 8
4 6
4
2
2
0 0
L
K
1 1
Figura 5.4: La funcin de produccin f (K, L) = K 3 L 3
q q
P M gK = P M gL = (5.8)
K L
1 1
De esta manera, retomando nuestra funcin de produccin f (K, L) = K 3 L 3 , el
anlisis de la contribucin de un factor lo hacemos mediante sus derivadas parcia-
les respecto a capital o a trabajo. As, para hallar la derivada parcial invocamos
gradient cuando ya hemos creado la funcin:
[K,L]=meshgrid(k,l);
Q=cobb(K,L,a,b);
Los resultados de esta operacin son PK y PL, las derivadas parciales de la funcin
respecto a K y L respectivamente. Observamos estos resultados en la Figura 5.5,
donde tenemos que ambas derivadas son positivas (al incrementar los factores crece
el producto), sin embargo, son decrecientes (cada unidad ms de cada factor aumenta
el producto en menos que esa proporcin). Por ejemplo, la productividad marginal
del capital (la gura de la izquierda) muestra cmo, ante un aumento del capital en
algo ms que cero (la parte ms izquierda de la grca), resulta en una gran cantidad
de producto (el eje vertical); de otro lado, un incremento muy grande (la parte de
ms a la derecha) implica un crecimiento casi nulo del producto (la grca de la
funcin se hace cada vez ms cercana a cero).
5.2.1. polyder
Al igual que la derivacin de primer orden de un polinomio, polyder permite conti-
nuar 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 defec-
to, 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:
6
En particular, en este captulo se aborda la aproximacin de funciones por medio de la Expansin
de Taylor.
Nombre del Captulo 149
5.2.2. gradient
Las derivadas de orden superior, en el caso de una sola variable, son fciles de cal-
cular mediante el comando gradient. As, para hallar la segunda derivada con
gradient, el nuevo input es el gradiente anteriormente encontrado.
2
Ejemplo 5.8. Hallemos la segunda derivada de la funcin f (x) = x 3 . Tras hacer
4
las dos derivaciones correspondientes, la ltima analticamente es: f 00 (x) = 29 x 3 .
2f f
x1 x1 xn
.. .. ..
Hf (
x) = . . . (5.9)
f 2f
xn x1 xn
2/3 2/3
Primera Derivada de f(x)=x Segunda Derivada de f(x)=x
1.8 6
1.6 5
4
1.4
3
1.2
2
1
PX2
PX
1
0.8
0
0.6
1
0.4
2
0.2 3
0 4
10 8 6 4 2 0 2 4 6 8 10 10 8 6 4 2 0 2 4 6 8 10
x x
2
Figura 5.6: Las dos primeras derivadas de f (x) = x 3
donde observamos que las derivadas cruzadas son iguales, algo caracterstico de la
hessiana.
[PX,PY]=gradient(Z,1,1);
Nombre del Captulo 151
El resultado descrito por la matriz PX3, cuya norma es positiva e igual a 129.4025 (o
sea, la tercera derivada de la funcin es creciente), es la respuesta numrica a invocar
tres veces gradient sobre la funcin f (x). El resultado de gracar PX3 lo obser-
vamos en la Figura 5.7, donde el resultado analtico y el numrico son ligeramente
distintos a causa del error de truncamiento inherente a la aproximacin numrica
(O(h2 )).
9 9
8 8
7 7
6 6
PX3
5 5
y
4 4
3 3
2 2
1 1
0 0
10 8 6 4 2 0 2 4 6 8 10 10 8 6 4 2 0 2 4 6 8 10
x x
2
Figura 5.7: La tercera derivada de f (x) = x 3 mediante gradient y directamente
5.2.3. diff
La rutina diff tambin es til para hallar derivadas de orden superior, no obstan-
te, 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 sucesivamen-
te). El siguiente ejemplo muestra claramente cmo se trabaja con diff en funciones
univariadas.
Nombre del Captulo 153
5
Ejemplo 5.11. Calculemos la segunda derivada del Ejemplo 5.4: f (x) = x 2 .
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 PYY = 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 (5.11)
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
5.2.4. fdhess
Hallar hessianas con gradient o diff puede ser tedioso y, como ya vimos, impreci-
so cuando se asignan pocos datos al proceso. Existe otro algoritmo que encuentra de
manera 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 coman-
do 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.
Tras aplicar fdhess en este ejemplo, vemos que el resultado del clculo es cero.
MATLABr conrma lo que grcamente observamos en la Figura 5.9: la funcin
x3 + y 3 en (0,0) es plana, por lo que se concluye que all la funcin no es creciente ni
decreciente y que su tasa de crecimiento es exactamente igual a cero.
156 GEDEM - Versin Preliminar
30
f(x)
Aproximacion
20 Punto x
10
10
f(x)20
30
40
50
60
70
2 0 2 4 6 8 10 12 14 16 18
x
2
Figura 5.10: La funcin f (x) = 5x 3 32 y su aproximacin de grado tres
Primero debemos establecer cul es el problema que quiere resolver cada una de las
rmas. La empresa i vende una cantidad qi y, dado que acepta el precio que tiene en
el mercado, recibe un total de pqi . Como tambin enfrenta costos, el benecio de la
rma i es la diferencia entre sus ingresos y sus costos,
qi2
= (100 Q)qi (5.14)
2
Como el problema es maximizar la ecuacin (5.14), establezcamos la primera y la
segunda derivada de la funcin para la rma 1:
function pi=cournot(q1,q2);
pi=(q1.*(100-q1-q2))-((q1.^2)/2);
El equilibrio de este modelo est caracterizado por el punto de corte entre ambas
funciones de mejor respuesta: esa es la cantidad a producir de cada una de las rmas,
evidente en la Figura 5.11 con el punto negro. Como el problema es simtrico (ambas
rmas maximizan la misma funcin de benecio), una buena posibilidad de encontrar
el equilibrio computacionalmente es suponer de antemano que la cantidad producida
160 GEDEM - Versin Preliminar
100
80
70
60
q
2 50
40
30
q*
2
Funcion de mejor respuesta Firma 2
20
10
0
0 10 20 30 40 50 60 70 80 90 100
q*1 q
1
de ambas rmas es la misma, por ende, se establece dnde estn los puntos de la
curva de nivel de PXX en (0,0), para despus determinar cules de los componentes
de los vectores posicin en la matriz de datos iniciales son iguales. Esta forma es la
que se desarrolla en el siguiente script para localizar el equilibrio:
[i,j]=find(PX==0);
for n=1:length(i);
if QU(i(n),j(n))==QU(j(n),i(n))
l=i(n);
m=j(n);
else 0;
end
end
As, el equilibrio qi es l=q1 = 26 y m=q2 = 26, o sea, cada una de las rmas produce
una cantidad igual a 26 unidades. Este resultado es exactamente el mismo que aquel
que se logra si, en vez de analizar todo el problema a partir de la rma 1, trabajramos
con la rma 2. La diferencia radica en la variable de control de la rma en cuestin,
que sera entonces q2 y, de esa forma, al tomar el gradiente para la primera derivada,
aquella matriz que habra que examinar sera la segunda.
Nombre del Captulo 161
5.3. Ejercicios
1. Una empresa tiene unos costos en funcin de la cantidad de la forma c(q) =
5q + 15. Encuentre numricamente los costos marginales de la rma. Cunto
es su costo jo? Son estos costos marginales constantes? Si as lo son, Qu
tipo de rendimientos presenta esta empresa?
6. Es muy comn que las personas compren seguros, de forma que transeran
recursos de un estado bueno a un estado malo, cuando realmente los necesiten.
No obstante, para que este principio se cumpla, es necesario que el agente que
compre el seguro sea averso al riesgo y, para determinar esa aversin al riesgo,
se recurre a una medida conocida como Coeciente de Aversin al Riesgo de
Arrow-Pratt, que se dene como:
cu00 (c)
=
u0 (c)
162 GEDEM - Versin Preliminar
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.
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 expresio-
nes 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.
Integracin
Lida Quintero, Diego Corredor
Introduccin
Z
f 0 (x)dx = f (x)
Y por otro lado, como herramienta para determinar reas de regiones cuyos lmites
no son rectas.
167
168 GEDEM - Versin Preliminar
Directos
Algebraico Sustitucin
Computacional1
Syms int
Integracin Directos
Algebraicos
(evaluados) Sustitucin
Partes
Denida Mtodos
(rea bajo la curva) de solucin
Regla del Trapecio trapz
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 inte-
gracin 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+1
xn dx = +C
n+1
1
Apndice de este captulo
2
Excepto cuando 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
R
a calcular: (x4 8x2 + 3x)dx
Y obtenemos
in = 0.2 0 -2.6667 1.5 0 0
Ejemplo 6.2. Vamos a calcular los costos variables de una empresa cuyos costos
marginales estn dados por la siguiente funcin:
q3
CM g(q) = + 2q + 5
3
R 3
Para hacerlo debemos hallar ( q3 + 2q + 5)dq asumiendo k = 0 ya que estamos
calculando los costos variables y no los totales.
3
Si se omite, MATLABr asume k=0.
170 GEDEM - Versin Preliminar
Obtenemos:
CV = 0.0833 0 1 5 0
y0=f(x0)
yn
yn1
y
a=x0 x1 x2 . . . xn=b
1
(y0 + y1 )x
2
El rea total de los n trapecios, es decir el rea bajo la curva es:
Z " n1
#
b
1 X
f (x)dx ' x (y0 + yn ) + yi
a 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:
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.
Paso 2. Denimos el vector imagen que corresponde a la funcin que vamos a inte-
grar
y=(x.^4).*(49-x.^2).^(1/2);
5
MATLABr tiene predeterminado x = 1 (h=1).
6
con inline o en un M-file
172 GEDEM - Versin Preliminar
Ejemplo 7.4
11
10
6
p
4 (q*,p*)
0 1 2 3 4 5 6 7 8 9 10 11
q
Otra forma de calcular integrales en MATLABr haciendo uso de la Regla del Tra-
pecio es por medio del comando qnwtrap que hace parte del Compecon Toolbox.
Este comando calcula un vector x que contiene los elementos (x0 , x1 , . . . , xn1 , xn )
asociados a los nodos (ver Figura 6.1) y su vector de pesos o ponderaciones7 w.
Para calcular la integral de la funcin f (x) en [a, b], obtenemos las imgenes de cada
uno de los nodos y las multiplicamos por un vector de ponderaciones.
[x,w]=qnwtrap(n,a,b)
Regla de Simpson
y1
y2
y0
yn
yn2
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 b
x
f (x)dx ' y0 + 4y1 + 2y2 + . . . + 2yn2 + 4yn1 + yn
a 3
que es la regla de Simpson para la integracin aproximada10 .
8
Sin embargo, la regla del trapecio resulta ms precisa en casos en los que el integrando pre-
senta 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)
El rea bajo la curva formada desde cero hasta uno de la funcin es: in = 0.8814.
Ejemplo 6.7. Hallar el excedente del productor (Figura 6.4) en un mercado donde
el precio p = 7 y la oferta del producto est dada por:
q2
p=
q+1
Paso 1. Debemos crear la funcin, en este caso lo haremos como expresin, directa-
mente en la sintaxis de quad:
xpr=quad((q.^2)./(q+1),0,7.8875)
Ejemplo 7.4
12
10
p 6
0 2 4 6 8 10 12
q
Ejemplo 6.8. Para observar las diferencias entre quad y qnwsimp, solucionaremos
la integral del Ejemplo 6.6 con 50 nodos.
Obtenemos:
in= 0.8814
d
c
a b
Para evaluar una integral doble, primero se integra con respecto a una variable
(considerando la otra constante) y el resultado se integra luego con respecto a la
otra variable11 .
Z bZ d
f (x, y)dydx
a c
Para realizar esta operacin, MATLABr utiliza el comando dblquad, el cual requie-
re como inputs f (x, y) y los intervalos de integracin para cada variable. De acuerdo
con la frmula anterior, tenemos que a x b y c y d. La sintaxis del comando
dblquad es: 12
ind=dblquad(f(x,y),a,b,c,d)
11
Ver (Monsalve 2005b).
12
La funcin puede ser denida como explicamos para el comando quad, es decir como expresin,
objeto inline o M-file.
178 GEDEM - Versin Preliminar
Y obtenemos:
ind = 12
Ya hemos visto en este captulo los mtodos que tiene MATLABr para integrar, y
con l concluimos la parte correspondiente a Clculo del libro. Pero las integrales
son mucho ms de lo que hasta aqu conocemos, pues ellas tambin son utilizadas
para evaluar funciones en diferentes contextos como en optimizacin, tambin en
los mtodos de solucin de ecuaciones diferenciales. De estos y otros temas, nos
ocuparemos en la siguiente parte del libro.
Ejercicios
1 Un mercado de competencia perfecta tiene una funcin inversa de demanda dada
por p = 10 2q y oferta p = 32 q + 1
13
Teniendo en cuenta que a,b son los lmites del intervalo de x; c,d los de y
INTEGRACIN 179
a. 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
Podemos utilizar rref del Captulo 2, por tratarse de ecuaciones lineales.
180 GEDEM - Versin Preliminar
syms x
f=(x^4)*(49-x^2)^(1/2)
int(f)
ans=(-1/6*x^3)*(49-x^2)^(3/2)-49/8*x*(49-x^2)^(3/2)...
+2401/16*x*(49-x^2)^(1/2)+117649/16*asin(1/7*x)
Para calcular esta integral en el intervalo [2, 7] debemos denir las variables simb-
licas y la funcin como en el ejemplo anterior, y luego ejecutar int(f,2,7)
ans = 117649/32*pi+7467/8*5^(1/2)-117649/16*asin(2/7)
eval(ans)
cuyo resultado es
ans = 1.1507e+004
OPTIMIZACIN Y DINMICA
181
Captulo 7
Concavidad y Convexidad
Norma Gmez, Norman Maldonado
Este captulo tiene como objetivo analizar las propiedades de las funciones utilizadas
en problemas de optimizacin esttica. Especcamente, vamos a abordar el anli-
sis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una funcin a
partir de herramientas computacionales.
1
Existen otros tipos de funciones. Se utiliza esta clasicacin por su utilidad para ubicar mximos
y mnimos.
183
184 GEDEM - Versin Preliminar
En cada seccin se explicarn las herramientas de las que dispone MATLABr para
analizar una funcin por diferentes mtodos, y se darn algunos ejemplos. Al nal
del captulo se plantean algunos ejercicios que servirn al estudiante para desarrollar
agilidad en el anlisis de funciones a partir de mtodos numricos y en la aplicacin
de este anlisis para la solucin de problemas de optimizacin esttica en economa.
7.1. Conceptos
Las deniciones que se presentan en esta seccin son tomadas de Monsalve (2004),
mientras que los criterios de clasicacin son tomados de Mora (2001).
7.1.1. Deniciones
Concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una funcin.
Matriz Hessiana
2
Ver ?), Fackler (2003) y Judd (1998).
CONCAVIDAD Y CONVEXIDAD 185
fx1 x1 fx1 x2 . . . fx1 xn
fx2 x1 fx2 x2 . . . fx2 xn
Hf (~x) =
.. .. .. ..
(7.2)
. . . .
fxn x1 fxn x2 . . . fxn xn
0 fx1 fx2 . . . fxn
fx1 fx1 x1 fx1 x2 . . . fx1 xn
(~x) =
Hf fx2 fx2 x1 fx2 x2 . . . fx2 xn
(7.3)
.. .. .. .. ..
. . . . .
fxn fxn x1 fxn x2 . . . fxn xn
f (~x) = (7.4)
7.1.3. Mtodos
En funciones continuamente diferenciables, la segunda derivada permite analizar la
concavidad y convexidad de una funcin, y una combinacin de la primera y la
segunda derivada permite determinar la cuasiconcavidad y cuasiconvexidad de una
funcin. Para analizar la forma de una funcin en MATLABr vamos a utilizar cuatro
mtodos diferentes3 :
3
Todos los mtodos llegan a la misma conclusin
CONCAVIDAD Y CONVEXIDAD 187
4
Recurdese que la convexidad de un conjunto es un concepto diferente al de convexidad de una
funcin.
5
Por lo que sus limitaciones son las mismas.
188 GEDEM - Versin Preliminar
Paso 1. Crear la funcin. Esto se puede hacer creando un m-file que con-
tenga la funcin o utilizando el comando inline.
Paso 2. Crear los datos de la variable x y de la funcin f (x).
Paso 3. Invocar la rutina plot para gracar.
function f=fej1;
f=log(x)
plot(x,y)
b=0.2
c=0.1
line([3.5,13.5],[f(3.5),f(13.5)],color,r,LineStyle,-)
text(3.5-b,f(3.5)+b,P_ {1},Fontsize,10,Fontweight,Bold)
text(13.5+c,f(13.5)-c,P_ {2},Fontsize,10,Fontweight,Bold)
f(x) = ln x
3
2.5 P
2
2
f(x)
1.5 P1
0.5
0
0 5 10 15
x
3 2
Gradiente Numrico f(x) = x 4x + 8
40
f
fx
30
20
f(x)
10
10
20
2 1 0 1 2 3 4 5
x
[p,i]=min(fx) % Mnimo de fx
pinf=[x(i) p] % Punto de inflexion
20
10
f(x)
0
10
20
f
fxx
30
0.5 1 1.5 2 2.5 3 3.5 4
x
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.
2
Segunda Derivada Numrica f(x) = x/(2x +3)
0.4
f
fxx
0.3
0.2
0.1
f(x)
0.1
0.2
0.3
0.4
2 1.5 1 0.5 0 0.5 1 1.5 2
x
2
f(x) = x
25
20
y=16
15
f(x)
10
y=9
5
y=4
0
5 4 3 2 1 0 1 2 3 4 5
x
de nivel de mayor valor (f = 16). Este conjunto est sealado en la grca con el
marcador o . El conjunto contorno inferior, donde se ubican las curvas de nivel de
menor valor (f = 4), corresponde al conjunto [3, 3], y est sealado en la grca
con el marcador * . De estos dos conjuntos, solo el conjunto contorno inferior es
convexo, por lo cual podemos concluir que la funcin es cuasiconvexa.
De nuevo, tenemos que jar tres curvas de nivel: una de referencia (f = 1) y dos
que se ubican por encima (f = 4) y por debajo (f = 2) de la curva de nivel de
referencia. Luego de ello, sealamos grcamente los conjuntos contorno superior (o)
e inferior(*) y determinamos cul de estos dos conjuntos es convexo.
El conjunto contorno inferior, donde se ubican las curvas de nivel de menor valor
(f = 2), est sealado con * y corresponde al conjunto [1.5, 1][1.38, 3.61]10 .
El conjunto contorno superior, donde se ubican las curvas de nivel de mayor valor
Hemos asumido el conjunto [5, 3] [3, 5] para ilustrar el ejemplo de manera precisa en la grca.
10
Ver nota 7
196 GEDEM - Versin Preliminar
3 2
f(x) = x 4x + 6
y=4
4
2
f(x)
y=1
y=2
2
1 0 1 2 3 4
x
(f = 4), est sealado con o y corresponde al conjunto [1, 1.38] [3.61, 4.2].
Ninguno de estos dos conjuntos es convexo, por lo que la funcin no es cuasicncava
y tampoco es cuasiconvexa.
y cncava si
A B
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 GEDEM - Versin Preliminar
f(x,y)=x2+y2+(x+y)2
4
x 10
6
P1 P2
5
f(x,y)
3
0
100
100
50
50
0
0
50 50
100 100
y
x
se cumple para estos dos puntos. Adems se observa que esto ocurre para cualquier
pareja de puntos del dominio de la funcin. Por esta razn podemos concluir que la
funcin es convexa estricta.
y cuasicncava si
A B00
z }| { z }| {
f (P1 + (1 )P2 ) M in{f (P1 ), f (P2 )} (7.10)
f(x,y)=x2+y2+(x+y)2
4
x 10
5
P2
4
f(x,y)
3
P1
2
0
100
100
50
50
0
0
50 50
100 100
y
x
En la gura 7.8 se observa que todos los puntos de la lnea continua (parte A de la
denicin 7.9) son ms pequeos o iguales al punto P2 (parte B de la denicin 7.9).
Como esto ocurre para cualquier par de puntos podemos concluir que la funcin es
cuasiconvexa.
Paso 2. Crear los datos. Se crean los datos para el conjunto de salida en los vec-
tores x e y, y el producto cartesiano entre ellos utilizando la instruccin
meshgrid. Adems, es necesario almacenar en un vector p todas las pare-
jas ordenadas de la forma (x, y) en las que se va a calcular numricamente
la matriz hessiana. Esto se hace con la ltima instruccin11 .
x=[0.1:10:100.1];
y=x;
11
Para una explicacin de la sintaxis X(:) para una matriz X, ver el captulo 2
200 GEDEM - Versin Preliminar
[X,Y]=meshgrid(x,y);
p=[X(:);Y(:)];
La matriz Hessiana es constante para todo punto (x, y). Para calcularla en
MATLABr debemos:
function f=fej72(v);
y=v(2);
x=v(1);
f=x.^2+y.^2+(x+y).^2;
v=[4;5];
H=fdhess(fej72,v)
o, en el caso de fhess:
H=fhess(fej72,[1,1],v)
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.
Una vez creada la funcin y los datos (pasos para grcar) podemos analizar
la cuasiconcavidad y cuasiconvexidad de nuestra funcin f (x, y) de la siguiente
manera:
subplot(2,2,1)
contour3(X,Y,Z,40) % 40 Curvas de nivel arbitrarias
title(Contour3);
subplot(2,2,2)
cn=[2 6 10 14 20 30]; % Curvas de nivel predeterminadas
contour(X,Y,Z,cn)
title(Contour);
subplot(2,2,3)
[cs,h]=contour(X,Y,Z,cn);
hs=clabel(cs,h)
title(Contour - clabel);
subplot(2,2,4)
contourf(X,Y,Z,cn)
title(Contourf);
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 cuasiconve-
xa. Era de esperarse, puesto que ya habamos visto que la funcin es convexa,
y adems sabemos por la proposicin ?? que toda funcin convexa es cuasi-
convexa.
0 2x + 2(x + y) 2y + 2(x + y)
(x, y) =
Hf 2x + 2(x + y) 4 2
2y + 2(x + y) 2 4
0 80 100
(3, 4) =
Hf 80 4 2
100 2 4
Ho = 0 80 100
80 4 2
100 2 4
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 de-
ben repetirse para cada valor de k. En esa misma lnea se establece que k toma-
r 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 calcu-
la 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 uti-
lizamos para ver los componentes del vector dt. La salida de MATLABr (con
format bank) es:
dt = -6400.00 -33600.00
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 Hessia-
na Orlada cambia segn el punto en donde la calculemos. Necesitamos entonces
generalizar el mtodo anterior para calcular la Matriz hessiana orlada en dife-
rentes puntos a la vez. Para ello, necesitamos repetir el proceso m veces, donde
m son todas los puntos en los que se desea evaluar la matriz H . Para ilustrar la
forma en que se generaliza, vamos a evaluar la matriz H en un conjunto nito
de puntos.
Lo primero que debemos hacer es denir dicho conjunto. Supongamos que va-
CONCAVIDAD Y CONVEXIDAD 205
mos a evaluar esta matriz en el conjunto S = {(x, y)\x [3, 5] y [4, 1]}.
Entonces, denimos este conjunto en 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(:)];
Se observa que todos los componentes del vector dt son negativos, lo cual
implica que los menores principales dominantes de H son menores que cero y
por lo tanto la funcin en el conjunto S es cuasiconvexa12 .
tam=size(vp);
tol=0.000016
for i=1:tam(1)*tam(2); % Valores propios
if abs(vp(i))>tol; % V. propios cercanos a cero
13
Aunque las instrucciones son bsicamente las mismas.
CONCAVIDAD Y CONVEXIDAD 207
vp(i)=vp(i);
else
vp(i)=round(vp1(i)); % Redondear
end
end
Se observa que todos los componentes del vector vp son no positivos (me-
nores o iguales que cero), por lo cual podemos concluir que la funcin es
cncava, y por lo tanto tambin es cuasicncava. Esto ltimo lo podemos
vericar con la matriz Hessiana Orlada.
Matriz Hessiana Orlada
x=[0.1:10:100.1]; % Valores para x
y=[0.1:10:100.1]; % Valores para x
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:);Y(:)]; % Vector con puntos
format +
dt
se observa que todos los componentes de la primera la de este vector son
negativos, mientras que los componentes de la segunda la son positivos,
indicando que los Menores Principales Dominantes de orden 1 (D1 ) eva-
luados a lo largo del conjunto S son negativos, mientras que los de orden
2 son positivos. A partir de los criterios de evaluacin y de la informa-
cin 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 po-
demos concluir tambin por este criterio, que la funcin es cuasicncava.
Nuestro propsito en esta seccin es ilustrar con dos ejemplos la manera en que
se extienden los mtodos de anlisis de concavidad y convexidad para funciones
de tres o ms variables. Cuando tenemos funciones con tres variables, ya no
se puede utilizar el mtodo grco, puesto que ya no es posible visualizar la
funcin. Sin embargo, sus curvas de nivel se visualizan en R3 , y por lo tanto es
vlido en estas funciones utilizar el mtodo de conjuntos contorno, adems de
los mtodos de matriz Hessiana y Hessiana Orlada. En funciones de cuatro o
ms variables no es posible utilizar el mtodo grco y el mtodo de Conjuntos
contorno, por lo cual solo disponemos de los mtodos de matriz Hessiana y
matriz Hessiana Orlada.
function f = fej74(v);
z=v(3);
CONCAVIDAD Y CONVEXIDAD 209
y=v(2);
x=v(1);
f=x.^4+3*y.^4+5*z;
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
for m=1:length(p);
J=fdjac(fej74,p(:,m));
H=fdhess(fej74,p(:,m));
Ho=[0 J;J H];
for k=1:1:length(Ho)-1;
D=Ho(1:k+1,1:k+1);
dt(k,m)=det(D);
end
end
tam=size(dt);
tol=0.00016;
Se observa que todos los componentes del vector dt (una vez depurados)
son no positivos, lo cual implica que a partir de la informacin de la matriz
Hessiana Orlada, podemos concluir que la funcin es cuasiconvexa.
Conjuntos Contorno. Recordemos que las curvas de nivel para f (x, y, z) =
x4 + 3y 4 + 5z resultan de igualar la funcin a una constante . De esta
manera, tenemos que las curvas de nivel estn dadas por:
x4 3y 4
= x4 + 3y 4 + 5z = z= 5
As, a pesar de no poder visualizar la funcin f (x, y, z), s podemos visua-
lizar sus curvas de nivel en el plano (x, y, z). Para visualizar estas curvas
CONCAVIDAD Y CONVEXIDAD 211
function z=fcnej74(x,y,alpha)
z=(alpha-x.^4-3*y.^4)*(1/5);
for i=1:length(alpha)
Z=fcnej74(X,Y,alpha(i));
mesh(X,Y,Z)
hold on
end
Optimizacin
Lida Quintero, Norman Maldonado
213
214 GEDEM - Versin Preliminar
del problema, es decir, identicar el tipo de funcin objetivo al que nos enfrentamos,
el tipo de restricciones, y su comportamiento si es posible de manera grca para
tener idea de la regin donde se puede encontrar la solucin.
Teniendo claras las condiciones iniciales del problema, podemos crear las funciones
computacionalmente(funcin objetivo, restricciones, gradientes, etc)1 . Por ltimo,
aplicamos la rutina computacional pertinente segn el problema. Adicionalmente,
debemos ser muy cuidados con la interpretacin de los resultados.
Al optimizar se pueden presentar varios casos segn el tipo de funciones que estemos
trabajando: cuando la funcin objetivo no es lineal, y no hay restricciones, caso que
veremos en la primera seccin; en la segunda presentamos optimizacin de funcio-
nes 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.
Existen varios mtodos numricos para solucionar este caso particular de optimiza-
cin como tales, tales y tales; que veremos en esta seccin junto con las rutinas de
MATLABr que hacen uso de ellos.
8.1.1. Minimizar
Con esta rutina hallamos la imagen ms pequea de nuestra funcin objetivo, por lo
que la utilizamos para solucionar problemas de minimizacin.
Ejemplo 8.1.
mn f (x) = x3 4x2 + 6
1
En general es mejor trabajar con funciones denidas en un m-le, ya que se pueden modicar
r
fcilmente y permiten hacer uso de otras funciones disponibles en MATLAB . En problemas
sencillos es prctico trabajar con funciones inline.
OPTIMIZACIN 215
Paso 1. Anlisis Cualitativo del problema. Podemos ver en la Figura 8.1 el compor-
tamiento de la funcin f (x) y de su derivada fx en una parte de su dominio:
S = {x [3, 6]}.
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 .
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 m-
todos 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).
217
218 GEDEM - Versin Preliminar
de las funciones. Pero si las condiciones iniciales del problema son determinadas, es
posible obtener las funciones especcas que solucionan el conjunto de ecuaciones.
Por ejemplo, al solucionar algebraicamente la ecuacin x = 3x, obtenemos que el
conjunto de funciones que cumplen esta ecuacin viene dado por la frmula general:
x(t) = Ae3t ; donde A puede ser cualquier nmero real. Pero si agregamos la condicin
inicial x(0) = 4, la nica funcin que satisface la ecuacin diferencial y la condicin
inicial es x(t) = 4e3t . Es necesario anotar que las condiciones no necesariamente
tienen que ser iniciales, tambin pueden imponerse condiciones en otros momentos del
tiempo, o condiciones de fronteraCondicin de Frontera. En el ejemplo, si imponemos
la condicin de frontera x(2) = 5, la funcin particular que satisface la condicin y
el sistema de dinmico es: x(t) = 0.0123e3t .
Por otro lado, por la naturaleza de los mtodos, la solucin numrica de sistemas
dinmicos implica que algn tipo de condicin deba ser impuesta. Es decir que,
al contrario del mtodo algebraico, no es posible obtener ningn tipo de ecuacin
general de las funciones solucin. An ms, al utilizar mtodos numricos nunca
encontramos tales funciones, sino que realizamos una aproximacin numrica a ellas.
x(t)
= f t, x(t)
(9.1)
x(t0 ) = x0
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 Fronte-
ra. 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
x1 = x0 + f (0, x0 )
x (t + h) = x(t + h) + O h2
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
xi = xi1 + hf ti , xi )
xi+1 = xi + hf ti+1 , xi+1 ) (9.5)
x1 x0 hf t1 , x1 ) = 0 (9.6)
La idea bsica del mtodo consiste en expresar las derivadas de orden superior
del polinomio de Taylor, en trminos de la primer derivada. Para hallar la
aproximacin de Runge - Kutta de, por ejemplo, segundo orden, partimos de
la aproximacin de Taylor de grado dos:
h2
x(t + h) = x(t) + hf t, x(t) + f 0 t, x(t) +O(h3 ) (9.7)
2
h hh i
x(t + h) x(t) + f t, x(t) + f t, x(t) +hf 0 t, x(t)
2 2
h h
x(t + h) x(t) + f t, x(t) + f t + h, x(t) + f t, x(t)
2 2
1
xi+1 = xi + (F1 + F2 )
2
donde,
(
F1 = hf (ti , xi )
F2 = hf (ti + h, xi + F1 )
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
1
xi+1 = xi + (F1 + 2F2 + 2F3 + F4 )
6
donde,
F1 = hf (ti , xi )
F = hf (t + 1 h, x + 1 F )
2 i 2 i 2 1
1 1
F3 = hf (t i + 2 h, x i + 2 F2 )
F = hf (t + h, x + F )
4 i i 3
x
y0 + y1 (9.8)
2
La idea bsica de la Regla del Trapecio, en la solucin de IVPs, consiste en
integrar la ecuacin diferencial (9.1) en el intervalo t, t+h y luego aproximarla
utilizando la ecuacin (9.8).
Al integrar la ecuacin diferencial (9.1) en el intervalo especicado obtenemos
la siguiente expresin:
Z t+h Z t+h
x(t)dt
= f t, x(t) dt (9.9)
t t
Z t+h
x(t + h) x(t) = f t, x(t) dt
t
Z ti+1
xi+1 = xi + f t, x(t) dt (9.10)
ti
Z ti+1 h
f t, x(t) dt = f (ti , xi ) + f (ti+1 , xi+1 )
ti 2
h
xi+1 = xi + f (ti , xi ) + f (ti+1 , xi+1 )
2
El mtodo del Trapecio, al igual que el mtodo de Euler modicado, es un
proceso implcito de solucin que resulta ser estable, aunque de baja velocidad
y alto costo computacional.
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:
Z ti+1 h i
f t, x(t) dt = h af (ti , xi ) + bf (ti1 , xi1 ) + cf (ti2 , xi2 ) + ... (9.11)
ti
Z 0+1
f t, x(t) dt af (0, xi ) + bf (0 1, xi1 ) (9.12)
0
p0 (t) = 1
p1 (t) = t
Z 1
p0 (t)dt = ap0 (0) + bp0 (1)
0
Z 1
p1 (t)dt = ap1 (0) + bp1 (1)
0
1 = (1)a + (1)b
1
= (0)a + (1)b
2
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
hh i
xi+1 = xi + 55f (ti , xi ) 59f (ti1 , xi1 ) + 37f (ti2 , xi2 ) 9f (ti3 , xi3 )
24
(9.13)
x(1)=x0;
t(1)=t0;
h=(tf-t0)/n;
for i=1:3 % Algoritmo de Inicio - Euler
d=h*f(t(i),x(i));
x(i+1)=x(i)+d;
t(i+1)=t(i)+h;
end
Z ti+1 h i
f t, x(t) dt = h af (ti+1 , xi+1 ) + bf (ti , xi ) + cf (ti1 , xi1 ) + ...
ti
h h i
xi+1 = xi + 251fi+1 + 646fi 264fi1 + 106fi2 19fi3 (9.14)
720
h h i
xi+1 xi 251fi+1 + 646fi 264fi1 + 106fi2 19fi3 = 0 (9.15)
720
donde ti , ..., ti3 y xi , ..., xi3 son valores conocidos. Cuando el sistema din-
mico 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 re-
sultado de esto, el algoritmo implcito resulta ms estable, pero tambin, ms
lento y ms costoso en trminos de procesamiento.
9
Para una breve introduccin sobre los mtodos numricos utilizados para resolver ecuaciones
no lineales ver Fackler (2003, cap. 3)
230 GEDEM - Versin Preliminar
x(1)=x0;
t(1)=t0;
xp(1)=x(1);
h=(tf-t0)/n;
for i=1:3 % Algoritmo de Inicio - RK4
f1=h*f(t(i),x(i));
f2=h*f(t(i)+h,x(i)+f1);
x(i+1)=x(i)+0.5*(f1+f2);
xp(i+1)=x(i+1);
t(i+1)=t(i)+h;
end
for i=4:n-3
% Calculo del predictor (Adams - Bashforth)
xp(i+1)=xp(i)+(h/24)*(55*f(t(i),xp(i))-59*f(t(i-...
1),xp(i-1))+37*f(t(i-2),xp(i-2))-9*f(t(i-3),xp...
(i-3)));
x(i+1)=x(i)+(h/720)*(251*f(t(i)+h,xp(i+1))+646*f...
(t(i),x(i))-264*f(t(i-1),x(i-1))+106*f(t(i-2)...
,x(i-2))-19*f(t(i-3),x(i-3)));
xp(i+1)=x(i+1);
t(i+1)=t(i)+h;
end
Los anteriores son los mtodos numricos bsicos utilizados para la solucin de pro-
blemas de valor inicial. Es importante conocer la tcnica aplicada por cada uno de
los algoritmos ya que, dependiendo de las propiedades particulares del sistema din-
mico, algunas veces resulta mejor utilizar uno u otro mtodo. Un ejemplo claro de
SISTEMAS DINMICOS 231
Para nalizar esta primera parte sobre mtodos numricos, a continuacin hacemos
mencin a los sistemas dinmicos rgidos y la forma como se solucionan compu-
tacionalmente. Aunque en economa los sistemas de ecuaciones diferenciales rara vez
resultan ser de este tipo, es necesario tener en cuenta este criterio a la hora de en-
frentarse a un sistema dinmico, con el n de escoger el algoritmo ms eciente en
trminos de estabilidad y velocidad de solucin.
x = 10x (9.16)
La solucin analtica es de la forma x(t) = Ae10t , indicando que, a medida que pasa
el tiempo, el valor de x(t) 0. Utilizando la frmula de Euler (ecuacin 9.3), la
regla de iteracin que obtenemos, para este caso particular, es:
xi+1 = xi + h(10xi )
xi+1 = (1 10h)xi
30
20
10
x(t) 0
10
20
30
x(t)=10e10t
xi+1=(110h)xi
40
0 0.5 1 1.5 2 2.5 3 3.5 4
t
11
En ecuaciones diferenciales sencillas es posible determinar un h lo sucientemente pequeo para
obtener una solucin estable, pero con ecuaciones diferenciales ms complicadas este procedimiento
resulta ms complejo y, en algunos casos, casi imposible.
SISTEMAS DINMICOS 233
5
x(t)
4
1
0 0.5 1 1.5 2 2.5 3 3.5 4
t
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 so-
lucin 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.
todos numricos que utilizan, y las situaciones en las cuales se recomienda el uso de
uno u otro. A continuacin presentamos algunas aplicaciones computacionales.
Todos los solvers de ecuaciones diferenciales que incluye MATLABr utilizan la mis-
ma 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:
[T,X]=odesolver(@odefun,t,x0,options,p1,p2,...)
x = 3 x
function dxdt=ej1(t,x);
dxdt=3-x;
Paso 3. Denir las opciones del solver. En este ejemplo utilizamos outputfcn y
stats:
options=odeset('outputfcn',@odeplot,'stats','on');
[T,X]=ode45(@ej1,t,x0,options);
11 successful steps
0 failed attempts
67 function evaluations
0 partial derivatives
0 LU decompositions
0 solutions of linear systems
Finalmente, MATLABr arroja el diagrama de fase (t, x), evidente en la Figura 9.3.
Las dos trayectorias corresponden a cada 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, po-
demos 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 Coman-
dos, sin gracarlos.
dxdt=3x
5
4.5
3.5
x 3
2.5
1.5
1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
t
Es necesario aclarar, que no siempre que las soluciones sean convergentes, el punto -
nal tendr ambas componentes iguales. Por ejemplo, cuando las soluciones convergen
a diferentes equilibrios, el punto nal no tendr las componentes iguales. El siguiente
ejemplo ilustra este caso, y la forma para poder identicar convergencia utilizando
odephas2.
dxdt=3x
5
4.8
4.6
4.4
4.2
x =5 4
0
3.8
3.6
3.4
3.2
3
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
x =1
0
x = 4x2 x3 x 6
function dxdt=ej2(t,x);
dxdt=4*x.^2-x.^3-x-6;
Paso 3. Denir las opciones del solver. Aqu vamos a utilizar las opciones18 outputfcn
17
Aqu denimos el vector tiempo y el vector x0 de una manera alternativa.
18
Notemos que la funcin odephas2 la invocamos de una manera diferente a la utilizada en el
Paso 3 del ejemplo 9.1.
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 utiliza-
mos es ode45:19
[T,X]=ode45(@ej2,t,x0,options);
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.
2 3
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 1 0.9 0.8
x =1.5
0
Cuando ninguna de las soluciones converge, los crculos nunca se acercan unos a
otros y, por el contrario, tienden a separarse (ver Ejercicio 7). Una situacin muy
parecida, en la cual los crculos no se acercan unos a otros, sucede cuando una de las
soluciones no converge, mientras que la otra s. En este caso, la grca muestra una
curva horizontal, o vertical, dependiendo de cual de las dos soluciones sea convergente
(ver Ejercicio 8).
En resumen tenemos que si los crculos, de la grca obtenido con la funcin odephas2,
tienden a acercarse unos a otros, entonces tenemos que ambas soluciones son con-
vergentes; y si adems se presentan tendencias extremas como una curva horizontal
o vertical, entonces alguna de las soluciones se encuentra convergiendo ms rpi-
damente que la otra. Por otro lado, cuando no observemos un acercamiento de los
crculos, la existencia de una curva horizontal o vertical es indicio de que una de las
soluciones converge, mientras que la otra no20 .
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 3
dxdt=4x x x6
2.9
2.8
x =2.5
0
2.7
2.6
2.5
0.4
0.6 0.8
0.9
0.8 1
1.1
1.2
1 1.3
1.4
1.2 1.5
x =0.5 x0=1.5
0
b atx2
x =
x
Con las cuatro condiciones iniciales: x0 = 8, x0 = 2, x0 = 4 y x0 = 10, en
el intervalo [0, 15]. Esta ecuacin no es separable, no es homognea y solucionarla
analticamente es un proceso complejo. Veamos su solucin computacional con a =
0.4 y b = 30:
Paso 2. En otro chero, denir las condiciones iniciales x0, el intervalo de tiempo
t y los valores de los parmetros a y b:
244 GEDEM - Versin Preliminar
t=[0 15];
x0=[-8 -2 4 10];
a=0.4; b=30; % Denicion de los Parametros
Paso 3. Denir las opciones del solver. En este ejemplo no utilizamos opciones.
Paso 4. Invocar el solver para hallar la solucin a la ecuacin. Las caractersticas de
esta ecuacin diferencial hacen necesario utilizar una rutina para ecuaciones
rgidas:21
[T,X]=ode23tb(@ej3,t,x0,[],a,b);
Dado que hemos decidido no especicar ninguna opcin, debemos utilizar los parn-
tesis 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) 0
10
20
30
0 5 10 15
t
batx2
Figura 9.7: Diagrama de Fase (t, x) de x = x
r
b
x
e(t) =
at
Hasta ahora hemos resuelto una ecuacin diferencial a la vez, ahora presentaremos
una generalizacin para la solucin de sistemas de ecuaciones diferenciales. El si-
guiente ejemplo ilustra el procedimiento de solucin de un sistema de 2 2.
v = 10u + 7v
u = u + 4v
La solucin analtica del sistema dinmico, dadas las condiciones iniciales, viene dada
por las siguientes ecuaciones:
function dxdt=ej4(t,x);
v=x(1); % componente 1 de x es v
u=x(2); % componente 2 de x es u
dxdt=[dvdt; dudt];
% componente 1 de dxdt es dvdt
% componente 2 de dxdt es dudt
t=[0 0.5];
v0=1;
u0=0;
x0=[v0; u0];
% componente 1 de x0 es v0
% componente 2 de x0 es u0
Paso 3. Denir las opciones del solver. En este ejemplo utilizamos odeplot como
funcin de salida:
options=odeset('outputfcn','odeplot');
[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
60
50
100
40
v(t)
u(t) v(t) u(t)
30
50 u(t)
20
10
0 0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0 20 40 60 80 100 120 140 160 180
t v(t)
Para poder observar que (0,0) es un equilibrio de punto de silla es necesario tomar
en cuenta ms condiciones iniciales alrededor de este punto. Sin embargo, considerar
ms condiciones implica un problema, ya que las rutinas de MATLABr , a pesar de
solucionar sistemas dinmicos de varias variables, no permiten solucionarlos para ms
de una condicin inicial a la vez. Si, por ejemplo, necesitamos comparar las soluciones
de dos condiciones iniciales, debemos solucionar dos veces el sistema dinmico. El
siguiente ejemplo presenta la solucin del sistema para 3 condiciones iniciales, por
medio de la rutina rk4.
23
Cuando trabajamos con una sola ecuacin diferencial, si la matriz obtenida X tena un tamao
de mn, esto signicaba que la solucin era calculada en m momentos, para n condiciones iniciales.
Ahora, el tamao m n de la matriz X indica que se han calculado las soluciones de n variables
para m momentos.
248 GEDEM - Versin Preliminar
1. (v0 , u0 ) = (10, 9)
2. (v0 , u0 ) = (10, 10)
3. (v0 , u0 ) = (10, 11)
dvdt=10*u+7*v;
dudt=u+4*v;
dxdt=[dvdt; dudt];
[T,X]=rk4('ej4',t,x0);
Para utilizar rk4 debemos introducir flag en la sintaxis de la funcin. Esto simple-
mente 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 colum-
na,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.
Diagramas de Fase (t, v) y (t, u): Para generar los diagramas de fase pa-
ra cada una de las variables, necesitamos utilizar el comando squeeze para
remover una de las dimensiones de la hipermatriz,25 y luego gracar contra
el tiempo. Por ejemplo, para gracar el diagrama de fase (t, v ) tenemos que
remover la dimensin de la variable u:
24
En todos los ejemplos anteriores hemos denido el vector tiempo como un vector la, sin
embargo, los resultados no cambian si el vector tiempo es un vector columna.
25
El comando squeeze remueve la dimensin de una matriz. Vase Cuadro 2.1, pg. 33.
250 GEDEM - Versin Preliminar
plot(t,squeeze(X(:,1,:)))
plot(t,squeeze(X(:,2,:)))
En ambos diagramas de fase, Figura 9.9, se observa que para dos de las condi-
ciones iniciales las soluciones de ambas variables son explosivas, mientras que
para la otra, los valores de v y u se acercan lentamente hacia 0.
a) b)
200 80
150 60
100 40
50 20
v(t) 0 u(t) 0
50 20
100 40
150 60
200 80
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
t t
Diagrama de Fase (v, u): Para gracar este diagrama de fase, tambin es ne-
cesario utilizar squeeze. Sin embargo, ahora gracamos una dimensin versus
la otra, as:
plot(squeeze(X(:,1,:)),squeeze(X(:,2,:)))
15
10
u(t) 0
10
15
25 20 15 10 5 0 5 10 15 20 25
v(t)
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 .
K t = sYt (9.17)
Yt = F (Kt , Lt ) (9.18)
K t = sF (Kt , Lt ) (9.19)
Lt = L0 ent (9.20)
27
En esta seccin nuestro objetivo es presentar la programacin computacional del modelo de
Solow. Para una exposicin terica ms profunda recomendamos revisar el siguiente libro (?), el
artculo original o cualquier texto gua del primer curso de macroeconoma.
28
Hablamos de inversin neta pues suponemos que no hay depreciacin de capital. Cuando existe
depreciacin de capital, la inversin neta es igual a la inversin bruta descontando la depreciacin.
La programacin del modelo con depreciacin se deja como ejercicio para el lector (ver ejercicio 11).
29
Adems del supuesto de homogeneidad de grado uno, por lo general se supone que la funcin
de produccin cumple las siguientes condiciones: FK > 0, FL > 0, FKK < 0, FLL < 0, FKL > 0 y
las denominadas condiciones de Inada.
SISTEMAS DINMICOS 253
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 = (9.22)
Lt
kt K t L t
= (9.23)
kt Kt Lt
kt sF (Kt , Lt )
= n
kt Kt
kt 1
= sF 1, n
kt kt
1
kt = skF 1, nkt
kt
kt = sF (kt , 1) nkt (9.24)
Tambin es necesario denir unos valores para las tasas de ahorro y crecimiento de
la poblacin. Suponemos que s = 15.5 % y n = 2.2 %. A continuacin presentamos
la respectiva programacin del modelo.
Programacin:
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 di-
ferencial (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
[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
Modelo de Solow
41.8
41.6
41.4
41.2
41
kt
40.8
40.6
40.4
40.2
40
0 10 20 30 40 50 60 70 80 90 100
t
Ejercicios
1) Considere el siguiente Problema de Valor Inicial:
x = 4x
x0 = 2
x =
x0 =
a) Genere una matriz A202 donde la primer columna sea la solucin obtenida
por el comando ode113 y la segunda la del script del algoritmo Adams -
Bashforth - Moulton de la pgina 230.
b) Calcule el vector columna d cuyas componentes cumplan la siguiente regla:
dj = aj1 aj2 .
c) Graque d contra el tiempo. Qu nos dice este resultado?
x = 10x
258 GEDEM - Versin Preliminar
x = b ax
x0 = 1.8
7) Necesito una ecuacin diferencial que tenga un equilibrio inestable. Las dos condi-
ciones iniciales no llevan al equilibrio. Ponerlos a gracar con odeplot y odephas2.
8) Necesito un IVP con dos condiciones iniciales, donde una converja y la otra no.
Ponerlos a gracar con odeplot y odephas2.
12) Utilizando el comando gradient determina la senda del salario real y la tasa de
inters del ejemplo planteado en la pgina 37.
32
Observe que la depreciacin total es: D = dK(t).
260 GEDEM - Versin Preliminar
Bibliografa
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.
Kincaid, D., y Cheney W. 1994. Anlisis Numrico: Las Matemticas del Clculo
Cientco. Addison-Wesley Iberoamericana, Delaware.
261
262 GEDEM - Versin Preliminar
263
264 GEDEM - Versin Preliminar
Salidas, 10