Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(Versión Preliminar)
Norma Gómez
Lida Quintero
Diego Corredor
Mario González
Norman Maldonado
Eduardo Sánchez
11 de octubre de 2005
2
Índice general
1. Conceptos Básicos 1
r
1.1. ¾Qué es MATLAB ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Ventanas de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1. Command Window . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2. Launch Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3. Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.4. Command History . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.5. Current Directory . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. M-File Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4. Procesos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. Otros Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.1. Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.2. Help y Doc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.3. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
I ÁLGEBRA LINEAL 27
2. Matrices y Vectores 29
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1. Hipermatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1.2. Tipos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . 36
2.1.3. Operaciones Básicas entre Matrices . . . . . . . . . . . . . . . 41
2.1.4. Análisis de una Matriz . . . . . . . . . . . . . . . . . . . . . . 43
2.1.5. Matrices Factorizables . . . . . . . . . . . . . . . . . . . . . . 46
2.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.1. Análisis de un vector . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.2. Operaciones entre Vectores . . . . . . . . . . . . . . . . . . . 51
i
ii
3. Sistemas de Ecuaciones 69
3.1. Métodos Directos o Analíticos . . . . . . . . . . . . . . . . . . . . . . 70
3.1.1. Eliminación Gauss-Jordan . . . . . . . . . . . . . . . . . . . . 70
3.1.2. Método de la Inversa . . . . . . . . . . . . . . . . . . . . . . . 73
3.1.3. Regla de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.1.4. Factorización de Crout o LU . . . . . . . . . . . . . . . . . . 76
3.1.5. Factorización de Cholesky . . . . . . . . . . . . . . . . . . . . 78
3.2. Métodos Indirectos o Numéricos . . . . . . . . . . . . . . . . . . . . . 79
3.2.1. Matrices Débilmente Condicionadas . . . . . . . . . . . . . . 80
3.2.2. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.2.3. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.1. Gauss-Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.2. Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.3.3. Método de Richardson . . . . . . . . . . . . . . . . . . . . . . 89
II CÁLCULO 91
4. Funciones 93
4.1. Funciones de una Variable . . . . . . . . . . . . . . . . . . . . . . . . 94
4.1.1. Visualización de funciones de una variable . . . . . . . . . . . 94
4.1.2. Opciones adicionales para los grácos . . . . . . . . . . . . . 99
4.2. Funciones de dos variables . . . . . . . . . . . . . . . . . . . . . . . . 103
4.2.1. Visualización de Funciones de dos variables . . . . . . . . . . 103
4.2.2. Opciones adicionales para los grácos . . . . . . . . . . . . . 108
4.3. Simulaciones en funciones de una variable . . . . . . . . . . . . . . . 114
4.4. Simulaciones en funciones de dos variables . . . . . . . . . . . . . . . 121
4.5. Análisis de Funciones económicas . . . . . . . . . . . . . . . . . . . . 124
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
iii
5. Derivación 135
5.1. Derivación de primer orden . . . . . . . . . . . . . . . . . . . . . . . 136
5.1.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.1.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.1.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.1.4. fjac y fdjac . . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.1.5. Aplicación: Una función de Producción tipo Cobb-Douglas . . 145
5.2. Derivación de orden superior . . . . . . . . . . . . . . . . . . . . . . 147
5.2.1. polyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.2.2. gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.2.3. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
5.2.4. fdhess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
5.2.5. Expansión de Taylor . . . . . . . . . . . . . . . . . . . . . . . 156
5.2.6. Aplicación: El Equilibrio en el Modelo de Cournot . . . . . . 157
5.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
5.4. Apéndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
6. Integración 167
6.1. Integración por Regla del Exponente . . . . . . . . . . . . . . . . . . 168
6.2. Regla del Trapecio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.3. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.4. Integrales Dobles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8. Optimización 213
8.1. Optimización no lineal sin restricciones . . . . . . . . . . . . . . . . . 214
8.1.1. Minimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
v
vi
ix
x
Introducción
En general, para que tales desarrollos puedan ser utilizados se requiere hacer cálculos
matemáticos que en algunas ocasiones llegan a ser bastante complicados e incluso
imposibles de realizar analíticamente. Por otro lado, en la actualidad el uso de los
computadores para la solución de problemas se ha convertido en una práctica común
dada su gran capacidad de cálculo y precisión en comparación con los métodos tra-
dicionales.
xi
xii GEDEM - Versión Preliminar
El texto se desarrolla con base en los temas básicos de la economía matemática como
son: Sistemas de ecuaciones lineales, matrices y vectores, rectas y planos, funciones,
cálculo diferencial e integral, optimización "libre" y restringida y sistemas dinámicos.
Cada uno de los temas mencionados es tratado en un capítulo en el que se presenta
el problema matemático a resolver y su correspondiente desarrollo computacional,
acompañado de ejemplos y ejercicios matemáticos y económicos que permiten una
plena comprensión del tema.
Existen temas más avanzados que no son objeto de estudio de este libro. En particu-
lar, temas como Optimización Dinámica, Ecuaciones Diferenciales y en Diferencias
Estocásticas, Optimización Dinámica con Incertidumbre o Modelos de Equilibrio
General Computable no son tratados aquí ya que generalmente estos se trabajan
en libros actualmente disponibles en el mercado que van dirigidos a estudiantes de
Posgrado o de Doctorado, o en Papers de libre acceso por Internet. Este libro es tan
solo una introducción a la utilización de métodos computacionales en Economía y
Finanzas, pero es útil en la medida que permite llenar el vacío existente entre las ma-
temáticas básicas que no se suelen enseñar computacionalmente y las matemáticas
avanzadas que casi siempre se tratan con este tipo de métodos.
El libro comienza con una breve introducción a los conceptos básicos de MATLABr en
el capítulo 1, y luego de ella, éste se divide en tres partes. La primera parte contiene
los Capítulos 2 y 3, y trata los temas relacionados con el Algebra Lineal. En el Ca-
pítulo 2 se trabajan las Matrices y los Vectores, junto con sus propiedades (inversa,
traspuesta, norma y traza, entre otros), y en el Capítulo 3, se estudian los sistemas
de ecuaciones y los diferentes métodos computacionales para resolverlos.
La segunda parte del libro está compuesta por los Capítulos 4, 5 y 6, y presenta el
análisis de funciones. El capítulo 4 muestra cómo utilizar MATLABr para visualizar
grácamente una función de una o de dos variables, y determinar a partir de este
gráco sus propiedades. Debido a las limitaciones en términos de dimensión y de
algunos cálculos especícos, en los capítulos 5 y 6 se abandona el método gráco
y se procede a analizar una función a partir del cálculo diferencial e integral. En
particular, en el capítulo 5 se explican en detalle las herramientas disponibles en
MATLABr para calcular numéricamente la derivada de una función en un punto o
en un conjunto nito de puntos, a partir de lo cual se pueden determinar regiones
INTRODUCCION xiii
en donde una función crece o decrece además de otras propiedades, mientras que en
el capítulo 6 se presentan los diferentes métodos numéricos que se pueden emplear
para calcular en MATLABr integrales denidas de cualquier tipo de función.
En este texto hemos decidido trabajar con MATLABr por varias razones: en primer
lugar, muchos autores actualmente trabajan en MATLABr para resolver computacio-
nalmente problemas económicos. Por ejemplo, Thomas Sargent utiliza MATLABr para
modelos de política scal, inación y desempleo, y para resolver matemáticamente
juegos dinámicos y equilibrios de Nash, Filtro de Kalman y ecuación de Ricatti, entre
1
Rutherford, Thomas (1999). Applied General Equilibrium Modeling with MPSGE as a GAMS
Subsystem: An Overview of the Modeling Framework and Syntax. En: Computational Economics,
14:1-46. Kluwer Academic Piblishers
2
Varian, Hal (1996). Computational Economics and Finance: Modeling and Analysis With
Mathematica (Economic & Financial Modeling with Mathematica). Ed. Telos.
xiv GEDEM - Versión Preliminar
Debemos mencionar que esta es una version preliminar del libro, aunque el mismo ya
se encuentra registrado ante la Dirección Nacional de Derecho de Autor. Actualmente
el Grupo trabaja en la corrección del mismo. Cualquier comentario, corrección o
sugerencia por favor enviarla al correo electrónico grupogedem@yahoo.com.
3
Uhlig, Harald. A Toolkit for Analyzing Nonlinear Dynamic Stochastic Models Easily. CEPR
Capítulo 1
Conceptos Básicos
Diego Corredor, Norman Maldonado1
Este software se caracteriza por realizar sus cálculos utilizando matrices y vecto-
res, permitiendo manipular grandes cantidades de información de manera rápida y
sencilla, es una de las interfaces de mayor uso a nivel mundial, y actualmente se
trabaja con ella en Biotecnología, Medicina, Comunicaciones, Electrónica, Servicios
Financieros y Aeroespacio.
1
2 GEDEM - Versión Preliminar
Existen dos tipos de toolboxes: por un lado se encuentran los toolboxes diseñados
por el grupo creador de MATLABr (The MathWorks Inc.), y por otro lado, los
toolboxes desarrollados por usuarios comunes del programa con el n de suplir sus
propias necesidades (generalmente estos últimos son de libre acceso en Internet, e
incluso algunos de ellos se pueden bajar de manera gratuita de la página web de
Mathworks Inc. 4 ). En este libro nos centramos en el código básico del programa y
en un toolbox de distribución gratuita denominado CompEcon5 aplicado a economía
y nanzas.
(1+sqrt(5))/2
ans =
1.6180
1.2.3. Workspace
Esta ventana se encuentra en la misma posición del Launch Pad, y para acceder
a ella es necesario hacer click en la pestaña Workspace en la parte izquierda de la
pantalla.
Como se observa en la Figura 1.4, en esta ventana se muestran todos las variables que
el usuario ha denido en la sesión, en la columna Name se muestra el nombre de cada
una de las variables, en la segunda columna llamada Size se muestra el tamaño de
cada variable7 , en la tercera y cuarta columna se encuentran especicados el número
7
Dado que MATLABr trabaja con matrices, la especicación del tamaño de la variable es
CONCEPTOS BÁSICOS 5
Como se muestra en la Figura 1.5, los comandos de cada sesión son almacenados y
organizados por fecha, por medio del rótulo %-- Hora Fecha-- %
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 ubicación diferente (por ejemplo C:\Mis do-
cumentos), este no podrá ser abierto ni ejecutado, a menos que se le especique al
programa la ubicación del mismo.
Las anteriores son las ventanas básicas de trabajo. Existen otras de uso más especí-
co, como por ejemplo las ventanas de grácos o las de Demos; algunas de ellas las
describiremos a lo largo del libro.
La ventana M-le Editor permite digitar los comandos en un programa o M-le que
recoge múltiples instrucciones, para ejecutarlas de manera secuencial (en orden de
líneas). Para crear un M-File, se debe seleccionar en la parte superior de la Ventana
de comandos, File ⇒ New ⇒ M-File. Aparece, entonces, el Editor de M-Files, Figura
1.7.
Para comentar múltiples líneas, se deben seleccionar las líneas que se desean comentar
y luego de ello presionar Ctrl+R, o seleccionar en la parte superior del editor de M-
Files, Text ⇒ Comment. De manera similar, cuando se necesita quitar los % de las
líneas comentadas, se utiliza Ctrl+T o en el menú Text se selecciona Uncomment.
Todo M-File debe ser guardado en una carpeta para que pueda ser ejecutado. Por
defecto, el programa utiliza la carpeta Work para almacenar los archivos, aunque se
puede guardar en otra carpeta. En este caso se ha guardado el M-File en la carpeta
Work con el nombre pcb, la ubicación del archivo se observa en la parte superior de
la pantalla, que en este caso es C:\MATLAB6p1\work \pcb.m.9 como se observa en
la parte superior de la Figura 1.8.
Un M-File, puede ejecutarse de cuatro formas distintas, (en todas ellas el M-File
se guarda automáticamente antes de ser ejecutado): primero, presionando la tecla
F5; segundo, seleccionando Debug ⇒ Run en la parte superior del Editor de M-
Files; tercero, haciendo click sobre el ícono , en la ventana del editor; y cuarto,
9
Cuando no se ha guardado el archivo, al lado de esta ubicación aparece el símbolo * , y una
vez guardado, éste desaparece.
CONCEPTOS BÁSICOS 9
Cuando hay un error en el M-le. El programa dice en que línea y en que columna se
presenta este error. Para corregirlo, se puede ir al M-File haciendo doble click sobre
el link que aparece en la Ventana de Comandos y luego de ello realizar la corrección.
Hay dos aspectos del programa que se pueden precisar a partir de la gura 1.9:
por ejemplo, las nuevas ventanas que contienen grácos. Se sugiere que estos
tres comandos se coloquen siempre al comienzo de un M-File.
Hasta ahora hemos visto como los M-les sirven para presentar una sucesión de
comandos análoga a la que se haría desde la Ventana de Comandos, este tipo de M-
les se conocen como cheros de comandos o Scripts , sin embargo existen otro tipo de
archivos .m que representan funciones . Una función, en términos computacionales, es
un programa que recibe unas entradas o inputs , y realizando cálculos matemáticos
y lógicos genera unas salidas u outputs . Todo el código básico de MATLABr y
los toolboxes están compuestos de M-les que son utilizados como funciones. Para
construir una función en un M-le, se debe colocar la sintaxis:
[salidas]=nombre(entradas)
function [x1,x2]=raiz(a,b,c);
x1=(-b+(sqrt(b^2-4*a*c)))/(2*a);
x2=(-b-(sqrt(b^2-4*a*c)))/(2*a);
Una vez guardada la función (con el nombre raiz.m), ésta se puede invocar desde la
Ventana de Comandos o desde algún otro M-le. Por ejemplo, para hallar las raíces
de 2x2 + 4x + 1 = 0 podemos utilizar la función que creamos ejecutando la siguiente
instrucción en la Ventana de Comandos:
CONCEPTOS BÁSICOS 11
[x1,x2]=raiz(2,4,1)
x1 = -0.2929
x2 = -1.7071
Finalmente, hay que mencionar una característica adicional de la que disponen los M-
les. Cuando hay líneas que son muy largas, por ejemplo en fórmulas matemáticas
bastante complejas, MATLABr permite dividir estas líneas mediante tres puntos
suspensivos ... que se deben colocar al nal de cada segmento. Por ejemplo,
veamos la partición de la fórmula cuadrática mencionada en el ejemplo anterior.
Para ello, coloquemos en la primera línea el numerador y en la segunda (separada
de la primera con puntos suspensivos) el denominador, así:
function [x1,x2]=raiz(a,b,c);
x1=(-b+(b^2-4*a*c)^0.5)...
/(2*a);
x2=(-b-(b^2-4*a*c)^0.5)...
/(2*a);
Analíticamente (utilizando álgebra) sabemos que para hallar x debemos colocar to-
12 GEDEM - Versión Preliminar
Los dos métodos (analítico y numérico) nos permitieron llegar a la solución. Sin
embargo, el método numérico, resultó ser poco eciente, es decir requirió de más
recursos (tiempo y programación). Además, fue más fácil realizar manualmente las
operaciones requeridas por el método analítico. En general resulta poco eciente el
cálculo manual de las operaciones que requiere un metodo numérico. Una herramienta
computacional como MATLABr elimina las limitaciones de cálculo, resolviendo este
tipo de problemas.
CONCEPTOS BÁSICOS 13
En el ejemplo anterior, el método numérico fue un camino largo para hallar la solu-
ción. Esto no siempre ocurre, hay algunos problemas que son imposibles de abordar
analíticamente y aunque podrían resolverse manualmente utilizando métodos numé-
ricos, se llevaría mucho tiempo realizar todos los cálculos, además es probable que
durante el proceso se cometan errores humanos.
if condicion
sentencias1
else
sentencias2
end
En este caso, si se cumple la condición (if), se realizan las operaciones que componen
el primer grupo de sentencias (sentencias1). Si no se cumple la condición (else),
se ejecuta el segundo grupo de sentencias (sentencias2). En caso de omitir else
y sus respectivas sentencias (sentencias2) y además no se cumple la condicion,
14 GEDEM - Versión Preliminar
if condicion1
sentencias1
elseif condicion2
sentencias2
elseif condicion3
sentencias3
else
sentencias4
end
Por otro lado, la sentencia for es un bucle, y realiza de manera repetida una se-
cuencia de operaciones con un determinado conjunto de datos. Su forma más sencilla
es:
for i=1:n
sentencias
end
En este caso, el programa comienza por asignar a i el valor de 1 y realiza todas las
operaciones establecidas en las sentencias (Se ha tomado arbitrariamente como
contador la variable i. Sin embargo, este contador hubiera podido ser cualquier
otra variable, por ejemplo, for a=1:n). A continuación, i toma el valor de 2 y de
nuevo, se realizan las operaciones. Este proceso se repite n veces, y en la solución de
un problema por medio de métodos numéricos cada repetición del proceso se llama
iteración. Sin embargo, el contador (en este caso i) no está limitado a tomar valores
enteros positivos. Un caso más general es cuando el contador es un vector de la forma
[vi , vi + a, (vi + a) + a , . . . , vf ] que contiene un conjunto de valores que comienzan
en vi, terminan en vf y están separados en intervalos de magnitud a. La forma de
la sentencia for en el caso más general es:
for i=vi:a:vf
sentencias
end
separa los valores del contador i. Por ejemplo, para colocar en la sentencia for un
contador i que contenga los valores 0.3 0.4 0.5 . . . 3.4, la programación debe ser
de la forma:
for i=0.3:0.1:3.4
sentencias
end
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 iteración en el anterior ejercicio era trivial y arbitraria, aunque fue útil
para ilustrar el uso de las sentencias if y for. En realidad, las reglas que se utilizan
para la solución de problemas por medio de métodos numéricos son más elaboradas
y permiten establecer condiciones para que el problema converja hacia una solución.
Estas reglas de iteración y métodos numéricos se mencionan más detalladamente en
capítulos posteriores 10 .
Para añadir una carpeta al Path, se debe ir al menú File⇒ Set Path, en donde aparece
una Ventana similar a la Figura 1.10. Por medio de la opción Add Folder, se puede
agregar cualquier carpeta al Path. Una vez agregada la carpeta, es necesario guardar
los cambios en el Path orpimiendo el botón Save. Otras opciones disponibles en este
menú permiten eliminar carpetas del Path, colocar el Path que el software trae por
defecto o incluir todas las subcarpetas de una carpeta.
10
Se sugiere consultar algunos textos como Fackler (2003), Judd (1998) y Mora (2001).
CONCEPTOS BÁSICOS 17
Las rutinas de MATLABr están organizadas por temas en diferentes carpetas. Por
ejemplo, en la carpeta C:\MATLAB6p1\toolbox\matlab\sparfun se encuen-
tran todas las rutinas para trabajar con un tipo especial de matrices que veremos
18 GEDEM - Versión Preliminar
help también es útil para ver los comandos o rutinas disponibles para trabajar un
tema en particular, por ejemplo, ejecutando en la Ventana de Comandos la instruc-
ción help C:\MATLAB6p1\toolbox\matlab\sparfun, se muestran todos los
comandos o rutinas, que sirven para trabajar con matrices dispersas.
MATLABr también permite que el usuario pueda colocar una sección de ayuda (o
help) a los M-les que él construya. Si el M-le es un programa, esta opción es útil
porque permite colocar un comentario que describa la utilidad del programa que se
creó. Si el M-le es una función, con esta opción se puede diseñar un help similar
a los que tienen las rutinas del software, que describa tanto los inputs como los
outputs de dicha función. Para colocar una sección de ayuda en cualquier M-le, es
necesario colocarla al inicio de éste, en líneas consecutivas comentadas. Por ejemplo,
retomando el M-le pcb.m creado anteriormente, y colocando en él una sección de
ayuda, el M-le quedaría de la forma:
Para no entorpecer el trabajo en la Ventana de Comandos, dado que todas las ayudas
CONCEPTOS BÁSICOS 19
Por otro lado, el comando doc permite consultar la documentación en línea disponi-
ble en MATLABr sobre cualquier comando o rutina. Esta documentación contiene
información más detallada que la especicada en el help sobre la sintaxis y métodos
numéricos que utiliza cada rutina.
Para poder utilizar el comando doc se requiere que el usuario, durante el proceso de
instalación, haya instalado además del programa toda la documentación. La sintaxis
del comando es doc rutina, donde rutina corresponde al comando o rutina del
cual se quiere consultar la documentación. Por ejemplo, al ejecutar en la Ventana de
Comandos doc clc, MATLABr despliega la documentación para el comando clc
en una ventana nueva, similar a la que aparece en la Figura 1.12.
1.5.3. Objetos
MATLABr , con base en vectores y matrices, trabaja otro tipo de datos (objetos):
Cadenas de caracteres.
C:\MATLAB6p1\toolbox\matlab\strfun
Comando Características
char(c1,c2,...) Crea una matriz de caracteres a partir de las cadenas
c1, c2,..., completando con espacios las cadenas
más cortas.
deblank(c1) Elimina los espacios al nal de una cadena de caracte-
res c1.
c1==c2 Compara dos cadenas carácter a carácter. Devuelve un
vector o matriz de unos y ceros, dependiendo de si el
elemento es igual o diferente, respectivamente.
int2str(a) Convierte un número entero a en cadena de caracteres.
num2str(a,n) Convierte un número real a en cadena de caracteres.
Cuando el número tiene decimales, por defecto, se al-
macenan en la cadena solo cuatro cifras decimales. (el
número de decimales puede ampliarse o reducirse a n).
str2double(c1) Convierte una cadena de caracteres representando un
número real en el número real correspondiente.
c1=cellstr(C) Convierte una matriz de caracteres C en un vector de
celdas c1, eliminando los espacios al nal de cada ca-
dena.
Estructuras.
Podemos crear una estructura que contenga el PIB per cápita y la participación
del consumo dentro del PIB del año 2000 para algunos países latinomaerica-
nos (Colombia, Argentina, Brasil y Paraguay). Para ello, necesitamos crear el
12
García de Jalón (2001)
22 GEDEM - Versión Preliminar
(structure array), y cada uno de ellos contiene campos relacionados con países
de Latinoamérica. Se puede acceder a la información que tiene cualquiera de
estos campos escribiendo su ubicación. Por ejemplo, para acceder a la partici-
pación que tiene el consumo en el PIB de Colombia, basta con escribir en la
Ventana de Comandos pcon.col, que arroja como resultado 67.93. el sof-
tware dispone de comandos que sirven para manipular estructuras. Algunos de
ellos se presentan en el Cuadro 1.3.
Comando Características
e=struct(0 campo10 ,valor1,...) Permite crear la estructura e en una
sola línea
rmfield(ES,e) Elimina el campo e de la estructura ES
Como las estructuras son objetos que permiten almacenar datos, es de espe-
rar que éstas se puedan almacenar en matrices y vectores. Para ello, basta
con especicar la posición que debe ocupar la estructura dentro de una matriz
o un vector. Por ejemplo, para crear las dos estructuras del ejemplo anterior
(PIB percápita y participación del consumo para algunos países de Latinoa-
mérica, año 2000) y colocar estas estructuras en un vector lat, que contega la
información de estas variables para algunos países de Latinoamérica:
% Pib Percapita
pibp=struct(0 col0 ,5795.55,0 arg0 ,11729.08,...
0 bra0 ,7744.71,0 pry0 ,4801.30)
lat(1)=pibp;
24 GEDEM - Versión Preliminar
lat(2)=pcon;
Con estas instrucciones, se crea un vector lat con dos columnas que contie-
ne campos (1×2 struct array with fields). En su primera columna
(lat(1)), este vector contiene el PIB percápita:
ans =
col: 5795.55
arg: 11729.08
bra: 7744.71
pry: 4801.30
mientras que en la segunda columna (lat(2)), contiene información sobre la
participación del consumo:
ans =
col: 67.93
arg: 69.06
bra: 65.75
pry: 77.14
En este ejemplo hemos creado un cell array que contiene cuatro objetos: en su
primera posición, contiene un vector de 3×1, en la segunda y tercera contiene
matrices vacías, y en la cuarta una cadena de caracteres. Nótese que no es
14
Contrario a los otros objetos, que solo permiten un mismo tipo de datos en todas sus posiciones.
CONCEPTOS BÁSICOS 25
Matrices dispersas.
Para terminar este capítulo, debemos mencionar dos comandos que son fundamenta-
les para la presentación de resultados numéricos y grácos en MATLABr . El primero
es el comando pause, cuya sintaxis es pause(n). Este comando permite detener
una secuencia de operaciones o procesos por n segundos. cuando se utiliza de la for-
ma pause, cualquier cálculo posterior a esta instrucción se detiene indenidamente,
hasta que el usuario oprima alguna tecla.
A partir de estos conceptos básicos, es posible presentar la estructura del libro que
se divide en tres secciones: Algebra Lineal, Cálculo y Optimización y Dinámica. En
la primera sección se trabaja con los conceptos de Matrices y Vectores (capítulo 2)
y Sistemas de Ecuaciones (capítulo 3). En la segunda sección se analiza el compor-
tamiento de una función a partir de herramientas grácas (capítulo 4) y de cálculo
diferencial (capítulo 5) e integral (capítulo 6). En la tercera sección se estudian las
condiciones sucientes (o de segundo orden) de un problema de optimización (ca-
pítulo 7) y los algoritmos para hallar puntos óptimos (capítulo 8). Finalmente, se
presenta una introducción a la solución numérica de sistemas dinámicos (capítulo
??).
Parte I
ÁLGEBRA LINEAL
27
Capítulo 2
Matrices y Vectores
Lida Quintero, Mario González, Eduardo Sánchez
El estudio del álgebra lineal es útil en áreas importantes para las ciencias económi-
cas tales como teoría de la optimización, teoría de las ecuaciones diferenciales y en
diferencia, estadística y econometría. El objetivo de este capítulo es estudiar las ca-
racterísticas básicas del álgebra lineal, utilizando MATLABr . En la primera sección
examinaremos el manejo básico de las matrices y sus distintas operaciones; en la
segunda, abordaremos los vectores junto a sus particularidades y operaciones; y en
la tercera, veremos algunas herramientas que facilitan el cálculo de valores y vectores
propios.
2.1. Matrices
Una matriz es un arreglo rectangular de elementos dispuestos en renglones (las) y
columnas.
a11 a12 ... a1n
a21 a22 ... a2n
. .. ..
. ..
. . . .
am1 am2 ... amn
29
30 GEDEM - Versión Preliminar
Las matrices deben recibir un nombre en MATLABr para que sean almacenadas du-
rante la sesión. Este nombre puede ser una o varias letras, no obstante, se recomienda
que las matrices se denoten con letras mayúsculas, sin números o caracteres espe-
ciales 1 . Las matrices deben estar contenidas entre paréntesis angulares [ ] y ser
denidas por las, es decir, se separan las componentes de una misma la mediante
espacios o comas (,), mientras que las las se diferencian entre sí con punto y coma
(;) o presionando enter.
A=[1,3,9;7,5,4]
O también 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 extensión del concepto de matriz es el concepto de hipermatriz, denida como
una matriz de más de dos dimensiones. Por ejemplo, una hipermatriz de 3 dimensio-
nes3 es una hipermatriz de tamaño m × n × xk donde k es el número de matrices del
arreglo (es decir, la tercera dimensión: la profundidad de la hipermatriz), cada una
con m las y n columnas, visible en la Figura 2.1.
N
Figura 2.1: Hipermatriz de 3 dimensiones
3
MATLABr permite trabajar hipermatrices de cualquier dimensión.
32 GEDEM - Versión 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 dimensión dim. Por ejemplo deniendo las matrices:
C=cat(3,A,B)
Ejemplo 2.2. Supongamos que un analista desea organizar una serie de información
compuesta por los indicadores macroeconómicos de tres países (P1 , P2 , P3 ) durante
los últimos dos años (A1 , A2 ).
Es así como él obtiene los datos para el crecimiento del PIB, la variación en la Tasa
de cambio respecto al EURO, la inación y la variación en el nivel de desempleo:
MATRICES Y VECTORES 33
Comando Acción
size(A) Tamaño de la hipermatriz A
ndims(A) Número de dimensiónes de la hipermatriz A
squeeze(A) Elimina dimensiones iguales a uno
reshape(A,m,n) Distribuye los elementos de la hipermatriz A en una
matriz de tamaño m × n
permute(A) Permuta las dimensiones de la matriz A según los ín-
dices del vector v
ipermute(A) Permutación inversa
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 - Versión 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
(2×1×4). Nótese que en este caso la segunda dimensión de la matriz no es necesaria,
ya que eliminando ésta dimensión no se modica el contenido de la matriz B. Así, la
matriz B que inicialmente es de tres dimensiones la podemos escribir como una de
dos dimensiones asi:
" #
−3 5 0 7
B2×4 =
0 3 2 2
MATLABr dispone del comando squeeze para eliminar dimensiones que son igua-
les a uno, simplicando las dimensiones de una matriz. Aplicando este comando a la
matriz B que creamos anteriormente, de la forma squeeze(B), obtenemos:
ans = -3 5 0 7
0 3 2 2
4
Es posible crear cualquier matriz de tamaño m × n que cumpla la condición m × n = 24. Por
ejemplo, una matriz de (12 × 2).
MATRICES Y VECTORES 35
ans = 5 6 4 10
5.5 7 4 8
7 8 7 11
6 9 6 11
6 10 10 7
5 11 9 10
En esta matriz encontramos, en las columnas, cada uno de los indicadores macro-
económicos y en cada par de las, los datos correspondientes a cada uno de los
tres países, vemos como las dos primeras las corresponden al pais P1 , las dos las
siguientes al país P2 y las últimas dos las a P3 .
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 - Versión Preliminar
C(:,:,3) = 6 5
10 11
10 9
7 10
Cada una de estas matrices nos dejan analizar los datos de forma distinta, cada una
de ellas tiene, en las columnas, los años y las las corresponden a los indicadores,
cada una de estas expresiones podría entenderse como la información organizada por
país.
Por su parte, el comando ipermute realiza la operación inversa del comando permute,
y su sintaxis es ipermute(A,v). En este ejemplo, al aplicar ipermute a la matriz
C volvemos a la matriz inicial A.
En esta sección hemos observado como las hipermatrices sirven para manejar infor-
mación, sin embargo esta no es su única función, mas adelante veremos el papel que
juegan en la construcción del producto cartesiano y de grácas.
Matrices Dispersas
Un concepto de interés computacional son las matrices dispersas, matrices en las que
la mayoría de sus componentes son cero. Cuando se trabaja con matrices de gran ta-
5
Aunque también es posible con ([ ])
6
Si se utiliza "([ ])", las dimensiones también se pueden separar por espacios.
MATRICES Y VECTORES 37
D = 0 5 -6 0
3 0 0 0
9 0 -7 0
0 0 0 4
Comando Características
sparse(D) Convierte una matriz D a su forma dispersa, eliminando todos
los elementos en los que haya cero.
sparse(i,j) Crea una matriz de ceros de tamaño i × j .
sparse(i,j,s,m,n) Crea una matriz dispersa a partir de: i y j , que indican la po-
sición de los elemetos diferentes de cero en la nueva matriz; s,
que es el vector de elementos y m y n, que implican que es de
tamaño m × n.
speye(i,j) Forma una matriz dispersa de tamaño i × j con unos en la dia-
gonal principal.
spones(D) Genera una matriz con la misma estructura de dispersión de D,
pero reemplaza los elementos diferentes de cero por unos.
spdiags(D) Extrae todas las diagonales con elementos diferentes de cero de
la matriz D de tamaño (i,j). La nueva matriz tiene i las y tantas
columnas como diagonales diferentes de cero tenga D.
spdiags(D,d) Extrae las diagonales especicadas por d (donde d=0 correspon-
de a la diagonal principal) de la matriz D.
nonzeros(D) Vector columna con los elementos diferentes de cero de D.
[i,j]=find(D) Indica las posiciones (en las y columnas) de los elementos dife-
rentes de cero de D.
nnz(D) Número de elementos diferentes de cero en la matriz D.
issparse(A) Si el resultado de esta rutina es uno, indica que la matriz ha sido
guardada de tipo dispersa y, si es cero, de cualquier otra forma.
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 posición y el valor del elemento en esa posición.
Así, por ejemplo, en la la 2 (primer elemento del vector i) columna 1 (primer
elemento del vector j), está el elemento 3 (primera entrada vector s) y así sucesiva-
mente. Para generar la matriz dispersa, hacemos que corresponda al tamaño de D:
[m,n]=size(D) y, entonces, construimos la matriz dispersa:
S = sparse(i,j,s,m,n)
ans = (2,1) 1
(3,1) 1
(1,2) 1
(1,3) 1
(3,3) 1
(4,4) 1
Ahora bien, spdiags permite la construcción de una matriz donde las diagonales
con elementos diferentes de cero constituyan las columnas y la cantidad de las
equivale a la cantidad de la matriz original. Así, C=spdiags(S) es:
C = 9 3 0 0 0
0 0 0 5 0
0 0 -7 0 -6
0 0 4 0 0
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 caracterísiticas de la matriz
A:
44 GEDEM - Versión Preliminar
1 3 −2
A2×3 = 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 - Versión 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
Si operamos los resultados, tenemos entonces que L∗U = P ∗A. Debemos acla-
rar que no todas las matrices son factorizables: sólo aquellas cuyo determinante
es diferente de cero.
Cholesky
La descomposición de Cholesky factoriza una matriz A, simétrica y denida
positiva, de tal forma que A = U T U , donde U es una matriz triangular inferior
con elementos positivos en su diagonal. Es posible calcular la matriz U a través
de la descomposición de Cholesky con el código chol. Veamos, por ejemplo,
la descomposición de Cholesky para la siguiente matriz:
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
Am×n = Um×m Sm×n Vn×n (2.1)
Aunque existen otros métodos para descomponer matrices, hacemos énfasis en las
factorizaciones P A = LU y Cholesky debido a la utilidad que tienen para el análisis
y las soluciones de sistemas de ecuaciones.
2.2. Vectores
Los vectores son tipos especiales de matrices de tamaño n × 1 (vector columna) ó
1 × n (vector la) en el espacio <n . Geométricamente, pueden ser denidos como el
segmento de recta entre el origen y un punto que se caracteríza por poseer dirección,
magnitud y sentido.
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 máximo de sus valores singulares. Ahora bien, los
valores singulares de una matriz son los elementos de la diagonal de la matriz S que
resulta de descomponer la matriz original en un producto de tres matrices tal que:
50 GEDEM - Versión Preliminar
4 P1
2
z
1
P2
0 15
10
−1 5
30 0
25
20 P
15 −5
10
5
−10
0 x
y
A=U ∗S∗VT
[U,S,V]=svd(A)
Dirección de un vector
La dirección de un vector está determinada por el ángulo entre el segmento de recta
que parte del origen (vector) y un eje del espacio en el que éste se encuentra. En
<2 , la dirección es el ángulo entre el segmento de recta y el eje x positivo8 . De esta
manera, para un vector l = [a, b] con a 6= 0, la dirección se calcula de la forma9 :
7
En otras palabras se cumple que: norm(A)=max(svd(A))
8
No obstante, para vectores en <3 y <n con n > 3, surge el problema de especicar con respecto
a qué eje está determinado el ángulo. Por esta razón, generalmente se calcula la dirección sólo para
vectores en <2
9
Si a = 0,la dirección del vector depende del signo de b; cuando b > 0, la dirección es de 90o y
cuando b < 0 es de 270o
MATRICES Y VECTORES 51
b b
tan θ = ⇒ θ = tan−1 (2.6)
a a
Veamos, por ejemplo, la dirección que corresponde al vector u = (7, −5). Así, intro-
ducimos en MATLABr la sintaxis para encontrar la magnitud del ángulo:
c=atan(-5/7)
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 tamaño).
El resultado del comando, si los vectores son vectores la, es equivalente a a’*b, y
es igual a b’*a si ambos son vectores columna.
Producto Cruz
Dados dos vectores ~a = (a1 , a2 , a3 ) y ~b = (b1 , b2 , b3 ) en <3 , el producto cruz o
producto vectorial entre ~a y ~b es el vector a × b perpendicular a ambos vectores que
esta denido por:
a × b = (a2 ∗ b3 − a3 ∗ b2 , a3 ∗ b1 − a1 ∗ b3 , a1 ∗ b2 − a2 ∗ b1 ) (2.8)
Para calcular el producto cruz, MATLABr dispone del comando cross, cuya sinta-
xis es c=cross(a,b) (donde a y b son vectores en tercera dimensión11 ).
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
Sólo es aplicable para dos vectores en la misma dimensión, es decir, con el mismo número de
componentes.
11
MATLABr sólo calcula el producto cruz de vectores en <3 .
MATRICES Y VECTORES 53
El resultado que muestra MATLABr es el producto cruz entre los vectores a y b, que
está contenido en el vector c:
c = 28.3600
8.8000
-24.8000
10
3
b
a
−4
z c
−11
−18
−25
0
20 2
4
10 6
8
0
y
x
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 θ = ⇒ θ = cos−1 (2.9)
k ~l kk ~e k k ~l kk ~e k
acos(dot(l,e)/((norm(l)*norm(e))))
54 GEDEM - Versión Preliminar
Recordemos que podemos clasicar los vectores de acuerdo al ángulo entre ellos: es
así como, dos vectores a y b son paralelos si el ángulo entre ellos es 0 o 180 grados 12 ;
y, segundo, dos vectores a y b son perpendiculares u ortogonales si el ángulo entre
ellos es de 90o , es decir, cuando a ¦ b = 0. Si alguno de los vectores es nulo el ángulo
entre ellos es Π2 radianes.
Proyección
Dados dos vectores a y b, la proyección de a sobre b está determinada por:
a¦b
proyb a = ∗b (2.10)
k b k2
de tal forma que proyb a es un vector paralelo a b y el vector a − proyb a es ortogonal
a b. Veamos en el siguiente ejemplo el cálculo de una proyección.
Ejemplo 2.8. Dados los vectores v = (1, 1) y u = (1, 2), encontrar proyb a
2 Ortogonalidad entre v y
u menos la proyeccion
1.5
Diferencia entre u
Y
y la proyeccion
0.5
Vector v
−0.5 Vector u
Proyección
Matrices Ortogonales
Una matriz A se dice ortogonal si es invertible y AT = A−1 (es decir, AT A = I ,
donde I es la matriz identidad). Las matrices ortogonales tienen una característica
muy particular, sus columnas son vectores que constituyen una base ortonormal.
En otras palabras, dada la matriz Qn×n = [aij ] y la matriz QT = [aji ], el producto
escalar bij = a1i a1j +a2i a2j +...+ani anj cumple con dos condiciones: primero, bij = 0
si y sólo si i 6= j ; y, segundo, bij = 1 únicamente si i = j .
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 características de una base
ortogonal:
y=dot(s,s)
y=
1.0000
u=dot(s,d)
u=
1.3878e-016
i=dot(d,d)
i=
1.0000
p=dot(d,f)
p=
2.4286e-016
MATRICES Y VECTORES 57
[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
Nótese que meshgrid requiere que los vectores x y y tengan el mismo número de
componentes.
El comando meshgrid únicamente sirve para generar matrices a partir de tres vec-
tores (por ejemplo: [X,Y,Z]=meshgrid(x,y,z)). MATLABr permite generar
14
Este comando sirve sólo para vectores en <3 .
58 GEDEM - Versión Preliminar
[V,W,X,Y,Z]=ngrid(v,w,x,y,z)
En esta sección estudiaremos con detalle los métodos computacionales usados para el
análisis de rectas y planos. Aunque no existen comandos especícos para su estudio,
MATLABr facilita el cálculo de algunos pasos intermedios, simplicando su método
MATRICES Y VECTORES 59
sustancialmente.
2.3.1. Rectas
Una recta es una sucesión innita de puntos en un espacio. Para establecer la ecuación
de una recta en dos dimensiones necesitamos de un punto y la pendiente de la línea
o, en ausencia de la pendiente, de dos puntos. En tres dimensiones, no obstante, para
hallar la ecuación de la recta el concepto de pendiente se hace inútil y precisamos de
un vector que describa una dirección denida de la recta.
Consideremos la Figura 2.7. Supongamos una recta r en n dimensiones que pasa por
los puntos P0 = (a, b, c, ..., n) y P = (x, y, z, ..., m). El vector que pasa por estos dos
puntos P~0 P = (x − a, y − b, z − c, ..., m − n) es paralelo al vector diferente de cero
~v = (d, e, f, ..., l), es decir, existe un escalar t (t ∈ <) tal que
P~0 P = tv (2.11)
tv
P
PP
0
P0
P
P0
P~ = P~0 + tv
Estas son las ecuaciones paramétricas de la recta r, donde t (t ∈ <) nos indica qué
tanto se necesita para pasar de P0 a P y el vector ~v , que muestra la dirección de la
línea, es conocido como vector director de una recta. Vale la pena resaltar que existen
tantas ecuaciones de una recta como puntos hay sobre ella, dado que P0 puede tomar
cualquier valor dentro de la misma recta.
Ahora bien, al resolver el sistema matricial de la ecuación 2.13, tenemos tres ecua-
ciones:
a + td = x
b + te = y
c + tf = z
Al despejar t de cada una de las ecuaciones, el resultado es:
x−a y−b z−c
t= t= t=
d e f
Como t es igual en cada uno de los casos, igualamos las tres ecuaciones:
Ejemplo 2.10. Encontrar la ecuación paramétrica de la recta que pasa por los
puntos P0 = (−5, 6, 8, 7) y P1 = (9, −2, 0, −2).
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 denición más detallada: sea
P un punto en el espacio y n un vector diferente de cero. Entonces el conjunto de
todos los puntos Q para los que P~Q · n = 0 constituye un plano en tercera dimensión.
Un rasgo fundamental del plano es que debe estar en tres dimensiones: áreas en más
de tres dimensiones son hiperplanos. La forma más común de hallar la ecuación del
plano es determinar un vector diferente de cero y perpendicular al plano, conocido
como normal y correspondiente a n en la denición de Grossman. En la Figura ??
observamos qué es grácamente el vector normal.
n · P~0 P = 0 (2.15)
~n
P0 y
dx + ey + f z = g (2.17)
Ejemplo 2.11. Determinar la ecuación del plano que pasa por los puntos P0 =
(−4, −1, −1), P1 = (−2, 0, 1) y P2 = (−1, −2, −4)
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)
La ecuación cartesiana de este plano es x−12y +5z = 3. Cabe resaltar que, si existen
dos planos paralelos, entonces sus vectores normales son paralelos. En otras palabras,
el producto cruz entre los dos vectores tiene como resultado cero.
|ad + be + cf + g|
D= p (2.18)
d 2 + e2 + f 2
Veamos en el siguiente ejemplo cómo hallar computacionalmente la distancia entre
un punto y un plano.
64 GEDEM - Versión Preliminar
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 solución de15 A − λI nunca debe ser trivial (es decir,
~ = ~0). Por tanto, la matriz generada al operar (A − λI) debe ser singular o, en
m
otras palabras, su determinante debe ser igual a cero.
MATLABr calcula valores propios y un vector propio asociado a cada valor por
medio del comando eig, cuya sintaxis es [V,L]=eig(A). Este comando recibe la
matriz cuadrada con las transformaciones lineales y calculalas matrices L (una matriz
diagonal con los valores propios) y V (una matriz cuyas columnas son los vectores
propios correspondientes), tal que A*V=V*L. Observemos cómo trabaja la rutina con
el siguiente ejemplo:
Ejemplo 2.13. Calculemos los vectores propios de la matriz
1 −1 4
A = 3 2 −1
2 1 −1
Paso 1. Introducimos el input del comando: la matriz A:
A=[1 -1 4;3 2 -1;2 1 -1];
Paso 2. Teniendo ya el input, invocamos eig para hallar los valores y vectores
propios:
[V,L]=eig(A)
Así, el resultado de MATLABr es claro: L es la matriz de valores propios y
las columnas de V son sus correspondientes vectores propios, tal que V y L
cumplen, en efecto, la propiedad que A*V=V*L.
L = 3 0 0
0 -2 0
0 0 1
Cabe resaltar que si se especica sólo una única salida (B=eig(A)), esta corresponde
a un vector que contiene únicamente los valores propios de la matriz (matriz L).
66 GEDEM - Versión Preliminar
Ejercicios
1. Una empresa se especializa en la producción de cinco artículos. La información
que describe las unidades vendidas en diferentes meses del año, la utilidad por
unidad vendida y el valor del impuesto por cada uno de los productos son los
siguientes:
P roducto 1 P roducto 2 P roducto 3 P roducto 4 P roducto 5
U tilidad 22 28 15 20 12
Impuestos 2 8 1 0.5 2
Enero 4 5 8 3 9
F ebrero 9 8 2 2 6
M arzo 1 2 2 1 9
Abril 8 4 1 8 2
M ayo 8 8 9 5 2
Junio 10 21 9 11 6
2. Analice las propiedades de la matriz B (Ver cuadro 2.5) y con cada par de ma-
trices aplique las operaciones de suma, resta, multiplicación, división izquierda,
derecha y potenciación.
−2 6 −5
4 5 6
9 0 −3
a) A = −1 2 3 B=
8 −4 2
0 1 2
−6 12 7
" # 1 −2 3
10 3 −9 5
b) A = B= 4 5 6
2 −6 4 −3
−2 6 7
16 16 5 15 20 3 −3 −3 −4
c) A = 18 1 27 27 20 11 B= 0 1 1
5 18 20 1 1 27 4 3 4
a) u = (3, 2) v = ( 35 , 25 )
b) u = (3, 5, 6) v = (4, 3, 2)
√ √
c) u = ( 2, 3, 5) v = ( 3 2, 55 , 0)
à !
2 8
5. Con la matriz L = y el vector m = (2, 2)
5 4
a) Halle la inversa de L
b) Multiplique el vector m por la inversa de L
c) Ahora aplique división derecha y división izquierda entre L y m. Traspon-
ga si es necesario.
d) ¾Qué se puede deducir de los puntos anteriores?
6. Sean u = (3, −1, 2) y v = (4, 2, x). ¾Para qué valor de x ∈ Z + se cumple que u
y v sean ortogonales?.
8. Encuentre la ecuación paramétrica de la recta que pasa por los puntos P (−1, −2, 3)
y Q = (0, 2, 8).
10. Genere una matriz aleatoria de distribución uniforme y una matriz cuyas las
y columnas sumen todas lo mismo, y con cada una:
Sistemas de Ecuaciones
Norma Gómez, Eduardo Sánchez
A~x = ~b (3.3)
69
70 GEDEM - Versión Preliminar
Al resolver un sistema de ecuaciones lineales existen dos casos: primero, los sistemas
de ecuaciones denidos, en donde existe sólo un punto de corte, es decir, una úni-
ca solución; y segundo, los sistemas singulares, que pueden tener innitos puntos de
intersección, es decir innitas soluciones, o pueden no tener ningún punto de intersec-
ción, caso en el que no existe solución. Por otra parte, los sistemas normales denidos
cuyo punto de intersección es el origen, se conocen como sistemas homogéneos.
Por otro lado, están los métodos indirectos (también llamados iterativos o numéri-
cos), que generan una secuencia de aproximaciones a la respuesta del sistema 3.1,
después de repetir cierto tipo de operaciones previamente establecidas.
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 solución:
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 = A−1 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
El programa muestra así los valores de cada variable que soluciona el sistema: la
única solución de este sistema de ecuaciones.
76 GEDEM - Versión Preliminar
x=
-1
y=
1.6667
z=
2.6667
LU x = b (3.7)
Ly = b (3.8)
Ux = y (3.9)
cuya solución, por sustitución hacia atrás o mediante el método de la inversa, es:
x = U −1 y (3.10)
matriz de coecientes (A) y los resultados son una matriz triangular inferior y una
matriz triangular superior.
Las matrices L y U serán útiles para hallar los valores de los vectores x e y de las ecua-
ciones 3.7 a 3.10. Veamos en el siguiente ejemplo cómo trabajar con la factorización
LU.
Ejemplo 3.7. Solucionemos el sistema del Ejemplo 3.5 por factorización LU:
L=
U=
y=
2.0000
1.5000
78 GEDEM - Versión 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 simétrica y denida positiva para que el sistema tenga solución. En caso que
la matriz no tenga esta característica recomendamos solucionar el sistema a través de la factorización
LU.
SISTEMAS DE ECUACIONES 79
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
descomposición, 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 método de Gauss-Jacobi5 , muy útil cuando A es dispersa, resuelve el sistema
de ecuaciones de la forma Ax = b, sólo si la matriz de coecientes A es diagonal
dominante6 . Para hacerlo, utiliza una matriz de descomposición Q que debe ser
diagonal7 y cuyos elementos corresponden a los de la diagonal principal de A. La
regla de iteración para este método es:
Qxk ⇐ (Q − A)x(k−1) + b
7
Las matrices diagonales son aquellas que sólo tienen elementos diferentes de cero en su diagonal
principal.
82 GEDEM - Versión Preliminar
El número de repeticiones puede ser establecido por el usuario y existen casos en don-
de el número de iteraciones propuestas no son sucientes. Por ende, recomendamos
utilizar un número de iteraciones alto, se recomiendan más de 1510.
2x + z = 5
x + 2y = 1.345
0.5y + 8z = 8.76
Aquí it=1:n determina el número de veces que se repite esta operación, que va de
1 hasta n. En este ejemplo tomamos n = 1600, para saber cuál es el número de veces
que iteró el programa, digitamos it y luego enter.
8
Que la norma del vector sea cero implica que todos los valores de δx son positivos y se aproximan
a cero, esto sugiere que se ha llegado a una solución en la cual b − Ax = 0.
SISTEMAS DE ECUACIONES 83
tol es un número muy pequeño, cercano a cero, que sirve para establecer el nivel de
tolerancia de la solución o, en otras palabras, el valor máximo que puede tomar la
norma de δx. A tol se le puede asignar el valor que deseemos, no obstante, el más
pequeño que el software reconoce es sqrt(eps), que equivale a la raíz cuadrada del
valor de punto otante del programa (es decir, el número más grande que sumado a
uno da uno).
En esta salida aparecen todas las operaciones que hace el programa antes de llegar a
una solución. Si MATLABr no entrega la respuesta, bien puede necesitar un mayor
número de iteraciones o bien, quizá, menos iteraciones de las ya establecidas. Para
este ejemplo, la solución del sistema es entonces:
1.9432
-0.2991
1.1137
3.2.3. Gauss-Seidel
La iteración de Gauss-Seidel9 establece la matriz de descomposición Q como la parte
triangular inferior de A incluyendo los elementos de la diagonal. La regla de iteración
para este método es:
Qxk ⇐ (Q − A)x(k−1) + b
x+z =7
5x + 2y = 4
8z = 2
9
Para observar la deducción matemática del método y su regla de iteración vea el apéndice
matemático de este capítulo.
84 GEDEM - Versión Preliminar
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) Factorización 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 descomposición LU
b) Gauss-Seidel
c) Gauss-Jacobi
3. La demanda por cierto producto está representada por medio de una función
lineal de la forma:
Qd = 200 − 5p (3.15)
Qo = 100 + 5p (3.16)
4. Considere el caso de una economía cuya oferta esta compuesta por cuatro rmas
que ofrecen cantidades diferentes de cada mercancía y son precio-aceptantes. La
rma 1 ofrece 83 unidades de la mercancía 3 y 19 unidades de la mercancía 4.
La rma 2 ofrece 58 unidades de la mercancía 2, 30 unidades de la mercancía 3
y 42 unidades de la mercancía 4. La rma 3 ofrece 43 unidades de la mercancía
1 y 12 unidades de la mercancía 4. Por último, la rma 4 ofrece 48 unidades
de la mercancía 3 y 67 unidades de la mercancía 4. Cada rma debe alcanzar
una meta de ingresos especíca: 943, 786, 554, y 624 unidades monetarias,
respectivamente. ¾Cuáles son los precios óptimos para que todas las rmas
alcancen su meta de ingresos?
7. Una empresa desea ubicar uno de sus puntos de venta en una manzana ubicada
en una zona exclusiva de la ciudad, sin embargo, para ellos, sería mucho mejor
si escogen el local en la calle con mayor ujo vehicular. El modelo de vías
con sus direcciones está indicado en la siguiente gura, en la cual se señala el
número de vehículos que circulan en una hora y pasan por las intersecciones
A, B, C, y D.
Determine el ujo vehicular por hora sobre cada calle, es decir sobre x1 , x2 , x3
y x4 , expresado como un sistema de ecuaciones lineales.
8. Una empresa de alimentos elabora varios productos, los más importantes son:
Helados, Ponqués, Pasteles de Pollo, Pasteles de Carne, Emparedados de Cor-
dero y Emparedados de Pavo. Cada uno de estos productos debe pasar por
SISTEMAS DE ECUACIONES 87
3.3. Apéndice
El uso de métodos iterativos para la solución de un sistema de ecuaciones lineales
parte de la regla de iteración denida mediante la transformación del sistema Ax = b,
evidente en la ecuación 3.14:
Qx = (Q − A)x + b
3.3.1. Gauss-Jacobi
En el método de iteración de Gauss-Jacobi, la ecuación 3.14 puede escribirse como:
n
X n
X
(k) (k−1)
qij xj = − rij xj + bi (3.19)
j=1 j=1
n
X
(k) (k−1)
aii xi = aij xj + bi (3.20)
j=1
j6=i
n
X (k−1)
xi (k) = (bi − aij xj )/aii (3.21)
j=1
j6=i
que es la expresión que nos proporciona las nuevas componentes del vector xk en
función del vector anterior x(k−1) en la iteración de Jacobi. En resumen, el método
de Gauss-Jacobi se basa en reescribir el sistema de ecuaciones de la forma:
3.3.2. Gauss-Seidel
Tal como en el caso anterior, denimos la matriz R = Q − A, de manera que la
ecuación 3.14 se reescribe de la forma:
Donde un elemento cualquiera, i, del vector Qxk esta determinado por la ecuación:
n
X n
X
(k) (k−1)
aij xj =− aij xj + bi (3.23)
j=1 j=1
i
X n
X
(k) (k−1)
aij xj =− aij xj + bi (3.24)
j=1 j=i+1
i−1
X n
X
(k) (k) (k−1)
aii xi + aij xj =− aij xj + bi (3.25)
j=1 j=i+1
i−1
X n
X
(k) (k) (k−1)
xi = (bi − aij xj − aij xj )/aii (3.26)
j=1 j=i+1
en esta ecuación, un elemento cualquiera del vector r(k−1) vendra dado por la expre-
sión:
n
X
(k−1) (k−1)
ri xi = bi − aij xj (3.29)
i=1
Parte II
CÁLCULO
91
Capítulo 4
Funciones
Norma Gómez, Norman Maldonado
En la primera parte del libro abarcamos los conceptos básicos de álgebra lineal y el
planteamiento computacional de estos en MATLABr , con el objetivo de aplicarlos
a la solución de problemas económicos. El álgebra lineal permite construir espacios
vectoriales que cumplen con ciertas propiedades (cerradura bajo la suma y bajo la
multiplicación por escalar).
Una vez denido el espacio, sobre éste se pueden construir relaciones, que pueden ser
funciones o correspondencias. Este capítulo junto con los dos siguientes tienen como
objetivo utilizar herramientas computacionales para el análisis de funciones denidas
en espacios vectoriales. En particular, en este capítulo se muestra la manera en
que podemos utilizar MATLABr para analizar grácamente las propiedades de una
función, así como los cambios que se generan en ella cuando se modican parámetros.
Sin embargo, no es posible realizar un análisis gráco cuando las funciones tienen
más de tres variables, por lo que es necesario utilizar el cálculo diferencial e integral
para estudiar las propiedades de cualquier función. Este último es el propósito de los
capítulos 5 y 6.
93
94 GEDEM - Versión Preliminar
Además, establecemos las herramientas que ofrece MATLABr para añadir algunas
características adicionales al gráco de la función, tales como títulos, nombres de los
ejes, colores, entre otros.
En la segunda sección, realizamos el mismo análisis para funciones con dos variables,
es decir, presentamos el concepto matemático, visualizamos la función y añadimos
características a los grácos. También, utilizamos el concepto de curva de nivel para
visualizar grácamente los conjuntos contorno de una función de dos variables.
Paso 1. Crear la función. Una función en MATLABr se puede denir de dos maneras
distintas. Por un lado, se puede crear un m-file en donde se dene la
forma de la función. Por otro lado, se puede utilizar el comando inline,
que permite crear cadenas de caracteres con las que se puede representar la
forma funcional.
Paso 2. Crear los datos. Por la naturaleza numérica del método gráco, no podemos
visualizar la función a lo largo de todos los reales, ya que este es un conjunto
no acotado. Por esto, establecemos los valores de la variable de salida en
FUNCIONES 95
Paso 3. Utilizar el comando plot de MATLABr para gracar. Este comando tiene
la sintaxis plot(x,y), donde x es un vector que contiene los valores del
dominio denido en el Paso 2, e y es un vector que contiene las imágenes
de la función para cada valor de x. Así, plot une con una línea los puntos
generados por cada par de elementos (xi , yi ), donde xi es el elemento i del
vector x, y yi es el elemento i del vector y. Esta rutina sólo es útil para
funciones univariadas.
function f=ffej0(x);
f=x.^3-4*x.^2+6;
En la primera línea se dene la función ffej0 que tiene como entrada el vector x
y como salida el vector f. En la segunda línea se especica la forma funcional. Este
m-file debe ser guardado con el nombre que se asignó a la función, que en este
caso es ffej0. Por último, recordemos del capítulo 2 que el operador punto que se
96 GEDEM - Versión Preliminar
utiliza en la segunda línea sirve para realizar operaciones elemento a elemento; por
ejemplo, en x.^3 toma cada elemento del vector x y lo eleva a la potencia 3.
f=inline(’x.^3-4*x.^2+6’);
El siguiente paso, una vez creada la función, es crear los datos. Para ello, en un nuevo
chero que llamaremos pej0, creamos los valores de la variable de salida x, y luego
utilizamos alguna de las funciones creadas en el paso 1 para generar los valores de
las imágenes f(x). Ya que el ejemplo nos indica que la función va de los números
reales en el intervalo [-2,5], a los números reales, debemos denir estos valores para
x y f(x). En MATLABr , abrimos un nuevo m-file, en donde creamos los valores
de x e y utilizando la función ffej0 así:
x=[-2:0.1:5];
y=ffej0(x);
x=[-2:0.1:5];
y=f(x);
El vector x contiene valores entre -2 y 5, separados entre sí en 0.1 unidades (-2, -1.9,
-1.8,..., 4.9, 5), y el vector y contiene las imágenes de la función en este intervalo1 .
Luego de crear los datos, MATLABr nos permite dibujar la función por medio de la
sintaxis plot(x,y).
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 gráca de la función de color rojo (r), con línea
segmentada (-) y con marcadores (+) en cada punto. Añadiendo algunas caracte-
rísticas al gráco, obtenemos la Figura 4.2. Observemos que esta función presenta
una discontinuidad cuando x = 1. En este valor de x, la función f es igual a 04 = ∞.
MATLABr permite trabajar con valores iguales a ∞, y los representa como inf. En
nuestro ejemplo, podemos ver que en la posición 21 del vector y, la función toma el
valor de inf.
4
x 10 f(x) = 4/(x−1)2
4
3.5
2.5
f(x)
1.5
0.5
0
0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25
x
Para que esto se observe en la gráca fue necesario denir los elementos del dominio
separados por 0.01 unidades, de tal forma que 1 ∈ x y ∞ ∈ y.
Cuando las funciones son discontinuas para ciertos valores del dominio, y este es
denido en MATLABr de tal forma que la función nunca toma esos valores, la gu-
ra cambia considerablemente. Veamos qué ocurre con nuestra función cuando 1 no
pertenece al dominio, por lo que ∞ no hace parte del rango o conjunto de llegada.
Paso 2. Crear los datos. Cambiamos el espaciamiento entre los valores del conjunto
de salida:
FUNCIONES 99
4
x 10 f(x) = 4/(x−1)2
16
14
12
10
f(x)
0
0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25
x
El resultado es la Figura 4.3, en donde la función se graca con color azul2 , con
línea continua (-) y con marcadores (o) en cada punto. En esta gura, la función
parece ser continua. Esto se debe a que la variable x no tomó el valor de 1, para el
cual la imagen era ∞, sino que tomó valores muy cercanos a 1 (0.9950 y 1.0080),
cuya imagen es diferente a ∞. El comando plot une con una linea, en la zona de la
discontinuidad, las imágenes de los dos puntos más cercanos a 1 generando la gráca
de una función aparentemente continua. Por eso se recomienda siempre asegurarse
de incluir en el vector x los valores del dominio donde la función es discontinua.
colores de línea, o posiciones de las guras. Todos estos aspectos pueden ser progra-
mados en MATLABr , y a continuación se explicará la manera de modicarlos.
xlabel off, ylabel off, zlabel off: quita la etiqueta de los ejes
x,y,z, respectivamente.
grid: crea una malla o cuadrícula en los grácos. Puede introducirse escri-
biendo grid on, y desaparece con grid off.
axis: controla la escala de los ejes que se introducen en el gráco. Para grácos
de dos dimensiones, recibe como entrada un vector de cuatro componentes: el
valor mínimo del dominio sobre el eje x (xmin), el valor máximo sobre el eje x
(xmax); el valor mínimo de las imágenes de la función en el eje y (ymin), y su
valor máximo (ymax). La sintaxis es axis([xmin xmax ymin ymax]).
Algunos comandos colocan rangos predeterminados para los ejes. Por ejem-
plo, axis auto ja los ejes automáticamente según el dominio de la función;
axis xy, crea un par de ejes cuyo origen está en la esquina inferior izquierda
(sistema cartesiano tradicional); axis ij, coloca el origen en la esquina su-
perior izquierda y crea dos ejes i y j, vertical y horizontal respectivamente.
Los valores de i van de arriba a abajo y los de j de izquierda a derecha.
Cada objeto en una gura tiene características o propiedades que se pueden modicar
sólo si el objeto recibe un nombre. Por ejemplo, el título de un gráco es un objeto
que tiene como características, entre otras, el tamaño, tipo, grosor e inclinación de
la letra. Al colocar la instrucción ts=title(’Titulo’), MATLABr almacena
el objeto Titulo con el nombre ts, y con este nombre se pueden modicar sus
propiedades. A continuación explicaremos algunas propiedades de los objetos.
font: las opciones que comienzan con font, hacen modicaciones sobre el
texto. fontangle cambia el grado de inclinación de las letras del texto, entre
las opciones normal, italic, y oblique, que generan tipos de letra nor-
mal, itálica y oblicua respectivamente. fontname, cambia la fuente del texto.
fontunits especica la unidad en la que se mide el tamaño de la letra (pul-
gadas - inches, centimetros - centimeters, puntos - points o pixeles -
pixels). fontsize cambia el tamaño de la letra. Por último, fontweight
permite cambiar el grosor en el tipo de letra (light, normal, demi, bold).
line: las opciones que comienzan con line, hacen modicaciones sobre las
líneas del objeto. linestyle modica el estilo de la línea de un objeto. Tiene
como opciones línea continua ’-’, línea punteada ’:’, línea segmentada ’-’
y línea con punto ’-.’. linewidth modica la amplitud o grosor de la línea
del objeto (por defecto es 0.5).
marker: las opciones que comienzan con marker, hacen modicaciones sobre
los marcadores del objeto. marker especica algún tipo de marcador (+ o *
. x square diamond v ^ > < pentagram hexagram none). markersize
FUNCIONES 103
Para observar o modicar las características de algún objeto ob, se utilizan los
comandos get y set. El primero muestra las propiedades del objeto, mientras que el
segundo las modica. La instrucción get(ob) el programa muestra la conguración
actual de las propiedades del objeto ob, mientras que con la instrucción set(ob)
muestra las opciones disponibles para cada propiedad del objeto. Con la instrucción
set(ob,’p’,’v’) MATLABr asigna el valor v a la propiedad p del objeto ob.
Para ilustrar estos comandos, en cada uno de los siguientes ejemplos se modicarán
las opciones de algunos objetos.
Paso 2. Crear los datos. En funciones de dos variables se crean tres conjuntos de
datos: las dos variables de salida (x e y ) y la variable de llegada (z ). Estos
tres conjuntos de datos pueden ser vectores o matrices4 de igual dimensión.
(x1 , y1 ) (x2 , y1 ) ... (xn , y1 )
(x1 , y2 ) (x2 , y2 ) ... (xn , y2 )
.. .. ..
..
. . . .
(x1 , yn ) (x2 , yn ) ... (xn , yn )
Grácamente, los puntos generados por esta matriz se pueden ver como
una malla en la parte izquierda de la Figura 4.4. Cada intersección de las
líneas punteadas corresponde a una de las posiciones de la matriz anterior,
generando el producto cartesiano necesario para denir el dominio o con-
junto de salida de la función. En la parte derecha de esta gura, se muestra
el espacio en donde se visualiza la función de dos variables f (x, y). La base
de este espacio es el producto cartesiano x × y , y el eje vertical corresponde
al rango de la función f (x, y).
0.9
0.8
0.7
0.8
0.6 0.6
f(x,y)
0.4
0.5
0.2
0.4
0
1
0.3 0.9
0.8
1
0.7 0.9
0.2 0.6 0.8
0.5 0.7
0.6
0.4
0.1 0.5
0.3 0.4
0.2 0.3
0.2
0.1
0 0.1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 y 0 0
x
[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
función, por medio del comando meshgrid, así:
FUNCIONES 107
[X,Y]=meshgrid(x,y);
Ahora, hallamos los valores de las imágenes de la función sobre este con-
junto, que se guardan en la matriz Z:
Z=ffej3(X,Y);
Paso 3. Gracar. Utilicemos los diferentes comandos que ofrece MATLABr para
visualizar la función f (x, y) = x + y :
subplot(2,2,1)
plot3(X,Y,Z);
grid on;
title(’Plot3’);
subplot(2,2,2);
mesh(X,Y,Z);
title(’Mesh’);
subplot(2,2,3);
surf(X,Y,Z);
title(’Surf’);
n=20;
subplot(2,2,4);
contour3(X,Y,Z,n);
title([’Contour3 (n=’,num2str(n),’)’]);
grid off
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
Además, colorbar introduce una barra de colores que permite ver, según el mapa
de colores que se aplique, el color correspondiente a cada valor de la función, es decir,
a cada valor del eje z o eje vertical. Con los siguientes ejemplos se ilustrarán estas
opciones.
Como resultado, tenemos la Figura 4.6. Para este gráco se utilizaron las
instrucciones xlabel, ylabel y zlabel para colocar nombres en cada
uno de los ejes. Además, en el título se colocaron símbolos LATEX7 utilizando
\: la instrucción \in generó el símbolo ∈ .
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 capítulo 7 se estudiará más a fondo el concepto de conjuntos contorno.
114 GEDEM - Versión Preliminar
El procedimiento para realizar la simulación parte de los mismos pasos para dibujar
una función que hemos trabajado hasta ahora: crear la función, crear los datos y
gracar. Sin embargo hay dos modicaciones. La primera consiste en que al crear la
función, ésta debe recibir como entradas, además de las variables, los parámetros.
La segunda requiere que los pasos de crear los datos (especícamente, el rango o
conjunto de llegada) y gracar se repitan n veces (que pueden separarse por una
pausa), donde n es el número de valores del parámetro que se van a simular. Para
ilustrar este procedimiento veamos el siguiente ejemplo.
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 función es f (x) = xa con a ∈ (0, 1), y se simuló el parámetro a para los valores
de a = 0.3 y a = 0.7. A continuación extendemos el anterior ejemplo, simulando el
parámetro a (el exponente de la variable x) para los valores de 0.1, 0.4, 0.6 y 0.9.
FUNCIONES 115
Ejemplo 4.6. Simular el parámetro a en f (x) = xa , para a = {0.1, 0.4, 0.6, 0.9}.
for i=1:n;
y(i,:)=ffej6(x,a(i)); % Crear n conjuntos de llegada
end
Se crearon n conjuntos de llegada o rangos, donde n es el número de valores
que toma el parámetro (length(a)).
El comando for repite el proceso 4 veces, que es el número de valores que toma el
parámetro a (n=length(a)). La instrucción y(i,:)=ffej6(x,a(i)) crea un
conjunto de imágenes de la función ffej6 para cada valor del parámetro a, y lo
guarda en la la i de la matriz y.
Una vez creados los datos, se utiliza la instrucción subplot(2,2,i), para hacer
un gráco que tenga dos las y dos columnas. En cada posición i del subplot, se
utiliza plot(x,y(i,:)) para gracar la imagen de la función cuando el parámetro
a toma el valor a(i). La salida de MATLABr se muestra en la Figura 4.10.
116 GEDEM - Versión Preliminar
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 instrucción num2str(a(i)) convierte el valor numérico a(i) en una
cadena de caracteres, por lo que el título cambia para cada valor de a. Al crear la
gura se coloca nombre al título (ts) y a los ejes (xs,ys), para poder modicar
sus propiedades. Con el comando set se dene para el título un tamaño de letra 18,
grosor bold y color azul, y para los ejes un tamaño de letra 14 y grosor bold.
En este ejemplo se observa que el bucle for repite el proceso n veces, tanto al crear
las imágenes como al gracar. Aunque este bucle se segmentó para seguir los mismos
pasos, en una sintaxis mas sencilla se pueden unir estos dos bucles en uno solo.
Veamos un ejemplo con la función seno.
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 función de una variable para un gran número
de valores de su parámetro, con grácos de tres dimensiones, en donde los valores
del parámetro se colocan en el eje z o eje vertical. Veamos un ejemplo.
Ejemplo 4.8. Simular el parámetro a en la función f (x) = asen(x) , con a = [0, 0.2]
Paso 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 función tiende a ser lineal, pero a
medida que se aleja de este valor, las oscilaciones característricas de la función seno
se hacen más pronunciadas. Con la instrucción contour(X,Y,A,40) obtenemos
curvas de nivel que muestran el mismo resultado en el plano en donde está denida
la función (Figura 4.13).
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) = e−ax a = [0.1 0.4 0.7 1]
a = 0.1
0.9 a = 0.4
a = 0.7
a=1
0.8
0.7
0.6
f(x)
0.5
0.4
0.3
0.2
0.1
0
0 2 4 6 8 10 12 14 16 18 20
x
parámetro), crear los datos (con n conjuntos de salida) y gracar n veces. En algunos
casos, para hacer la sintaxis mas sencilla, se crearán en un solo bucle los n conjuntos
de datos y los n gracos.
for i = 1:n
Z{i} = ffej10(X,Y,a(i)); % n Conjuntos de Llegada
end
Para guardar las n matrices Z se utilizaron cell-arrays. Debido a que todos
los conjuntos de llegada son del mismo tamaño, también era posible utilizar
hipermatrices (Z(:,:,i)).
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 función oscila en rangos muy pequeños, tendiendo a ser una función constante.
En la medida en que a se aleja de 1, aumenta el rango de las oscilaciones. La Figura
también muestra como MATLABr ajusta la escala del eje z en cada subplot, según
el rango de cada conjunto de llegada.
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 están repre-
sentadas por una función de utilidad. Una de ellas es la función Cobb-Douglas, que
modela el consumo de un agente sobre bienes que son sustitutos imperfectos, de ma-
nera que el consumidor preere gastar su presupuesto comprando combinaciones de
los bienes que tiene a su alcance, que gastarlo consumiendo sólo uno de ellos. Cuando
el agente consume dos bienes x e y , la función es de la forma U (x, y) = xa y 1−a ; donde
a ∈ (0, 1) representa la ponderación que da el agente a cada bien.
Para hacer la simulación del parámetro a, seguimos el mismo procedimiento que para
cualquier otra función: creamos la función, y en otro m-file creamos los datos,
programamos la simulación para diferentes valores de a y gracamos.
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 - Versión Preliminar
xs=xlabel(’k’);ys=ylabel(’t’);zs=zlabel(’f(k,t)’);
ts=title([’Funcion CES \rho = ’,num2str(p(i))]);
set(ts,’Fontsize’,10,’Fontname’,times);
set([xs ys zs],’FontSize’,8,’Fontweight’,’bold’);
pause(0.1)
end
Ejercicios
En los grácos que debe realizar a continuación recuerde crear para todas las guras
un título, nombre para los ejes, líneas segemtadas en las asíntotas y características
especiales para cada objeto, diferentes en cada ejercicio.
10
Ver Nicholson (1997, pág. 214).
FUNCIONES 129
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 versión lineal del modelo de hiperinación propuesto por ?).
Al resolver para los precios pt utilizando expectativas adaptativas, se halla una
ecuación en diferencias que para ser estable (no hiperinación) requiere que:
¯ ¯
¯ αλ + 1 − λ ¯
¯ ¯ (4.1)
¯ 1 + αλ ¯ < 1
6. Imagine el mercado de arroz en alguna ciudad del Tolima. Suponga que este
mercado es perfectamente competitivo. La cantidad demandada puede repre-
sentarse por la siguiente función lineal: QD = a−P c, donde a, c son parámetros
y P es el precio del arroz. La cantidad ofrecida se representa por la función
lineal QO = b + P d
1−γ
ct
γ > 0, γ 6= 1
1 − γ
CRRA : U (ct ) =
Ln(c ) γ=1
t
µ ¶
1
CARA : U (ct ) = − e−αc α>0
α
a) Calcule matemáticamente U 0 y U 00 .
b) Graque en una sola gura U , U 0 y U 00
c) Simule el comportamiento de U , U 0 y U 00 para diferentes valores de γ y α.
10. La función de producción de una empresa que tiene como insumos capital (K) y
trabajo (L). Si se ha estimado que la empresa tiene una función de producción
√
de la forma F (K, L) = K + L.
Derivación
f (x + h) − f (x)
f 0 (x) = lı́m (5.1)
h→0 h
135
136 GEDEM - Versión Preliminar
guiente estructura determina cómo se han creado cada uno de los ejemplos contenidos
en este capítulo, buscando hacer un uso apropiado de cada una de las herramientas
disponibles:
Paso 2: Crear los datos pertinentes y unirlos con las funciones y otros pará-
metros previamente jados en MATLABr para plantear la situación.
Ejemplo 5.1. Encontremos la derivada del polinomio g(x) = 5x4 − 9x3 − 41x + 32
Nombre del Capítulo 137
f (x + h) − f (x)
f 0 (x) = + O(h) (5.3)
h
Donde O(·) es una función que prescribe el error entre la derivada y la aproximación
numérica, conocido como Error de Truncamiento. Esta función depende, en este
caso, de h1 (h → 0) y, por esto se considera de orden 1. Mediante la construcción
de un polinomio de Taylor de orden 2 y exigiendo que f sea tres veces diferenciable,
obtenemos un resultado con una aproximación más exacta a la derivada:
1
Nótese que el coeciente que acompaña a x2 es cero.
2
Por sus características, polyder sólo permite derivar en una sola dimensión, es decir, con
respecto a una sola variable.
138 GEDEM - Versión Preliminar
f (x + h) − f (x − h)
f 0 (x) = + O(h2 ) (5.4)
2h
En este caso, el error de truncamiento es de segundo orden - h2 . Muchas de las
rutinas utilizadas por MATLABr para encontrar derivadas se basan en el método
de diferencia nita por su facilidad de cálculo, veamos entonces los comandos más
comunes para la aproximación de derivadas numéricas (Mantilla 2004).
5.1.2. gradient
El Gradiente de una función es un vector que contiene sus primeras derivadas y, de
este modo, al evaluar la norma del gradiente, la dirección del vector nos señala si la
función crece o decrece. Así, para cualquier vector de variables ~x = x1 , x2 , . . . , xn , el
gradiente de la función f = f (~x) que depende de n variables corresponde a:
à !
∂f (~x) ∂f (~x) ∂f (~x)
∇f = , ,..., (5.5)
∂x1 ∂x2 ∂xn
function f=ej2(x)
f=x.^4;
A partir de los cálculos numéricos que hemos realizado y los métodos para gracar
del capítulo 4, la función f (x) = x4 y su derivada están en la Figura 5.1, donde
observamos que la derivada numérica de f (x) sí tiene una forma cúbica.
800
600
400
200
Y
−200
4
−400 f(x)=x
f´(x)=4x3
−600
−5 −4 −3 −2 −1 0 1 2 3 4 5
X
5.1.3. diff
A través del método de diferencia nita, el código diff hace también la derivación
numérica de una función. Sin embargo, en contraste con gradient, para establecer
correctamente la derivada con diff y visualizar el comportamiento de la derivada,
al resultado del comando debemos dividirlo por la distancia. De esta manera, para
utilizar diff se introduce la función a derivar y la distancia entre las coordenadas
de la función, y el resultado que entrega MATLABr es la aproximación numérica a
la derivada de la función. Veamos en el Ejemplo 5.4 cómo se utiliza diff:
5
Ejemplo 5.4. Calculemos la derivada de la función f (x) = x 2
50
40
f(x)30
20
10
f(x)=x5/2
f´(x)=(5/2)x3/2
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x
5
Figura 5.3: Derivada de f (x) = x 2 mediante diff
142 GEDEM - Versión Preliminar
Al igual que gradient, la rutina diff es extendible a casos de derivación con más
variables. En el siguiente ejemplo observamos cómo realizar la derivación numérica
de una función compuesta por dos variables.
Una matriz jacobiana hace una generalización del gradiente al calcular, simultánea-
mente, las derivadas parciales de varias funciones respecto a diferentes variables,
organizándolas en una matriz. Supongamos un conjunto de m ecuaciones con n va-
riables:
Nombre del Capítulo 143
y 1 = f1 (x1 , x2 , · · · , xn )
y 2 = f2 (x1 , x2 , · · · , xn )
.. ..
. .
y m = fm (x1 , x2 , · · · , xn )
La matriz jacobiana J asociada al sistema anterior contiene, en cada una de sus las,
el gradiente de las funciones fi para todo i = 1, 2, . . . , m. Es decir,
∇f1
∇f2
J =
..
(5.6)
.
∇fm
MATLABr calcula, por diferencia nita, los elementos de una matriz jacobiana
mediante los comandos fjac y fdjac4 . La sintaxis de la rutina fjac es:
J=fjac(’f’,[i,j],a,P1,P2,...)
Donde f es el nombre del M-le que contiene el sistema a derivar, [i,j] signica
que se derivará la función j respecto a la variable i5 , el vector a dene el punto
donde se va a calcular la derivada y P1,P2,..., etc son parámetros adicionales a
la función.
Aunque el método utilizado por fdjac es análogo al aplicado por fjac, su sintaxis
es distinta: J=fdjac(’f’,a,P1,P2,...). Al igual que antes, f es el nombre
del M-le donde denimos el sistema de funciones, pero a indica el punto donde se
evalúa la derivada del sistema y P1,P2,... son parámetros adicionales aplicables
la función. Veamos un ejemplo de cómo se usan los comandos fjac y fdjac:
Ejemplo 5.6. Hallemos la matriz jacobiana en el punto (1,1) del siguiente sistema
de ecuaciones:
z1 = x2 + y 2
z2 = x3 + y 3
4
Estas rutinas pertenecen al toolbox COMPECON
5
Si por ejemplo se deseara calcular la derivada de la segunda ecuación con respecto a la primer
variable el vector debería ser [1,2].
144 GEDEM - Versión Preliminar
No obstante, las empresas no pueden producir innitamente debido a que existe una
restricción de recursos y capacidad que se lo impide. Intuitivamente, un aumento en
la cantidad de un factor (por ejemplo, capital), manteniendo constantes los demás
factores, debe producir más producto, sin embargo, esos incrementos disminuyen cada
vez la productividad de ese factor. Por ejemplo, si tenemos un restaurante y queremos
atender a todos los clientes, podemos contratar un mesero que lo haga. Si contratamos
otro mesero sería de gran ayuda para el mesero ya contratado, siempre y cuando las
mesas les sean asignadas claramente, de forma que no atiendan dos veces la misma
mesa. Pero si se contratan más meseros que mesas, el último mesero contratado
no tendrá a quien atender y, por tanto, su aporte a la producción es prácticamente
nulo. Supongamos entonces que una empresa tiene la siguiente función de producción:
1 1
f (K, L) = K 3 L 3 . Veamos grácamente su comportamiento y su forma en la Figura
5.4. Allí observamos que la función tiene rendimientos decrecientes en cada factor,
ya sea K o L.
f(K,L)
2
0
10
8 10
6 8
4 6
4
2
2
0 0
L
K
1 1
Figura 5.4: La función de producción f (K, L) = K 3 L 3
∂q ∂q
P M gK = P M gL = (5.8)
∂K ∂L
1 1
De esta manera, retomando nuestra función de producción f (K, L) = K 3 L 3 , el
análisis de la contribución de un factor lo hacemos mediante sus derivadas parcia-
les respecto a capital o a trabajo. Así, para hallar la derivada parcial invocamos
gradient cuando ya hemos creado la función:
[K,L]=meshgrid(k,l);
Q=cobb(K,L,a,b);
Los resultados de esta operación son PK y PL, las derivadas parciales de la función
respecto a K y L respectivamente. Observamos estos resultados en la Figura 5.5,
donde tenemos que ambas derivadas son positivas (al incrementar los factores crece
el producto), sin embargo, son decrecientes (cada unidad más de cada factor aumenta
el producto en menos que esa proporción). Por ejemplo, la productividad marginal
del capital (la gura de la izquierda) muestra cómo, ante un aumento del capital en
algo más que cero (la parte más izquierda de la gráca), resulta en una gran cantidad
de producto (el eje vertical); de otro lado, un incremento muy grande (la parte de
más a la derecha) implica un crecimiento casi nulo del producto (la gráca de la
función se hace cada vez más cercana a cero).
5.2.1. polyder
Al igual que la derivación de primer orden de un polinomio, polyder permite conti-
nuar derivando varias veces en una sola dimensión. A partir de la sintaxis ya denida
del comando, ahora es necesario que el input sea la derivada anterior o, en su defec-
to, para llegar a la derivada superior hay que invocar el código tantas veces como
sea requerido. Veamos el siguiente ejemplo para considerar polyder en el caso de
derivadas cuyo orden sea mayor a uno.
Ejemplo 5.7. Hallemos la segunda derivada del polinomio f (x) = 5x4 + 9x3 + 8x2 +
3x + 1. Analíticamente, la primera derivada de f (x) es f 0 (x) = 20x3 + 27x2 + 16x + 3
y la segunda es f 00 (x) = 60x2 + 54x + 16. Observemos el resultado mediante el uso
de polyder:
6
En particular, en este capítulo se aborda la aproximación de funciones por medio de la Expansión
de Taylor.
Nombre del Capítulo 149
5.2.2. gradient
Las derivadas de orden superior, en el caso de una sola variable, son fáciles de cal-
cular mediante el comando gradient. Así, para hallar la segunda derivada con
gradient, el nuevo input es el gradiente anteriormente encontrado.
2
Ejemplo 5.8. Hallemos la segunda derivada de la función f (x) = x 3 . Tras hacer
4
las dos derivaciones correspondientes, la última analíticamente es: f 00 (x) = − 29 x− 3 .
∂2f ∂f
···
∂x1 ∂x1 ∂xn
.. .. ..
Hf (x̂) = . . . (5.9)
∂f ∂2f
···
∂xn ∂x1 ∂xn
La forma más fácil de hallar la hessiana con gradient para, supongamos, una
función de dos variables es, tras haber invocado la rutina y haber obtenido los vectores
FX y FY que corresponden a las derivadas respecto a x e y respectivamente, se llama
al comando dos veces más, pero esta vez introduciendo cada vez la matriz de imágenes
150 GEDEM - Versión Preliminar
2/3 2/3
Primera Derivada de f(x)=x Segunda Derivada de f(x)=x
1.8 6
1.6 5
4
1.4
3
1.2
2
1
PX2
PX
1
0.8
0
0.6
−1
0.4
−2
0.2 −3
0 −4
−10 −8 −6 −4 −2 0 2 4 6 8 10 −10 −8 −6 −4 −2 0 2 4 6 8 10
x x
2
Figura 5.6: Las dos primeras derivadas de f (x) = x 3
donde observamos que las derivadas cruzadas son iguales, algo característico de la
hessiana.
[PX,PY]=gradient(Z,1,1);
Nombre del Capítulo 151
El resultado descrito por la matriz PX3, cuya norma es positiva e igual a 129.4025 (o
sea, la tercera derivada de la función es creciente), es la respuesta numérica a invocar
tres veces gradient sobre la función f (x). El resultado de gracar PX3 lo obser-
vamos en la Figura 5.7, donde el resultado analítico y el numérico son ligeramente
distintos a causa del error de truncamiento inherente a la aproximación numérica
(O(h2 )).
9 9
8 8
7 7
6 6
PX3
5 5
y
4 4
3 3
2 2
1 1
0 0
−10 −8 −6 −4 −2 0 2 4 6 8 10 −10 −8 −6 −4 −2 0 2 4 6 8 10
x x
2
Figura 5.7: La tercera derivada de f (x) = x 3 mediante gradient y directamente
5.2.3. diff
La rutina diff también es útil para hallar derivadas de orden superior, no obstan-
te, para determinar la derivada de orden superior para, por ejemplo, una función
univariada, hay que introducir al comando la derivada inmediatamente anterior (si
queremos hallar la cuarta derivada, el input es la tercera derivada y así sucesivamen-
te). El siguiente ejemplo muestra claramente cómo se trabaja con diff en funciones
univariadas.
Nombre del Capítulo 153
5
Ejemplo 5.11. Calculemos la segunda derivada del Ejemplo 5.4: f (x) = x 2 .
que los del Ejemplo 5.8: ZXY y ZYX son cero, sin embargo, las otras derivadas son
más elocuentes que con gradient: todos los elementos de las matrices ZXX y ZYY
son 2. Esto se percibe en la ecuación (5.11).
ZXX = 2 2 2 2 2 PYY = 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 (5.11)
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
5.2.4. fdhess
Hallar hessianas con gradient o diff puede ser tedioso y, como ya vimos, impreci-
so cuando se asignan pocos datos al proceso. Existe otro algoritmo que encuentra de
manera más exacta la hessiana: fdhess7 permite hallar en MATLABr la segunda
derivada de una función calculada en uno o varios puntos. La sintaxis de este coman-
do es H=fdhess(f,x,varargin), donde f corresponde al nombre de la función
del modo fval = f(x); x es el punto de evaluación y varargin son argumentos
adicionales para f (opcional). El resultado del comando es H, es decir, la segunda
derivada en el punto de evaluación.
Tras aplicar fdhess en este ejemplo, vemos que el resultado del cálculo es cero.
MATLABr conrma lo que grácamente observamos en la Figura 5.9: la función
x3 + y 3 en (0,0) es plana, por lo que se concluye que allí la función no es creciente ni
decreciente y que su tasa de crecimiento es exactamente igual a cero.
156 GEDEM - Versión Preliminar
30
f(x)
Aproximacion
20 Punto x
10
−10
f(x)−20
−30
−40
−50
−60
−70
−2 0 2 4 6 8 10 12 14 16 18
x
2
Figura 5.10: La función f (x) = 5x 3 − 32 y su aproximación de grado tres
Primero debemos establecer cuál es el problema que quiere resolver cada una de las
rmas. La empresa i vende una cantidad qi y, dado que acepta el precio que tiene en
el mercado, recibe un total de pqi . Como también enfrenta costos, el benecio de la
rma i es la diferencia entre sus ingresos y sus costos,
qi2
π = (100 − Q)qi − (5.14)
2
Como el problema es maximizar la ecuación (5.14), establezcamos la primera y la
segunda derivada de la función para la rma 1:
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 simétrico (ambas
rmas maximizan la misma función de benecio), una buena posibilidad de encontrar
el equilibrio computacionalmente es suponer de antemano que la cantidad producida
160 GEDEM - Versión Preliminar
100
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 dónde están los puntos de la
curva de nivel de PXX en (0,0), para después determinar cuáles de los componentes
de los vectores posición en la matriz de datos iniciales son iguales. Esta forma es la
que se desarrolla en el siguiente script para localizar el equilibrio:
[i,j]=find(PX==0);
for n=1:length(i);
if QU(i(n),j(n))==QU(j(n),i(n))
l=i(n);
m=j(n);
else 0;
end
end
Así, el equilibrio qi∗ es l=q1∗ = 26 y m=q2∗ = 26, o sea, cada una de las rmas produce
una cantidad igual a 26 unidades. Este resultado es exactamente el mismo que aquel
que se logra si, en vez de analizar todo el problema a partir de la rma 1, trabajáramos
con la rma 2. La diferencia radica en la variable de control de la rma en cuestión,
que sería entonces q2 y, de esa forma, al tomar el gradiente para la primera derivada,
aquella matriz que habría que examinar sería la segunda.
Nombre del Capítulo 161
5.3. Ejercicios
1. Una empresa tiene unos costos en función de la cantidad de la forma c(q) =
5q + 15. Encuentre numéricamente los costos marginales de la rma. ¾Cuánto
es su costo jo? ¾Son estos costos marginales constantes? Si así lo son, ¾Qué
tipo de rendimientos presenta esta empresa?
6. Es muy común que las personas compren seguros, de forma que transeran
recursos de un estado bueno a un estado malo, cuando realmente los necesiten.
No obstante, para que este principio se cumpla, es necesario que el agente que
compre el seguro sea averso al riesgo y, para determinar esa aversión al riesgo,
se recurre a una medida conocida como Coeciente de Aversión al Riesgo de
Arrow-Pratt, que se dene como:
cu00 (c)
σ=−
u0 (c)
162 GEDEM - Versión Preliminar
7. Haga una programación que realice una aproximación de grado seis para la
1
función f (x) = x2 − 4x 3 en el punto x = −9.
exógena) son dy y dr. Suponiendo que las variables exógenas no cambian (dT =
dM = dW = 0) y que c0 = 0.4, I 0 = −1.2, my = 1.5, F (K, L) = K 0.5 L0.5 ,
M = 0.02, P = 0.09 y mr = −0.9, determine la matriz jacobiana alrededor del
punto dy ∗ = 0.1 y dr∗ = 0.08.
5.4. Apéndice
Otra forma de derivar en MATLABr es con el toolbox Symbolic que crea un
objeto simbólico, es decir, una estructura de datos que almacena una representación
característica del símbolo. El comando syms permite construir variables y expresio-
nes simbólicas, de forma que, analíticamente, se puedan hacer diferentes operaciones
matemáticas con ellas. En el caso de las derivadas, la rutina que permite obtenerlas
es diff. Veamos entonces cómo se puede derivar con objetos simbólicos.
Integración
Lida Quintero, Diego Corredor
Introducción
Z
f 0 (x)dx = f (x)
Y por otro lado, como herramienta para determinar áreas de regiones cuyos límites
no son rectas.
167
168 GEDEM - Versión Preliminar
Directos
Algebraico Sustitución
Computacional1
Syms int
Integración Directos
Algebraicos
(evaluados) Sustitución
Partes
Denida Métodos
(Área bajo la curva) de solución
Regla del Trapecio trapz
quad8
Cuadratura Gaussiana
quadl
Para hallar integrales existen varios métodos: los analíticos o algebráicos como son
los de sustitución y por partes, y los numéricos como regla del Trapecio y regla de
Simpson. Sabemos que los métodos útiles computacionalmente son los numéricos,
por tanto, en este capítulo estudiaremos los principales métodos numéricos de inte-
gración que MATLABr utiliza y que desde luego nos sirven sólo para la integración
denida. En cuanto a la indenida, veremos en la primera sección la integración por
regla del exponente y otro método en el apéndice de este capítulo. En la segunda
sección introducimos ya un método numérico: la Regla de Trapecio; en la tercera
abordaremos la regla de Simpson; y por último, el cálculo de integrales dobles.
Z
xn+1
xn dx = +C
n+1
1
Apéndice de este capítulo
2
Excepto cuando n = −1.
INTEGRACIÓN 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 integración3 . Y como salida obtenemos el vector la L con los
coecientes del polinomio integrado.
Ejemplo 6.1. Vamos a calcular la integral de f (x) = x4 − 8x2 + 3x, es decir, vamos
R
a calcular: (x4 − 8x2 + 3x)dx
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 están dados por la siguiente función:
q3
CM g(q) = + 2q + 5
3
R 3
Para hacerlo debemos hallar ( q3 + 2q + 5)dq asumiendo k = 0 ya que estamos
calculando los costos variables y no los totales.
3
Si se omite, MATLABr asume k=0.
170 GEDEM - Versión Preliminar
Obtenemos:
CV = 0.0833 0 1 5 0
y0=f(x0)
yn
yn−1
−− ∆ x −−
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 " n−1
#
b
1 X
f (x)dx ' ∆x (y0 + yn ) + yi
a 2
i=1
MATLABr aplica este método por medio del comando trapz. Para utilizarlo es
necesario denir un vector x que determina el intervalo de integración [a, b] y la
distancia entre los nodos (∆x) 5 . Además es necesario denir la función a integrar
f (x)6 y las imágenes y de la función. Así, la sintaxis completa sería:
Por otro lado, el comando cumtrapz calcula el área acumulada hasta cada nodo,
utilizando la regla del trapecio, con el mismo input de trapz. Esta función resulta
muy útil para calcular probabilidades en estadística hallando el área bajo la curva
de la función de densidad acumulada.
Paso 2. Denimos el vector imagen que corresponde a la función que vamos a inte-
grar
y=(x.^4).*(49-x.^2).^(1/2);
5
MATLABr tiene predeterminado ∆x = 1 (h=1).
6
con inline o en un M-file
172 GEDEM - Versión Preliminar
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 , . . . , xn−1 , xn )
asociados a los nodos (ver Figura 6.1) y su vector de pesos o ponderaciones7 w.
Para calcular la integral de la función f (x) en [a, b], obtenemos las imágenes de cada
uno de los nodos y las multiplicamos por un vector de ponderaciones.
[x,w]=qnwtrap(n,a,b)
Regla de Simpson
y1
y2
y0
yn
yn−2
yn−1
y
a=x0 x1 x2 . . . xn−2 xn−1 xn=b
∆x
(y0 + 4y1 + y2 )
3
La suma de todas las áreas del intervalo [a, b], constituye la integral denida de la
función es decir:
Z b · ¸
∆x
f (x)dx ' y0 + 4y1 + 2y2 + . . . + 2yn−2 + 4yn−1 + yn
a 3
que es la regla de Simpson para la integración aproximada10 .
8
Sin embargo, la regla del trapecio resulta más precisa en casos en los que el integrando pre-
senta discontinuidad en la primera derivada, lo cual puede ocurrir en aplicaciones económicas con
soluciones de esquina.
9
Ver Monsalve (2005a)
10
Esta notación sigue a Draper (1979). Para una revisión más profunda ver Leithold (1979).
INTEGRACIÓN 175
Este método de integración es calculado por MATLABr a través del comando quad.
Su input son los límites [a, b] y la función a integrar f (x), ya sea como objeto inline,
expresión o chero como lo vimos en el capítulo 4; de aquí en adelante utilizaremos
la primera:
y=inline(’f(x)’)
in=quad(’y’,a,b)
El área bajo la curva formada desde cero hasta uno de la función es: in = 0.8814.
Ejemplo 6.7. Hallar el excedente del productor (Figura 6.4) en un mercado donde
el precio p∗ = 7 y la oferta del producto está dada por:
q2
p=
q+1
Paso 1. Debemos crear la función, en este caso lo haremos como expresión, directa-
mente en la sintaxis de quad:
xpr=quad(’(q.^2)./(q+1)’,0,7.8875)
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 operación, MATLABr utiliza el comando dblquad, el cual requie-
re como inputs f (x, y) y los intervalos de integración para cada variable. De acuerdo
con la fórmula anterior, tenemos que a ≤ x ≤ b y c ≤ y ≤ d. La sintaxis del comando
dblquad es: 12
ind=dblquad(f(x,y),a,b,c,d)
11
Ver (Monsalve 2005b).
12
La función puede ser denida como explicamos para el comando quad, es decir como expresión,
objeto inline o M-file.
178 GEDEM - Versión Preliminar
Y obtenemos:
ind = 12
Ya hemos visto en este capítulo los métodos que tiene MATLABr para integrar, y
con él concluimos la parte correspondiente a Cálculo del libro. Pero las integrales
son mucho más de lo que hasta aquí conocemos, pues ellas también son utilizadas
para evaluar funciones en diferentes contextos como en optimización, también en
los métodos de solución de ecuaciones diferenciales. De estos y otros temas, nos
ocuparemos en la siguiente parte del libro.
Ejercicios
1 Un mercado de competencia perfecta tiene una función inversa de demanda dada
por p = 10 − 2q y oferta p = 32 q + 1
13
Teniendo en cuenta que a,b son los límites del intervalo de x; c,d los de y
INTEGRACIÓN 179
a. Determine los Excedentes del Consumidor y del Productor por los métodos
qnwtrapz y qnwsimp, para hacerlo es necesario determinar el precio y la
cantidad de equilñibrio.
b. Si un impuesto aumenta el precio a 13, calcule la pérdida irrecuperable de
eciencia.
APENDICE
Además de los métodos numéricos para hallar integrales denidas, existen métodos
algebraicos para hallar integrales indenidas como se observa en el diagrama que se
14
Podemos utilizar rref del Capítulo 2, por tratarse de ecuaciones lineales.
180 GEDEM - Versión Preliminar
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 función 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
OPTIMIZACIÓN Y DINÁMICA
181
Capítulo 7
Concavidad y Convexidad
Norma Gómez, Norman Maldonado
Este capítulo tiene como objetivo analizar las propiedades de las funciones utilizadas
en problemas de optimización estática. Especícamente, vamos a abordar el análi-
sis de concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una función a
partir de herramientas computacionales.
1
Existen otros tipos de funciones. Se utiliza esta clasicación por su utilidad para ubicar máximos
y mínimos.
183
184 GEDEM - Versión Preliminar
En cada sección se explicarán las herramientas de las que dispone MATLABr para
analizar una función por diferentes métodos, y se darán algunos ejemplos. Al nal
del capítulo se plantean algunos ejercicios que servirán al estudiante para desarrollar
agilidad en el análisis de funciones a partir de métodos numéricos y en la aplicación
de este análisis para la solución de problemas de optimización estática en economía.
7.1. Conceptos
Las deniciones que se presentan en esta sección son tomadas de Monsalve (2004),
mientras que los criterios de clasicación son tomados de Mora (2001).
7.1.1. Deniciones
Concavidad, convexidad, cuasiconcavidad y cuasiconvexidad de una función.
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
fx2 fx2 x1 fx2 x2 . . . fx2 xn
Ĥf (~x) = (7.3)
.. .. .. .. ..
. . . . .
fxn fxn x1 fxn x2 . . . fxn xn
f (~x) = α (7.4)
7.1.3. Métodos
En funciones continuamente diferenciables, la segunda derivada permite analizar la
concavidad y convexidad de una función, y una combinación de la primera y la
segunda derivada permite determinar la cuasiconcavidad y cuasiconvexidad de una
función. Para analizar la forma de una función en MATLABr vamos a utilizar cuatro
métodos diferentes3 :
3
Todos los métodos llegan a la misma conclusión
CONCAVIDAD Y CONVEXIDAD 187
4
Recuérdese que la convexidad de un conjunto es un concepto diferente al de convexidad de una
función.
5
Por lo que sus limitaciones son las mismas.
188 GEDEM - Versión Preliminar
Paso 1. Crear la función. Esto se puede hacer creando un m-file que con-
tenga la función o utilizando el comando inline.
Paso 2. Crear los datos de la variable x y de la función f (x).
Paso 3. Invocar la rutina plot para gracar.
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 Numérico − f(x) = x − 4x + 8
40
f
fx
30
20
f(x)
10
−10
−20
−2 −1 0 1 2 3 4 5
x
[p,i]=min(fx) % Mínimo de fx
pinf=[x(i) p] % Punto de inflexion
La primera línea encuentra el más pequeño de todos los valores de la primera derivada
de f (fx ), guarda este valor en p y la posición que éste valor ocupa dentro del vector
fx la guarda en i. La segunda línea guarda en pinf el valor mínimo de la primera
derivada (p) y su correspondiente valor en x (x(i)). Este procedimiento arroja como
resultado:
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 línea, el comando find encuentra la posición de los valores del vector
yxx que son mayores que -0.01 (−10 ∗ h), y menores que 0.01(10 ∗ h); este es el
criterio para determinar los valores sucientemente cercanos a cero.8
La segunda línea almacena en el vector pinf los elementos de los vectores x y yxx
correspondientes a las posiciones del vector ind. De esta forma el vector pinf es:
pinf = 2.7780
-0.0032
Una de las ventajas que ofrece este método es que el cálculo de la segunda derivada es
numérico, por lo que no requiere que se introduzca explícitamente la forma funcional
de la segunda derivada.
2
Segunda Derivada Numérica − f(x) = x/(2x +3)
0.4
f
fxx
0.3
0.2
0.1
f(x)
−0.1
−0.2
−0.3
−0.4
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x
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á señalado en la gráca con el
marcador o . El conjunto contorno inferior, donde se ubican las curvas de nivel de
menor valor (f = 4), corresponde al conjunto [−3, 3], y está señalado en la gráca
con el marcador * . De estos dos conjuntos, solo el conjunto contorno inferior es
convexo, por lo cual podemos concluir que la función es cuasiconvexa.
De nuevo, tenemos que jar tres curvas de nivel: una de referencia (f = 1) y dos
que se ubican por encima (f = 4) y por debajo (f = −2) de la curva de nivel de
referencia. Luego de ello, señalamos grácamente los conjuntos contorno superior (o)
e inferior(*) y determinamos cuál de estos dos conjuntos es convexo.
El conjunto contorno inferior, donde se ubican las curvas de nivel de menor valor
(f = −2), está señalado con * y corresponde al conjunto [−1.5, −1]∪[1.38, 3.61]10 .
El conjunto contorno superior, donde se ubican las curvas de nivel de mayor valor
Hemos asumido el conjunto [−5, −3] ∪ [3, 5] para ilustrar el ejemplo de manera precisa en la gráca.
10
Ver nota 7
196 GEDEM - Versión Preliminar
3 2
f(x) = x − 4x + 6
y=4
4
2
f(x)
y=1
y=−2
−2
−4
−6
−1 0 1 2 3 4
x
(f = 4), está señalado con o y corresponde al conjunto [−1, 1.38] ∪ [3.61, 4.2].
Ninguno de estos dos conjuntos es convexo, por lo que la función no es cuasicóncava
y tampoco es cuasiconvexa.
y cóncava 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 añadió una línea continua y una discontinua
que representan las partes A y B de las ecuaciones 7.7 y 7.8, respectivamente.
Observamos que para estos dos puntos la línea continua está por debajo de la línea
discontinua, lo cual implica que A≤B, es decir, que la denición de función convexa
198 GEDEM - Versión Preliminar
f(x,y)=x2+y2+(x+y)2
4
x 10
6
P1 P2
5
f(x,y)
3
0
−100
100
−50
50
0
0
50 −50
100 −100
y
x
se cumple para estos dos puntos. Además se observa que esto ocurre para cualquier
pareja de puntos del dominio de la función. Por esta razón podemos concluir que la
función es convexa estricta.
y cuasicóncava 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 línea continua (parte A de la
denición 7.9) son más pequeños o iguales al punto P2 (parte B de la denición 7.9).
Como esto ocurre para cualquier par de puntos podemos concluir que la función es
cuasiconvexa.
Paso 2. Crear los datos. Se crean los datos para el conjunto de salida en los vec-
tores x e y, y el producto cartesiano entre ellos utilizando la instrucción
meshgrid. Además, es necesario almacenar en un vector p todas las pare-
jas ordenadas de la forma (x, y) en las que se va a calcular numéricamente
la matriz hessiana. Esto se hace con la última instrucción11 .
x=[0.1:10:100.1];
y=x;
11
Para una explicación de la sintaxis X(:) para una matriz X, ver el capítulo 2
200 GEDEM - Versión Preliminar
[X,Y]=meshgrid(x,y);
p=[X(:)’;Y(:)’];
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 numéricos y los resultados son los mismos, para
nuestro propósito es más práctico utilizar la rutina fdhess, por lo cual ésta
es la que utilizaremos de aquí en adelante.
Una vez creada la función y los datos (pasos para grácar) podemos analizar
la cuasiconcavidad y cuasiconvexidad de nuestra función f (x, y) de la siguiente
manera:
subplot(2,2,1)
contour3(X,Y,Z,40) % 40 Curvas de nivel arbitrarias
title(’Contour3’);
subplot(2,2,2)
cn=[2 6 10 14 20 30]; % Curvas de nivel predeterminadas
contour(X,Y,Z,cn)
title(’Contour’);
subplot(2,2,3)
[cs,h]=contour(X,Y,Z,cn);
hs=clabel(cs,h)
title(’Contour - clabel’);
subplot(2,2,4)
contourf(X,Y,Z,cn)
title(’Contourf’);
estas curvas. Por último, en la gura ??d se observan las curvas de nivel con
los contornos relllenos.
Se observa en estas grácas que los conjuntos contorno inferiores de la función
f (x, y) son convexos, por lo cual podemos armar que la función es cuasiconve-
xa. Era de esperarse, puesto que ya habíamos visto que la función es convexa,
y además sabemos por la proposición ?? que toda función convexa es cuasi-
convexa.
0 2x + 2(x + y) 2y + 2(x + y)
Ĥf (x, y) = 2x + 2(x + y) 4 2
2y + 2(x + y) 2 4
0 80 100
Ĥf (3, 4) = 80 4 2
100 2 4
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 línea indica a MATLABr que los cálculos de las siguientes líneas de-
ben repetirse para cada valor de k. En esa misma línea se establece que k toma-
rá los valores de 1 ,2, siendo 2 el resultante de la instrucción length(Ho)-1.
El comando de la segunda línea extrae el Menor principal Dominante de orden
k de la Matriz Hessiana Orlada. Por ejemplo, cuando k = 1, D es el menor
principal de orden 2 y está dado por D=Ho(1:2,1:2). La tercera línea calcu-
la el determinante del menor principal dominante que se calculó en la segunda
línea, y guarda este valor en la posición i del vector dt. La última línea la uti-
lizamos para ver los componentes del vector dt. La salida de MATLABr (con
format bank) es:
dt = -6400.00 -33600.00
dt = -
indicando que tanto el primer componente del vector como el segundo son
negativos. Esto nos permite concluir que la función f (x, y) es cuasiconvexa en
el punto (x, y) = (3, 4)
A diferencia de la matriz hessiana de nuestra función f (x, y), la matriz Hessia-
na Orlada cambia según el punto en donde la calculemos. Necesitamos entonces
generalizar el método anterior para calcular la Matriz hessiana orlada en dife-
rentes puntos a la vez. Para ello, necesitamos repetir el proceso m veces, donde
m son todas los puntos en los que se desea evaluar la matriz Ĥ . Para ilustrar la
forma en que se generaliza, vamos a evaluar la matriz Ĥ en un conjunto nito
de puntos.
Lo primero que debemos hacer es denir dicho conjunto. Supongamos que va-
CONCAVIDAD Y CONVEXIDAD 205
mos a evaluar esta matriz en el conjunto S = {(x, y)\x ∈ [3, 5] ∧ y ∈ [−4, −1]}.
Entonces, denimos este conjunto en MATLABr :
x=[3:1:5]; y=[-4:1:-1];
Luego de esto, debemos crear un vector p que contenga todas las parejas (x, y)
de puntos posibles, así:
[X,Y]=meshgrid(x,y);
p=[X(:)’;Y(:)’];
Se observa que todos los componentes del vector dt son negativos, lo cual
implica que los menores principales dominantes de Ĥ son menores que cero y
por lo tanto la función en el conjunto S es cuasiconvexa12 .
tam=size(vp);
tol=0.000016
for i=1:tam(1)*tam(2); % Valores propios
if abs(vp(i))>tol; % V. propios cercanos a cero
13
Aunque las instrucciones son básicamente las mismas.
CONCAVIDAD Y CONVEXIDAD 207
vp(i)=vp(i);
else
vp(i)=round(vp1(i)); % Redondear
end
end
Se observa que todos los componentes del vector vp son no positivos (me-
nores o iguales que cero), por lo cual podemos concluir que la función es
cóncava, y por lo tanto también es cuasicóncava. Esto último lo podemos
vericar con la matriz Hessiana Orlada.
• Matriz Hessiana Orlada
x=[0.1:10:100.1]; % Valores para x
y=[0.1:10:100.1]; % Valores para x
[X,Y]=meshgrid(x,y); % Valores para f(x,y)
p=[X(:)’;Y(:)’]; % Vector con puntos
format +
dt
se observa que todos los componentes de la primera la de este vector son
negativos, mientras que los componentes de la segunda la son positivos,
indicando que los Menores Principales Dominantes de orden 1 (D1 ) eva-
luados a lo largo del conjunto S son negativos, mientras que los de orden
2 son positivos. A partir de los criterios de evaluación y de la informa-
ción que nos proporciona este vector podemos concluir que la función es
cuasicóncava.
• Conjuntos Contorno
Se observa que el conjunto contorno superior es convexo, por lo cual po-
demos concluir también por este criterio, que la función es cuasicóncava.
Nuestro propósito en esta sección es ilustrar con dos ejemplos la manera en que
se extienden los métodos de análisis de concavidad y convexidad para funciones
de tres o más variables. Cuando tenemos funciones con tres variables, ya no
se puede utilizar el método gráco, puesto que ya no es posible visualizar la
función. Sin embargo, sus curvas de nivel se visualizan en R3 , y por lo tanto es
válido en estas funciones utilizar el método de conjuntos contorno, además de
los métodos de matriz Hessiana y Hessiana Orlada. En funciones de cuatro o
más variables no es posible utilizar el método gráco y el método de Conjuntos
contorno, por lo cual solo disponemos de los métodos de matriz Hessiana y
matriz Hessiana Orlada.
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 información de la matriz
Hessiana Orlada, podemos concluir que la función es cuasiconvexa.
• Conjuntos Contorno. Recordemos que las curvas de nivel para f (x, y, z) =
x4 + 3y 4 + 5z resultan de igualar la función a una constante α. De esta
manera, tenemos que las curvas de nivel están dadas por:
α−x4 −3y 4
α = x4 + 3y 4 + 5z =⇒ z= 5
Así, a pesar de no poder visualizar la función f (x, y, z), sí podemos visua-
lizar sus curvas de nivel en el plano (x, y, z). Para visualizar estas curvas
CONCAVIDAD Y CONVEXIDAD 211
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
Por último, mostraremos un ejemplo de una función con más de tres variables.
En este caso, tampoco podemos utilizar el método de conjuntos contorno, ya
que no se pueden visualizar las curvas de nivel de la función. Por lo tanto, los
únicos métodos computacionales disponibles para este caso son los de matriz
hessiana y matriz hessiana orlada.
Optimización
Lida Quintero, Norman Maldonado
213
214 GEDEM - Versión Preliminar
del problema, es decir, identicar el tipo de función objetivo al que nos enfrentamos,
el tipo de restricciones, y su comportamiento si es posible de manera gráca para
tener idea de la región donde se puede encontrar la solución.
Teniendo claras las condiciones iniciales del problema, podemos crear las funciones
computacionalmente(función objetivo, restricciones, gradientes, etc)1 . Por último,
aplicamos la rutina computacional pertinente según el problema. Adicionalmente,
debemos ser muy cuidados con la interpretación de los resultados.
Al optimizar se pueden presentar varios casos según el tipo de funciones que estemos
trabajando: cuando la función objetivo no es lineal, y no hay restricciones, caso que
veremos en la primera sección; en la segunda presentamos optimización de funcio-
nes del mismo tipo pero con restricciones; y por último tendremos el caso en que
las funciones son lineales. El análisis de concavidad, convexidad, cuasiconcavidad y
cuasiconvexidad de funciones que vimos en el capítulo anterior, nos hará mucho más
fácil la comprensión de estos problemas.
Existen varios métodos numéricos para solucionar este caso particular de optimiza-
ción como tales, tales y tales; que veremos en esta sección junto con las rutinas de
MATLABr que hacen uso de ellos.
8.1.1. Minimizar
Con esta rutina hallamos la imagen más pequeña de nuestra función objetivo, por lo
que la utilizamos para solucionar problemas de minimización.
Ejemplo 8.1.
mı́n f (x) = x3 − 4x2 + 6
1
En general es mejor trabajar con funciones denidas en un m-le, ya que se pueden modicar
r
fácilmente y permiten hacer uso de otras funciones disponibles en MATLAB . En problemas
sencillos es práctico trabajar con funciones inline.
OPTIMIZACIÓN 215
Paso 1. Análisis Cualitativo del problema. Podemos ver en la Figura 8.1 el compor-
tamiento de la función f (x) y de su derivada fx en una parte de su dominio:
S = {x ∈ [−3, 6]}.
Paso 2. Crear funciones. Podemos introducir la función como un m-le o por medio
del comando inline:
f=inline(’x.^3-4*x.^2+6’)
Paso 3. Invocar rutina de solución. Debemos crear las imágenes de f (x) en una
vecindad sucientemente grande alrededor de x = 3, y luego, teniendo estos
valores, escoger el más pequeño de todos ellos3 .
Sistemas Dinámicos
Diego Corredor, Mario González
En los capítulos anteriores nos hemos ocupado de los procedimientos utilizados para
analizar y optimizar diferentes tipos de funciones. Todos estos métodos se enmarcan
dentro de un contexto estático en el que no es posible observar los comportamientos
de las variables a través del tiempo. En este capítulo nos concentramos en los mé-
todos numéricos, y aplicaciones computacionales utilizados en situaciones donde el
tiempo juega un papel importante, ya sea como una variable continua (ecuaciones
diferenciales) o discreta (ecuaciones en diferencias).
217
218 GEDEM - Versión Preliminar
de las funciones. Pero si las condiciones iniciales del problema son determinadas, es
posible obtener las funciones especícas que solucionan el conjunto de ecuaciones.
Por ejemplo, al solucionar algebraicamente la ecuación ẋ = 3x, obtenemos que el
conjunto de funciones que cumplen esta ecuación viene dado por la fórmula general:
x(t) = Ae3t ; donde A puede ser cualquier número real. Pero si agregamos la condición
inicial x(0) = 4, la única función que satisface la ecuación diferencial y la condición
inicial es x(t) = 4e3t . Es necesario anotar que las condiciones no necesariamente
tienen que ser iniciales, también pueden imponerse condiciones en otros momentos del
tiempo, o condiciones de fronteraCondición de Frontera. En el ejemplo, si imponemos
la condición de frontera x(2) = 5, la función particular que satisface la condición y
el sistema de dinámico es: x(t) = 0.0123e3t .
Por otro lado, por la naturaleza de los métodos, la solución numérica de sistemas
dinámicos implica que algún tipo de condición deba ser impuesta. Es decir que,
al contrario del método algebraico, no es posible obtener ningún tipo de ecuación
general de las funciones solución. Aún más, al utilizar métodos numéricos nunca
encontramos tales funciones, sino que realizamos una aproximación numérica a ellas.
¡ ¢
ẋ(t) = f t, x(t)
(9.1)
x(t0 ) = x0
Una generalización de los problemas de valor inicial son los denominados Problemas
de Valores en la FronteraProblemas de Valor! en la Frontera o BVPBVP|seeProblemas
de Valor en la FronteraBounded Value Problems|seeProblemas de Valor en la Fronte-
ra. En este tipo de problemas imponemos, como su nombre lo indica, condiciones de
frontera al sistema dinámico. La solución de estos sistemas resulta más complicada
porque es posible imponer varias condiciones a la vez, y porque la aproximación a
las funciones se realiza antes y después de cada condición. Los métodos numéricos
utilizados para resolver este tipo de problemas son avanzados, por lo que no serán
tratados en este libro.1
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 = xi−1 + hf ti , xi )
¡
xi+1 = xi + hf ti+1 , xi+1 ) (9.5)
¡
x1 − x0 − hf t1 , x1 ) = 0 (9.6)
La idea básica del método consiste en expresar las derivadas de orden superior
del polinomio de Taylor, en términos de la primer derivada. Para hallar la
aproximación de Runge - Kutta de, por ejemplo, segundo orden, partimos de
la aproximación de Taylor de grado dos:
¡ ¢ h2 ¡ ¢
x(t + h) = x(t) + hf t, x(t) + f 0 t, x(t) +O(h3 ) (9.7)
2
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 básica de la Regla del Trapecio, en la solución de IVPs, consiste en
£ ¤
integrar la ecuación diferencial (9.1) en el intervalo t, t+h y luego aproximarla
utilizando la ecuación (9.8).
Al integrar la ecuación diferencial (9.1) en el intervalo especicado obtenemos
la siguiente expresión:
Z t+h Z t+h ¡ ¢
ẋ(t)dt = f t, x(t) dt (9.9)
t t
Z t+h ¡ ¢
x(t + h) − x(t) = f t, x(t) dt
t
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 método del Trapecio, al igual que el método de Euler modicado, es un
proceso implícito de solución que resulta ser estable, aunque de baja velocidad
y alto costo computacional.
La diferencia entre cada uno de los métodos multipaso radica en el numero de valores
utilizados y en la forma como se realiza la aproximación de la integral. Uno de los
métodos multipaso más conocido es el Método de Adams - Bashforth - Moulton, que
presentamos a continuación:
Z ti+1 h i
¡ ¢
f t, x(t) dt = h af (ti , xi ) + bf (ti−1 , xi−1 ) + cf (ti−2 , xi−2 ) + ... (9.11)
ti
Z 0+1 ¡ ¢
f t, x(t) dt ≈ af (0, xi ) + bf (0 − 1, xi−1 ) (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 DINÁMICOS 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 (ti−1 , xi−1 ) + 37f (ti−2 , xi−2 ) − 9f (ti−3 , xi−3 )
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 (ti−1 , xi−1 ) + ...
ti
h h i
xi+1 = xi + 251fi+1 + 646fi − 264fi−1 + 106fi−2 − 19fi−3 (9.14)
720
h h i
xi+1 − xi − 251fi+1 + 646fi − 264fi−1 + 106fi−2 − 19fi−3 = 0 (9.15)
720
donde ti , ..., ti−3 y xi , ..., xi−3 son valores conocidos. Cuando el sistema diná-
mico es de tercer o mayor orden, la ecuación (9.15) resulta ser no lineal, y su
solución, en cada iteración, requiere el uso de algoritmos especiales.9 Como re-
sultado de esto, el algoritmo implícito resulta más estable, pero también, más
lento y más costoso en términos de procesamiento.
9
Para una breve introducción sobre los métodos numéricos utilizados para resolver ecuaciones
no lineales ver Fackler (2003, cap. 3)
230 GEDEM - Versión Preliminar
x(1)=x0;
t(1)=t0;
xp(1)=x(1);
h=(tf-t0)/n;
for i=1:3 % Algoritmo de Inicio - RK4
f1=h*f(t(i),x(i));
f2=h*f(t(i)+h,x(i)+f1);
x(i+1)=x(i)+0.5*(f1+f2);
xp(i+1)=x(i+1);
t(i+1)=t(i)+h;
end
for i=4:n-3
% Calculo del predictor (Adams - Bashforth)
xp(i+1)=xp(i)+(h/24)*(55*f(t(i),xp(i))-59*f(t(i-...
1),xp(i-1))+37*f(t(i-2),xp(i-2))-9*f(t(i-3),xp...
(i-3)));
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 métodos numéricos básicos utilizados para la solución de pro-
blemas de valor inicial. Es importante conocer la técnica aplicada por cada uno de
los algoritmos ya que, dependiendo de las propiedades particulares del sistema diná-
mico, algunas veces resulta mejor utilizar uno u otro método. Un ejemplo claro de
SISTEMAS DINÁMICOS 231
Para nalizar esta primera parte sobre métodos numéricos, a continuación hacemos
mención a los sistemas dinámicos rígidos y la forma como se solucionan compu-
tacionalmente. Aunque en economía los sistemas de ecuaciones diferenciales rara vez
resultan ser de este tipo, es necesario tener en cuenta este criterio a la hora de en-
frentarse a un sistema dinámico, con el n de escoger el algoritmo más eciente en
términos de estabilidad y velocidad de solución.
ẋ = −10x (9.16)
La solución analítica es de la forma x(t) = Ae−10t , indicando que, a medida que pasa
el tiempo, el valor de x(t) → 0. Utilizando la fórmula de Euler (ecuación 9.3), la
regla de iteración que obtenemos, para este caso particular, es:
xi+1 = xi + h(−10xi )
xi+1 = (1 − 10h)xi
30
20
10
x(t) 0
−10
−20
−30
x(t)=10e−10t
xi+1=(1−10h)xi
−40
0 0.5 1 1.5 2 2.5 3 3.5 4
t
11
En ecuaciones diferenciales sencillas es posible determinar un h lo sucientemente pequeño para
obtener una solución estable, pero con ecuaciones diferenciales más complicadas este procedimiento
resulta más complejo y, en algunos casos, casi imposible.
SISTEMAS DINÁMICOS 233
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 método, la integración numérica resulta estable, sin importar el tamaño del
paso utilizado. En general, los métodos más utilizados para la solución de sistemas
dinámicos rígidos son los algoritmos implícitos, por su gran estabilidad con respecto
al tamaño del paso. La desventaja de estos algoritmos es su baja velocidad de so-
lución y su gran costo de procesamiento, lo que puede ser crucial en problemas de
gran magnitud. Otros métodos, como algoritmos predictor - corrector o el método
de Rosenbrock, también son utilizados para la solución de ecuaciones diferenciales
rígidas. Escoger un método de solución depende de las características particulares
del sistema dinámico que estemos trabajando.
todos numéricos que utilizan, y las situaciones en las cuales se recomienda el uso de
uno u otro. A continuación presentamos algunas aplicaciones computacionales.
Todos los solvers de ecuaciones diferenciales que incluye MATLABr utilizan la mis-
ma sintaxis. Por esta razón, proponemos los siguientes pasos generales para solucionar
un problema de valor inicial:
Paso 3: Fijar las opciones del solver para los distintos tipos de ecuaciones
diferenciales. El comando odegetodeget muestra los valores en los que están
conguradas actualmente estas opciones y odesetodeset permite modicar
esta conguración, a partir de la siguiente sintaxis:
options=odeset('Opción1','Valor','Opción2','Valor',...)
Entre otras, las principales opciones que se pueden congurar con odeset son:
[T,X]=odesolver(@odefun,t,x0,options,p1,p2,...)
ẋ = 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 condición inicial, y los círculos a lo largo de
ellas, señalan los momentos en los que se evaluó la solución. Así encontramos que el
equilibrio es x = 3 y es estable, por cuanto a partir de valores superiores e inferiores
se converge asintóticamente.
Si deseamos visualizar el vector T y la matriz X sin generar el diagrama de fase, po-
demos hacer una pequeña variación en el Paso 3, deniendo la opción Outputfcn
como odeprint. Así, MATLABr nos presenta a T y a X en la Ventana de Coman-
dos, sin gracarlos.
dxdt=3−x
5
4.5
3.5
x 3
2.5
1.5
1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
t
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=3−x
5
4.8
4.6
4.4
4.2
x =5 4
0
3.8
3.6
3.4
3.2
3
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
x =1
0
ẋ = 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 función odephas2 la invocamos de una manera diferente a la utilizada en el
Paso 3 del ejemplo 9.1.
SISTEMAS DINÁMICOS 241
y outputsel:
options=odeset('outputfcn','odephas2','outputsel',[1 3]);
Paso 4. Invocar el solver para hallar la solución a la ecuación. El solver que utiliza-
mos es ode45:19
[T,X]=ode45(@ej2,t,x0,options);
Al denir outputsel con el vector [1 3], le indicamos al solver que las condiciones
que queremos contrastar, con odephas2, son la uno y la tres, es decir: x0 = −1.5 y
x0 = 2.5. En la Figura 9.5 es posible observar la convergencia de ambas soluciones
dado que los círculos correspondientes a los últimos momentos se encuentran más
cerca unos a otros que los círculos de los momentos iniciales. Esto signica que el
cambio en cada una de las soluciones, a medida que transcurre el tiempo, es cada vez
más pequeño. Además, es claro que cada solución converge a un equilibrio diferente
porque el punto nal es (-1,3), indicando que la solución de la primer condición
converge al equilibrio x = −1, mientras que la segunda lo hace a x = 3.
A partir de la gráca podemos comparar cuál de las dos soluciones converge más
rápido. La solución de la primer condición inicial converge más rápido que la tercera,
dado que la curva, en los últimos momentos, es casi vertical: el cambio en la solución
de x0 = −1.5 es casi cero, mientras que el de la tercera sigue siendo relativamente
grande, aunque cada vez menor.
19
En realidad, las soluciones de los diferentes solvers son similares, por lo que hemos escogido el
solver más sencillo (ode45).
242 GEDEM - Versión Preliminar
2 3
dxdt=4x −x −x−6
3
2.95
2.9
2.85
2.8
x =2.5
2.75
0
2.7
2.65
2.6
2.55
2.5
−1.5 −1.4 −1.3 −1.2 −1.1 −1 −0.9 −0.8
x =−1.5
0
Cuando ninguna de las soluciones converge, los círculos nunca se acercan unos a
otros y, por el contrario, tienden a separarse (ver Ejercicio 7). Una situación muy
parecida, en la cual los círculos no se acercan unos a otros, sucede cuando una de las
soluciones no converge, mientras que la otra sí. En este caso, la gráca muestra una
curva horizontal, o vertical, dependiendo de cual de las dos soluciones sea convergente
(ver Ejercicio 8).
En resumen tenemos que si los círculos, de la gráca obtenido con la función odephas2,
tienden a acercarse unos a otros, entonces tenemos que ambas soluciones son con-
vergentes; y si además se presentan tendencias extremas como una curva horizontal
o vertical, entonces alguna de las soluciones se encuentra convergiendo más rápi-
damente que la otra. Por otro lado, cuando no observemos un acercamiento de los
círculos, la existencia de una curva horizontal o vertical es indicio de que una de las
soluciones converge, mientras que la otra no20 .
se trata de una gráca 3D. La Figura 9.6 muestra la gráca obtenida con odephas3,
para las condiciones iniciales: x0 = −1.5, x0 = −0.5 y x0 = 2.5.
2 3
dxdt=4x −x −x−6
2.9
2.8
x =2.5
0
2.7
2.6
2.5
−0.4
−0.6 −0.8
−0.9
−0.8 −1
−1.1
−1.2
−1 −1.3
−1.4
−1.2 −1.5
x =−0.5 x0=−1.5
0
b − atx2
ẋ =
x
Con las cuatro condiciones iniciales: x0 = −8, x0 = −2, x0 = 4 y x0 = 10, en
el intervalo [0, 15]. Esta ecuación no es separable, no es homogénea y solucionarla
analíticamente es un proceso complejo. Veamos su solución computacional con a =
0.4 y b = 30:
Paso 2. En otro chero, denir las condiciones iniciales x0, el intervalo de tiempo
t y los valores de los parámetros a y b:
244 GEDEM - Versión Preliminar
t=[0 15];
x0=[-8 -2 4 10];
a=0.4; b=30; % Denicion de los Parametros
Paso 3. Denir las opciones del solver. En este ejemplo no utilizamos opciones.
Paso 4. Invocar el solver para hallar la solución a la ecuación. Las características de
esta ecuación diferencial hacen necesario utilizar una rutina para ecuaciones
rígidas:21
[T,X]=ode23tb(@ej3,t,x0,[],a,b);
Dado que hemos decidido no especicar ninguna opción, debemos utilizar los parén-
tesis cuadrados ([]) al momento de invocar la rutina. De lo contrario, el programa
interpreta el valor del primer parámetro como el valor de las opciones.
2
dxdt=(30−0.4tx )/x
30
20
10
x(t) 0
−10
−20
−30
0 5 10 15
t
b−atx2
Figura 9.7: Diagrama de Fase (t, x) de ẋ = x
r
b
x
e(t) = ±
at
Hasta ahora hemos resuelto una ecuación diferencial a la vez, ahora presentaremos
una generalización para la solución de sistemas de ecuaciones diferenciales. El si-
guiente ejemplo ilustra el procedimiento de solución de un sistema de 2 × 2.
v̇ = 10u + 7v
u̇ = u + 4v
La solución analítica del sistema dinámico, 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
función de salida:
options=odeset('outputfcn','odeplot');
[T,X]=ode45(@ej4,t,x0,options);
En este caso, para solucionar el sistema dinámico, creamos una vector x que contiene
a las variables v y u. De esta forma, el vector de condiciones iniciales x0 tiene los
valores de las condiciones iniciales para cada variable (v0 y u0); y el vector dxdt
22
Dado que el máximo valor propio de la matriz asociada al sistema no es mucho más grande,
en valor absoluto, que el valor propio más pequeño, estamos seguros que el sistema dinámico no es
rígido.
SISTEMAS DINÁMICOS 247
tiene los valores de la derivada de cada variable con respecto al tiempo (dvdt y
dudt). Al plantear de esta forma el sistema dinámico, las rutinas de MATLABr
pueden solucionar simultáneamente ambas ecuaciones. Como salidas, ode45 genera
un vector T, de tamaño m×1, que contiene los momentos de evaluación de la solución;
y una matriz X, de tamaño m × 2, donde las columnas son la solución para cada
variable.23
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 más condiciones iniciales alrededor de este punto. Sin embargo, considerar
más condiciones implica un problema, ya que las rutinas de MATLABr , a pesar de
solucionar sistemas dinámicos de varias variables, no permiten solucionarlos para más
de una condición inicial a la vez. Si, por ejemplo, necesitamos comparar las soluciones
de dos condiciones iniciales, debemos solucionar dos veces el sistema dinámico. El
siguiente ejemplo presenta la solución del sistema para 3 condiciones iniciales, por
medio de la rutina rk4.
23
Cuando trabajamos con una sola ecuación diferencial, si la matriz obtenida X tenía un tamaño
de m×n, esto signicaba que la solución era calculada en m momentos, para n condiciones iniciales.
Ahora, el tamaño m × n de la matriz X indica que se han calculado las soluciones de n variables
para m momentos.
248 GEDEM - Versión Preliminar
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 función. Esto simple-
mente es utilizado para que, al igual que las rutinas de MATLABr , el solver pueda
aceptar como entradas los parámetros adicionales. En este ejemplo no utilizamos
parámetros adicionales, pero en la aplicación económica será de gran importancia la
denición de estos parámetros para poder realizar simulaciones.
Observemos que la denición del vector tiempo también cambia. Mientras que para
las rutinas de MATLABr no importa si el vector tiempo es un vector la o colum-
na,24 el solver rk4 requiere que el vector de tiempo sea columna, y que contenga
todos los momentos de evaluación. En el Paso 2 creamos un vector la, con valores
entre 0 y 0.5, y luego lo trasponemos para obtener el vector t.
Diagramas de Fase (t, v) y (t, u): Para generar los diagramas de fase pa-
ra cada una de las variables, necesitamos utilizar el comando squeeze para
remover una de las dimensiones de la hipermatriz,25 y luego gracar contra
el tiempo. Por ejemplo, para gracar el diagrama de fase (t, v ) tenemos que
remover la dimensión de la variable u:
24
En todos los ejemplos anteriores hemos denido el vector tiempo como un vector la, sin
embargo, los resultados no cambian si el vector tiempo es un vector columna.
25
El comando squeeze remueve la dimensión de una matriz. Véase Cuadro 2.1, pág. 33.
250 GEDEM - Versión Preliminar
plot(t,squeeze(X(:,1,:)))
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, también es ne-
cesario utilizar squeeze. Sin embargo, ahora gracamos una dimensión versus
la otra, así:
plot(squeeze(X(:,1,:)),squeeze(X(:,2,:)))
15
10
u(t) 0
−5
−10
−15
−25 −20 −15 −10 −5 0 5 10 15 20 25
v(t)
gramación.27
Modelo:
Suponemos que existe un sólo bien en la economía; su nivel de producción en el
momento t es Yt . Una parte de esta producción es consumida y la otra es ahorrada.
La fracción del producto que se ahorra es constante y viene determinada por la
propensión marginal a ahorrar s, así que el ahorro total en el momento t es St = sYt .
Yt = F (Kt , Lt ) (9.18)
Lt = L0 ent (9.20)
27
En esta sección nuestro objetivo es presentar la programación computacional del modelo de
Solow. Para una exposición teórica más profunda recomendamos revisar el siguiente libro (?), el
artículo original o cualquier texto guía del primer curso de macroeconomía.
28
Hablamos de inversión neta pues suponemos que no hay depreciación de capital. Cuando existe
depreciación de capital, la inversión neta es igual a la inversión bruta descontando la depreciación.
La programación del modelo con depreciación se deja como ejercicio para el lector (ver ejercicio 11).
29
Además del supuesto de homogeneidad de grado uno, por lo general se supone que la función
de producción cumple las siguientes condiciones: FK > 0, FL > 0, FKK < 0, FLL < 0, FKL > 0 y
las denominadas condiciones de Inada.
SISTEMAS DINÁMICOS 253
La anterior es una ecuación diferencial de una sola variable, K(t), que determina la
senda de acumulación de capital consistente con el pleno empleo de la fuerza laboral
disponible en cada momento del tiempo.
Una vez conocemos las sendas del stock de capital y de la fuerza de trabajo, junto
con la función de producción, podemos calcular la senda temporal del producto real.
Con estas tres podemos calcular la productividad marginal del trabajo y del capital,
y por consiguiente el salario real y la tasa de interés.
Nos interesa reexpresar la ecuación (9.21) en términos per cápita puesto que no es
correcto decir que un país es más rico porque produce más que antes; más bien se
considera que un país es más rico si sus habitantes, en promedio, producen más que
antes.30 Por otro lado, plantear el modelo en variables per cápita resulta conveniente
desde el punto de vista analítico, dado que permite caracterizar grácamente la
ecuación diferencial.
La ecuación (9.22) dene la variable k como la relación capital trabajo. Esta relación
indica el número de máquinas, o cualquier otro bien de capital, que hay por cada
trabajador.
Kt
kt = (9.22)
Lt
k˙t sF (Kt , Lt )
= −n
kt Kt
µ ¶
k˙t 1
= sF 1, −n
kt kt
µ ¶
˙ 1
kt = skF 1, − nkt
kt
k˙t = sF (kt , 1) − nkt (9.24)
También es necesario denir unos valores para las tasas de ahorro y crecimiento de
la población. Suponemos que s = 15.5 % y n = 2.2 %. A continuación presentamos
la respectiva programación del modelo.
Programación:
function dk=fsolow(t,k,alpha,s,n);
dk=s*produccion(k,alpha)-n*k;
function y=produccion(k,alpha);
y=k.^alpha;
Las dos primeras líneas de programación son utilizadas para denir la ecuación di-
ferencial (9.24). Observemos que la función de producción no es denida en estas
líneas, simplemente es referenciada. La función de producción tipo Cobb-Douglas es
especicada en las dos últimas líneas del programa. Esta forma de programación es
muy utilizada por cuanto permite disminuir el número de cheros destinados para el
modelo al tiempo que genera mayor exibilidad en la especicación del mismo.
El siguiente paso consiste en construir un nuevo chero, llamado solowprog.m, en
el cual vamos a denir los parámetros del modelo y a invocar la rutina de solución
ode45.
clear; clc; close all
[T,K]=ode45(@fsolow,t,k0,options,alpha,s,n);
El diagrama de fase (t, k) muestra que el capital per cápita de equilibrio corresponde
a k ∗ = 49, 63
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:
ẋ = 4x
x0 = 2
ẋ =
x0 =
a) Genere una matriz A20×2 donde la primer columna sea la solución obtenida
por el comando ode113 y la segunda la del script del algoritmo Adams -
Bashforth - Moulton de la página 230.
b) Calcule el vector columna d cuyas componentes cumplan la siguiente regla:
dj = aj1 − aj2 .
c) Graque d’ contra el tiempo. ¾Qué nos dice este resultado?
ẋ = −10x
258 GEDEM - Versión Preliminar
ẋ = b − ax
x0 = 1.8
7) Necesito una ecuación diferencial que tenga un equilibrio inestable. Las dos condi-
ciones iniciales no llevan al equilibrio. Ponerlos a gracar con odeplot y odephas2.
8) Necesito un IVP con dos condiciones iniciales, donde una converja y la otra no.
Ponerlos a gracar con odeplot y odephas2.
12) Utilizando el comando gradient determina la senda del salario real y la tasa de
interés del ejemplo planteado en la página 37.
32
Observe que la depreciación total es: D = dK(t).
260 GEDEM - Versión Preliminar
Bibliografía
Fackler, P., y Mario Miranda. 2003. Applied Computational Economics and Finance.
The MIT Press.
García de Jalón, Javier et al. 2001. Aprenda Matlab 6.1 como si estuviera en
primero. Escuela superior de Ingenieros Industriales. Universidad Politécnica de
Madrid.
Kincaid, D., y Cheney W. 1994. Análisis Numérico: Las Matemáticas del Cálculo
Cientíco. Addison-Wesley Iberoamericana, Delaware.
261
262 GEDEM - Versión Preliminar
263
264 GEDEM - Versión Preliminar
Salidas, 10