Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesión 1
Parte I: Ambiente de trabajo y comandos básicos en MATLAB
1. INTRODUCCIÓN:
2. El SISTEMA MATLAB:
Consta de cinco elementos (de los cuales, se emplearán los primeros cuatro):
Una vez invocado el programa, aparece por defecto el escritorio de trabajo, en el cual se
distinguen tres ventanas.
3. MATRICES Y DISPOSICIONES1:
Los valores numéricos son asignados a través de la línea de comandos, a los cuales les
corresponde un nombre, y diferenciando el uso de mayúsculas y minúsculas.
3.1.1. Escalares:
1
Importante: todo en MATLAB es matriz.
2
Cuando MATLAB encuentra el nombre de una nueva variable, crea automáticamente la matriz asociada
y la almacena los valores. Si dicha matriz ya existía, la sobrescribe.
Sintáxis
escalar = número
(Clave: se trata de una matriz 1x1)
Ejemplos:
>> a = 5
a =
5
>> A = 3
A =
3
Además de imprimirse en pantalla, los objetos y sus respectivos valores han sido
almacenados en el Workspace, listos para su posterior uso, de esta manera, los
respectivos objetivos son invocados únicamente al escribirse su valor numérico en la
línea de comandos. A manera de ejemplo, podemos invocar los valores anteriormente
creados.
>> a
a =
5
>> A
A =
3
A este nivel, nuevas variables numéricas pueden crearse a partir de las previamente
definidas, empleando para esto los operadores básicos.
+ : adición
- : sustracción
* : multiplicación
/ : división
^ : potenciación
() : especificar orden de evaluación (estos son los únicos signos de asociación)
Ejemplos:
4
Para calcular 1 2 3 escribimos:
56
>> 1+2-3*4/(5^6)
ans =
2.9992
>> 2+3-4*5/(6^7)
ans =
4.9999
Se puede apreciar que el valor de ans ha cambiado por el hecho de haber realizado un
cómputo adicional.
Sintaxis:
vector inicial:salto:final
(Es decir: vector = [inicial inicial+salto inicial+2*salto ...
final])
Un requisito es hacer que uno de los saltos coincida con el final, en caso contrario
tomará el máximo anterior.
Ejemplo 1
>> del1al9=1:1:9
del1al9 =
1 2 3 4 5 6 7 8 9
Ejemplo 2
>> sinrequisito=0:5:19
sinrequisito =
0 5 10 15
Caso especial:
Sintaxis:
vector numero1:numero2
(Clave: equivale a vector numero1:1:numero2)
Ejemplo:
>> casoespecial=1:5
casoespecial =
1 2 3 4 5
Ejemplos:
>> columna = [3 ; 4 ; 6 ; 7 ; 2 ; 5 ; 3 ; 4 ; 45 ; 40 ; -
28.9]
columna =
3.0000
4.0000
6.0000
7.0000
2.0000
5.0000
3.0000
4.0000
45.0000
40.0000
-28.9000
Otra forma de crear un vector columna es insertando los elementos línea por línea,
bajando con shift+Enter
Ejemplo:
>> columna1 = [3
4
6
7
2
5
3
4
45
40
-28.9]
columna1 =
3.0000
4.0000
6.0000
7.0000
2.0000
5.0000
3.0000
4.0000
45.0000
40.0000
-28.9000
Sintáxis:
vectorcolumna = vectorfila'
': operador transposición
>> cdel1al9=del1al9'
cdel1al9 =
1
2
3
4
5
6
7
8
9
>> colcasoespecial=casoespecial'
colcasoespecial =
1
2
3
4
5
Sintáxis:
matriz = [elem11 ... elem1N ; … ; elemM1 … elemMN]
(Esta inserción de elementos debe respetar las dimensiones de la matriz en
consideración)
Ejemplo:
Sea la matriz:
A11 A1n
A
Am1 Amn mn
3.2.1. Subíndices:
Los siguientes comandos permiten hacer referencia a un conjunto de elementos de A 4,
tomemos para estos ejemplos la matriz A:
Sintáxis:
A(i,j): devuelve el elemento que se encuentra en la i-ésima fila y j-ésima columa
( Aij ).
3
Todo comando que asigne un valor en MATLAB será seguido por la presentación del resultado en la
pantalla. En caso de incluir un “;” al final de la instrucción, éste no será presentado (incrementando la
velocidad en la realización del trabajo).
4
No deben exceder el tamaño de la matriz.
Ejemplos:
>> A(3,4)
ans =
34
>> A(5,2)
ans =
52
Barrido de elementos:
Sintáxis:
A(i1 i2,j1 j2): devuelve los elementos en las filas i1-i2 y columnas j1-j2.
Ejemplo:
>> A(3:5,1:2)
ans =
31 32
41 42
51 52
Ejemplo:
>> A(1:4,3)
ans =
13
23
33
43
Ejemplo:
>> A(2,3:4)
ans =
23 24
Sintáxis
A(:,j): devuelve todos los elementos en fila cualquiera y columna j (columna j).
Ejemplos:
>> A(:,2)
ans =
12
22
32
42
52
>> A(:,4)
ans =
14
24
34
44
54
Sintáxis:
A(i,:): devuelve todos los elementos en fila i y columna cualquiera (fila i).
Ejemplos:
>> A(2,:)
ans =
21 22 23 24 25
>> A(5,:)
ans =
51 52 53 54 55
Sintáxis:
A(k): devuelve el k-ésimo elemento de la matriz, contando a lo largo de columnas y
avanzando en filas.
Ejemplo:
>> A(11)
ans =
13
>> A(20)
ans =
54
>> A(2)
ans =
21
11 12 13 14 15 0
21 22 23 24 25 0
31 32 33 34 35 0
41 42 43 44 45 0
51 52 53 54 55 0
0 0 0 0 0 66
Es decir:
>> A(6,6)=66
A =
11 12 13 14 15 0
21 22 23 24 25 0
31 32 33 34 35 0
41 42 43 44 45 0
51 52 53 54 55 0
0 0 0 0 0 66
Sintáxis
sum(A): computa el vector fila conformado por la suma de elementos a lo largo de una
misma columna5.
Ejemplo:
>> sum(A)
ans =
155 160 165 170 175 66
Sintáxis
diag(A): devuelve un vector columna con los elementos de la diagonal principal de la
máxima matriz cuadrada contenida en A .
Ejemplo:
5
MATLAB tiene preferencia por el trabajo sobre las columnas de una matriz, de manera que las
operaciones sobre las filas debe estar precedido por el uso del operador transposición.
>> diag(A)
ans =
11
22
33
44
55
66
Funciones trigonométricas:
sin : seno
cos: coseno
Funciones exponenciales:
exp : exponencial en base natural
log : logaritmo natural
sqrt : raíz cuadrada
nthroot : raíz n-ésima real de números reales
Funciones con números complejos:
abs : valor absoluto
conj : complejo conjugado
imag : parte imaginaria de un complejo
real : parte real de un complejo
Funciones matemáticas especializadas:
beta : función Beta
gamma : función Gamma
cross : producto vectorial (vector)
dot : producto interno
Teoría de números:
gcd : máximo común divisor
lcm : mínimo común múltiplo
factorial : función factorial
Matrices elementales:
zeros : matriz de ceros
ones : matriz de unos
eye : matriz identidad
rand : matriz de números aleatorios distribuidos uniformemente
randn : matriz de números aleatorios distribuidos normalmente
meshgrid : disposiciones de X e Y para gráficos en 3D
: : vector regularmente espaciado e índice de una matriz
Información básica sobre matrices:
Una vez diseñado el algoritmo, el siguiente paso es elaborar el diagrama de flujo. Para
realizar cualquier programa, indistintamente del lenguaje de programación con el que se
quiera trabajar, es necesario contar con un esquema lógico de procedimientos a seguir,
lo cual precede toda inserción de comandos. Para esto, resulta beneficioso el empleo de
la siguiente notación para los diversos procesos dentro de un mismo programa:
6
También llamado “bucle”.
Sintaxis:
for variable = expresion
enunciado1(variable)
enunciado2(variable)
...
enunciadoN(variable)
end
Las columnas en expresion son almacenadas por sola una vez en variable,
mientras que los siguientes enunciados son ejecutados hasta la instrucción end. En la
práctica, la expresión es casi siempre de forma escalar, en cuyo caso las columnas
son simplemente escalares. El alcance de este comando siempre está determinado.
Sintaxis:
while expresion
enunciado1
enunciado2
...
enunciadoN
end
Los enunciados son ejecutados siempre y cuando expresion sea calificada como
verdadera (una precaución a tener en cuenta es que en caso de colocar una
tautología, el programa se ejecutaría indefinidamente), este objeto toma la forma
operador expresion.
operador:
Es uno de los seis siguientes operadores relacionales, que intervienen en la
elaboración de expresiones lógicas
<: “menor a …”
<=: “menor o igual a …”
>: “mayor a …”
>=: “mayor o igual a …”
==: “igual a …”
~=: “diferente de …”
instruccionesZ
end
En general, el comando if debe seguirse en la misma línea por una expresión que
MATLAB podrá calificar como verdadera o falsa, y al final de los comandos debe haber
(como ocurría con for) una instrucción delimitadora end. En medio, de forma
opcional, puede haber enunciados del tipo elseif y/o else. Si la prueba resulta
verdadera, MATLAB ejecuta los todos los comandos entre el enunciado if y el primer
enunciado elseif, else o end e ignora todos los demás que están después del
enunciado end. Si la prueba resulta falsa, MATLAB ignora todos los primeros
comandos hasta elseif, else o end. El comando else se emplea cuando se
presenta una única alternativa a la condición lógica utilizada por if mientras que, el
comando elseif es útil cuando hay más de dos alternativas y estas pueden ser
distinguidas por una secuencia de pruebas de verdadero/falso. Es en esencia
equivalente a un comando else seguido inmediatamente por un comando if.
Se pide encontrar el valor en el dominio cuya imagen sea igual cero de la siguiente
función: f ( x) 2 x 4 3x 2 2 x 2 5 x 3 , en el intervalo 0,1 , para lo cual se deberá
utilizar el método de la bisección. Para realizar esto se utilizarán 2 programas: el
principal y una función. El programa principal tiene toda el algoritmo necesario para
desarrollar la procedimiento mediante el método propuesto y la función sirve para
simplificar el algoritmo principal, pues cada vez que se requiera obtener los valores de
la función para cierto valor del dominio (o para una grilla de valores) bastará con
utilizarla. Primero mostraremos el programa función:
7
“Si ocurre que…”.
8
“En caso contrario…“.
9
“Si además ocurre que…”.
Programa función
function f=func(x);
f=2*x^4+3*x^3-2*x^2+5*x-3;
Lo que hace este programa es devolver la imagen de cualquier valor del dominio de la
función que, en este caso, está representado por el escalar “x”. Este programa será
utilizado en varios ocasiones en el programa principal que se presenta a continuación.
Programa Principal
clear all
close all
clc
end
'El cero se alcanza en:' % El programa imprimira el ultimo valor de c,
que en
c % este caso es justamente el valor del
dominio en el
% cual la función toma el valor 0
(aproximadamente,
% ya que hemos definido una tolerancia de
0.00001).
La idea del método de la bisección para encontrar el cero de una función es tomar el
punto medio entre dos valores en el dominio que deben cumplir una condición: la
imagen de uno de ellos debe ser positivo y la imagen del otro debe ser negativo (para
ello se utilizó el condicional if). Si se cumple la condición empieza el algoritmo
(básicamente es el loop for del programa): si la función evaluada en este punto medio
está por encima del cero se redefine el valor superior (en el dominio) como el punto
medio de los dos valores, por otro lado, si la función evaluada en el punto medio es
menor a cero, se redefine el valor inferior (en el dominio) como el punto medio de los
dos. De esta forma se va convergiendo hacia el valor (en el dominio) que haga que la
función evaluada en ese punto sea igual a cero. Al ejecutar el programa principal, la
pantalla inicial nos indica que ingresemos los valores de “a” y de “b”:
Ingrese el punto a =
Ingrese el punto b =
Si ingresamos algún valor de “a” que cuando lo evalúe en la función sea mayor a cero,
entonces el programa para (comando break). Asimismo, si ingresamos algún valor de
“b” que cuando lo evalúe en la función sea menor a cero, entonces el programa para.
c =
0.5746
Grafico de la funcion
5
-1
-2
-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
En el gráfico se puede observar que el valor en el cual la función toma el valor cero es
aproximadamente el valor que nos arroja el programa, es cual es igual a 0.5746.
Aplicación 2:
clear all
close all
clc
k=-2;
epsilon=0.001;
eps=0.1;
condition=1;
t=1;
% loop principal
if 2*k==0
kk=k+eps;
if 2*kk>2*k
fprintf('la funcion es convexa con minimo en')
k
else
fprintf('la funcion es concava con maximo en')
k
end
else
while condition==1
k=k+eps; %aca comienza a correr el valor del
dominio
t=t+1;
if abs(2*k)<epsilon
kk=k+eps;
if 2*kk>2*k
fprintf('la funcion es convexa con minimo
en')
k
else
fprintf('la funcion es concava con maximo
en')
k
end
condition=0;
end
end
end
ks=[-5:0.1:5];
fs=ks.^2+ones(1,length(ks))*8;
ders=2*ks;
% graficos
subplot(2,1,1),
plot(fs,'k')
grid on
title('funcion')
subplot(2,1,2),
plot(ders)
grid on
title('derivada')
clear all
close all
clc
while condition == 1;
x = linspace(-1/2,1/2,puntos);
% el comando linspace me genera un vector (ver el help)
fx=x.^2-x; %genero la funcion
absfx=abs(fx); %le tomo valor absoluto
[minimos ubic] = min(absfx); % me guarda en minimos los
minimos y
% en ubic la ubicacion de
los minimos
if min(minimos)<eps
condition=0;
else
puntos=puntos*2;
clear x fx absfx minimos ubic
end
end
'El cero se alcanza en:'
cero=x(ubic(find(min(minimos))))
%grafiquemos esto
subplot(2,1,1),
plot(x,fx)
title('Grafico de la funcion en la zona definida')
hold on
plot(x,0,'k:')
subplot(2,1,2),
plot(linspace(-1,2,5000),(linspace(-1,2,5000)).^2-
(linspace(-1,2,5000)))
hold on
plot(linspace(-1,2,5000),0,'k:')
title('Grafico completo')
Sesión 2
Sintáxis:
cd (current directory)
Nos permite identificar o cambiar la carpeta de trabajo para la sesión actual en
MATLAB.
Por ejemplo:
>> cd
C:\MATLAB\work
Nos está diciendo que dicha carpeta es work, la cual está dentro de las carpetas que
corresponden al programa, por defecto esta va a ser siempre la carpeta de trabajo. Sin
>> cd C:\MATLAB
>> cd
C:\MATLAB
De manera similar, hay una serie de comandos relacionados con DOS que pueden
resultar de utilidad:
Sintáxis:
cd ..
Mueve el directorio actual un nivel por encima
Sintáxis:
dir
Muestra todo el contenido de la carpeta actual de trabajo.
dir *.exe : muestra todos los archivos de extensión exe (dicha extensión puede
cambiarse según requerimiento).
Sintaxis
wd = cd
Almacena la ubicación de la carpeta actual como una cadena de caracteres
alfanuméricos.
(Clave: se está generando una variable, pero conformada por letras)
>> cd
C:\MATLAB\work
>> wd = cd
wd =
C:\MATLAB\work
>> cd .. ; cd ..
>> cd
C:\
>> cd(wd);
>> cd
C:\MATLAB\work
Sintaxis:
delete
Borra un archivo u objeto grafico.
(Clave: borra del disco)
delete nombre
Borra el archivo con llamado nombre del disco. Las abreviaturas pueden ser
empleadas en este comando. Por ejemplo delete *.txt borra todos los archivos de
extensión txt de la carpeta actual. Cuando el nombre del archivo se encuentra
almacenado en una cadena de caracteres, se suele usar la forma funcional de
delete, como delete(‘archivo’). Adicionalmente, delete revisa el status de la
opción recycle para determinar si este archivo debe ser enviado a la papelera de
reciclaje o borrado de forma irreversible.
delete(ruta\figura.fig)
Borra el objeto grafico con nombre figura, ubicado en \ruta\. Si el objeto es una
ventana abierta, esta es cerrada y borrada sin confirmación.
Sintaxis:
clear
"Limpia" variables.
(Clave: borra de la memoria, equivale a clear variables)
clear global
Remueve todas las variables globales.
clear functions
Remueve todos los archivos-M asociados a funciones.
clear all
Remueve todas las variables, locales y globales, además de las funciones.
clear var1 var2 ...
Borra las variables especificadas. La abreviatura caracter'*' puede ser empleada
para borrar variables que coinciden con un patrón. Por ejemplo clear X* borra todas
las variables en la carpeta actual que comienzan con X. Si X es variable global, clear
X remueve X de la carpeta actual, pero la deja accesible para cualquier función que la
declare como global.
clear global X
clear fun
Borra las funciones especificadas.
Archivos *.xls
La primera manera de cargar datos es en un modo interactivo; existen cuatro formas:
a) Seleccionando File\Open en el menú de comandos.
b) Presionando Ctrl+O.
c) Presionando el botón de la barra de herramientas.
d) A través del contenido de la carpeta de trabajo, haciendo doble clic.
10
American Standard Code for Interchange of Information.
Sintáxis
N=xlsread('archivo')
Devuelve los datos numéricos en una matriz N a partir de la primera hoja del archivo
de Excel con nombre archivo, ignorando filas o columnas que contengan texto.
Variantes:
N = xlsread('archivo', -1)
Abre archivo en una ventana de Excel, permitiendo seleccionar interactivamente el
contenido a ser importado. Para importar una hoja completa, primero se selecciona la
hoja en la ventana de Excel y luego se presiona el boton OK en el cuadro de Diálogo
de Selección de Datos. Para seleccionar un rango determinado, se le selecciona en la
ventana de Excel arrastrando el ratón sobre dicho rango y presionando OK.
N = xlsread('archivo', hoja)
Lee la hoja especificada del archivo file, donde hoja es o bien un valor escalar
doble positivo o una cadena de caracteres que contiene el nombre de la hoja.
Sintaxis:
[type, sheets] = xlsfinfo('excel')
Determina los nombres de las hojas en un archivo.
N = xlsread('file', 'rango')
Carga los datos de una región rectangular específica de la hoja por defecto (Hoja1).
Especifique el rango usando la sintaxis 'C1:C2', donde C1 y C2 son dos esquinas
opuestas que definen la región a ser leía.
Sintáxis:
xlswrite('archivo', M)
Escribe la matriz M al archivo Excel nombrado archivo. La matriz insumo M es una
matriz de tamaño m-por-n numérica, de caracteres, o disposición de celdas, donde
m<65536 y n<256. La matriz de datos es escrita en la primera hoja en el archivo,
empezando en A1.
Archivos *.txt
Son abiertos por el editor de archivos-M y pueden ser modificados mas no ejecutados,
aunque contengan instrucciones que corresponden al mismo programa.
Archivos *.ascii
Los archivos ASCII (American Standard Code for Interchange of Information) son
crucialmente importantes debido a que son el formato más primitivo para almacenar la
información (a través del uso de simples cadenas alfanuméricas). En virtud de esto,
prácticamente la mayoría de programas tiene la capacidad de interactuar con este tipo
de archivos, con lo cual este formato se convierte en el “puente” para comunicar la
información entre programas. Existen dos formas de realizar esta operación:
Es la más sencilla de usar11 (por defecto los delimitadores son espacios en blanco).
Sintaxis:
save nombre.ext matriz –ASCII
donde: nombre: nombre del archivo contenedor de datos.
ext : extensión del archivo (para nuestros fines, esta será *.ascii)
matriz: matriz de donde provienen los datos.
Empleando la función dlmwrite:
11
Cuando se usa save para escribir una disposición de caracteres en un archivo ASCII, este
escribe sus caracteres ASCII equivalentes. Por ejemplo si se escribe la cadena “hello”, save
escribe los valores 104 101 108 108 111.
Sintaxis:
dlmwrite('nombre.ext',matriz,'delimitador')
donde: nombre: nombre del archivo
ext: extensión
matriz: matriz cargada en la memoria
delimitador: separador de elementos
AA =
1 2 3 4
5 6 7 8
Como un archivo de datos ASCII que usa puntos y comas como un delimitador,
utilizamos el comando
dlmwrite('data.ascii',A, ';')
1;2;3;4
5;6;7;8
Nótese que dlmwrite no inserta delimitadores al final de las filas. Por defecto, si no
se especifica un delimitador, dlmwrite emplea una coma como un delimitador. Puede
especificarse un espacio (' ') como un delimitador o, si se especifica citas vacías, no
asigna delimitador alguno.
a) Partituras son archivos simples que contienen una secuencia (muchas veces
lineal) de comandos y enunciados en MATLAB.
func.m
function f=func(x);
f=2*x^4+3*x^3-2*x^2+5*x-3;
>> func(9)
ans =
15189
Stat1.m
function [mean,stdev] = stat1(x)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2/n));
define una nueva función llamada stat, que calcula la media y la desviación estándar
de un vector. Las variables en el cuerpo de la función son todas variables locales.
Por otro lado, una subfunción, visible sólo para otras funciones dentro del mismo
archivo, se crea definiendo a su vez una nueva función con la palabra clave de la
función después del cuerpo de la función o subfunción precedente. Por ejemplo:
stat2.m
function [mean,stdev] = stat2(x)
n = length(x);
mean = avg(x,n);
stdev = sqrt(sum((x-avg(x,n)).^2)/n);
Las subfunciones no son visibles fuera del archivo en el cual han sido definidas. Por
otro lado, las funciones normalmente se desactivan cuando el fin de la misma ha sido
alcanzado, pero el programador puede utilizar un enunciado de retorno para forzar un
regreso temprano.
Cuando se llama una función de archivo-M desde la línea de comandos o desde otro
archivo-M, MATLAB analiza la función y la almacena en memoria. La función
2. Comandos relacionados:
Sintáxis:
nargin, nargout (número de argumentos de una función)
n = nargin('funcion')
n = nargout('funcion')
Función:
function [y,dy]=funct(x)
y = 2*x^4+3*x^3-2*x^2+5*x-3; % función evaluada en x
dy = 8*x^3+9*x^2-4*x+5; % derivada de la función en x
[x,it]=newton(‘funct’,1)
function [x1,it]=newton(funct,x0)
% función que resuelve el valor nulo de una función
% usando el método de Newton
%
% Sintaxis [x,it]=newton('func',x0)
% func: nombre de la función
% x0: punto inicial
% x: punto en el cual la función es cero
% it: número de iteraciones
%
% Es necesario crear una función 'funct' cuyas salidas sean la
% función evaluada en x y la derivada. Por ejemplo
% function [y,dy]=funct(x)
% y=2*x^4+3*x^3-2*x^2+5*x-3; función evaluada en x
% dy=8*x^3+9*x^2-4*x+5; derivada de la función en
x
Función:
function x3 = cobbdouglas(x1,x2,A,alpha1,alpha2);
% Función Cobb-Douglas (parámetros: alpha1, alpha2)
x3 = A*(x1^alpha1)*(x2^alpha2);
Script:
% Gráficos: una función Cobb-Douglas
clear all;
% Parámetros de la función
alpha = 1/3;
beta = 2/3;
for i = 1 : 1 : nx;
x(1,i) = p*i;
end
for j = 1 : 1 : ny;
y(1,j) = p*j;
end
z = zeros(nx,ny);
for i = 1 : 1 : nx;
for j = 1 : 1 : ny;
z(i,j) = cobbdouglas(i,j,1,alpha,beta);
end;
end; meshc(x,y,z);
Consideremos una firma que emplea dos factores (capital y trabajo) y cuya tecnología
está representada por una función de producción del tipo Cobb-Douglas bajo
rendimientos decrecientes de escala, es decir: Q f ( K , L) K L con K 0 , L 0
y 0 1 . Esto quiere decir que en el largo plazo, dada una cuota de producción
Q0 , la firma minimizará sus costos, con sus demandas satisfaciendo:
1
Q0 w D
LDLP y K LPD LLP
w / r
r
TOT
Así, en el largo plazo sus costos serán CLP wLDLP rK LP
D
CLP
TOT
Q0 , w, r , , .
Sin embargo, por estar fijo el nivel de capital en el corto plazo en K , para una cuota
de Q0 , su demanda de trabajo vendrá dada por
1
Q
LDCP 0
K
TOT
CCP
wLDCP r K CCP Q0 , w, r , , , K
Script:
% Costos Totales y Medios de Largo Plazo como envolventes
de los Costos de Corto Plazo
clc;
clear all;
w = 1;
r = 1;
alpha = 0.49;
beta = 0.48;
maxQ0 = 10;
maxKcp = 20;
%Tipo de gráfico;
tipo = 1; % 1 para costos totales y 2 para costos medios
% Generación de datos
costos1 = 1:1:maxQ0;
costos1 = costos1';
% Costos toales:
for Q0 = 1:1:maxQ0;
Llp=(Q0/(((alpha*w)/(beta*r))^alpha))^(1/(alpha+beta));
Klp=((alpha*w)/(beta*r))*Llp;
costos1(Q0,2) = w*Llp+r*Klp;
end
for Q0 = 1:1:maxQ0;
for Kcp = 1:1:maxKcp;
Lcp = ((Q0/(Kcp^alpha))^(1/beta));
costos1(Q0,2+Kcp) = w*Lcp+r*Kcp;
end
end
costos1
% Costos medios:
costos2 = costos1;
for i = 1:1:maxQ0;
for j = 2:1:maxKcp+2;
costos2(i,j) = costos1(i,j)/costos1(i,1);
end
end
if tipo == 1;
for i = 2:maxKcp+2;
if i == 2;
plot(costos1(:,1),costos1(:,i),'-r*');
else
plot(costos1(:,1),costos1(:,i),'-b*');
end
pause(0.1);
hold on;
end
title('Costos Totales de Corto y Largo Plazo');
end
if tipo == 2;
for i = 2:maxKcp+2;
if i == 2;
plot(costos2(:,1),costos2(:,i),'-r*');
else
plot(costos2(:,1),costos2(:,i),'-b*');
end
pause(0.2);
hold on;
end
title('Costos Medios de Corto y Largo Plazo');
end
Sesión 3
Elaboración y edición de gráficos
1. Introducción:
Por ejemplo, los ejes usados para definir el sistema de coordenadas del gráfico tienen
propiedades que definen los límites de cada eje, la escala, color, etc. La línea usada
para crear un gráfico de línea posee propiedades tales como color, tipo de marcador
usado en cada punto de dato, estilo de línea, etc. Nótese que los datos empleados
para crear un gráfico de línea son propiedades de la línea. Por tanto, se puede
cambiar algún dato sin necesidad de crear un nuevo gráfico.
3
Ejemplo:
2
T = 120;
1
t = 1:1:T; t=t';
0
x = randn(T,1);
-1
plot(t,x);
-2
-3
0 20 40 60 80 100 120
6
Ejemplo:
5
T = [0 1 2; 20 30 40; 80
100 120]; 4
X = [0 1 2; 2 3 4; 4 5 6];
plot(T,X); 3
0
0 20 40 60 80 100 120
Sintaxis:
plot(X1,Y1,...,Xi,Yi,...,Xn,Yn)
Grafica todas las líneas definidas por los pares (Xn,Yn).
(Clave: esta estructura es útil al definir las opciones que van a acompañar a cada
subgrupo Xi,Yi).
6
Ejemplo:
5
4
>> plot(t,x,T,X)
3
-1
-2
-3
0 20 40 60 80 100 120
Nota: si en las líneas anteriores, cada dupla Xi,Yi es remplazada por la tripleta
Xi,Yi,spec, la instrucción aumentada consiste en determinar para las líneas
comprendidas el tipo, el símbolo marcador y el color de trazo. Desde luego, pueden
mezclarse las tripletas Xi,Yi,spec con los pares Xi,Yi; por ejemplo:
>> plot(X1,Y1,X2,Y2,spec,X3,Y3).
>> plot(x,y,'EstiloColorMarca')
Donde:
4
Ejemplo:
3
>> plot(t,x,'-.r*') 2
-1
-2
-3
0 20 40 60 80 100 120
6
Ejemplo:
5
>> plot(T,X,'-.b*')
4
0
0 20 40 60 80 100 120
Las anotaciones son el texto, flechas, notas y otras etiquetas añadidas a los gráficos
para ayudar a los observadores a captar lo que es importante en la data. Típicamente
se añaden anotaciones a los gráficos cuando se quieren mostrar a otras personas o
cuando se quiere guardarla como referencia posterior.
4. Exportando un gráfico:
Hay dos formas de grabar gráficos que permitan salvar el trabajo invertido en su
preparación:
a. Grabar el gráfico como un archivo archivo-FIG.
b. Generar un código MATLAB que pueda recrear el gráfico (seleccionando la
opción Generate M-file del menú File para figuras).
Sesión 4
clc;
clear all;
% DOS DIMENSIONES:
% Comando plot:
% Graficando una columna versus otra
% Ejemplo 1:
T = 120;
t = 1:1:T; t=t';
x = randn(T,1);
plot(t,x);
% TRES DIMENSIONES:
T = -2:0.01:2;
plot3(cos(2*pi*T), sin(2*pi*T), T);
grid on
% Nota:
% Si se desea graficar una superficie que no puede ser
representada de la
% z = f(x,y), una alternativa es parametrizar la superficien
bajo un
% sistema coordenado distinto (por ejempplo: coordenadas
cilinrdricas y
% espéricas); sin embargo estas prácticas son más empleadas en
ingeniería,
% razón por la cual no entraremos en mayores detalles.
x = 0:0.05:40;
for j = 1:4;
subplot(2,2,j);
plot(x, besselj(j*ones(size(x)),x));
end
% Animaciones básicas:
axis equal;
axis([-1 1 -1 1]);
hold on;
comet(cos(t), sin(t));
t = 0:pi/20:2*pi;
y = exp(sin(t));
plotyy(t,y,t,y,'plot','stem')
xlabel('El eje X')
xlabel('El eje Y')
title('Los dos ejes')
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y);
xlabel('x=0:2\pi');
ylabel('Size of x'):
title('Gráfico de la función seno','FontSize',12);
% En 2D:
% Sintáxis : axis([xin xmax ymin ymax]);
% En 3D:
% Sintáxis : axis([xin xmax ymin ymax zmin zmax];
% Ejemplo:
t= -pi:pi/100:pi;
y=sin(t);
plot(t,y);
axis([-pi pi -1 1]);
xlabel(' -\pi \leq {\itt} \leq \pi ');
ylabel('sen(t)');
title('Gráfico de la función seno');
text(1, -1/3,'{\itNote the simetría impar.}');
grid on
% Ejemplo:
[X,Y] = meshgrid(-8:0.5:8);
R = sqrt(X.^2 + Y.^2);
Z = sin(R)./R;
mesh(X,Y,Z,'EdgeColor','black');
% Opciones adicionales
% Escala de valores
surf(X,Y,Z);
colormap hsv;
colorbar;
% Nivel de transparencia
surf(X,Y,Z);
colormap hsv % colormap por defecto: jet
alpha(1);
Sesión 4
Ecuaciones Diferenciales Ordinarias
Una ecuación diferencial es una ecuación en términos del operador derivada sobre una
función desconocida. Su solución viene dada por una función que satisfaga la igualdad
planteada, definida sobre cierta región. Si esta ecuación contiene sólo derivadas de una
función de una variable, entonces se dice que esta es ordinaria. Para este último caso,
una formulación generalmente empleada es la siguiente:
dy
f (t ) y g (t )
dt
y su solución viene dada por y (t ) e F (t ) (k g (t )e F ( t ) dt ) donde F (t ) f (t )dt .
En economía, muchas veces interesa estudiar no sólo las soluciones analíticas
y sus propiedades teóricas sino también, para casos más específicos, el
comportamiento de las funciones solución a través de los valores numéricos
imputados a los datos de un problema. MATLAB permite llevar a cabo esta
tarea, además de posibilitar la resolución de ecuaciones diferenciales con una
formulación más general que la previamente señalada. Esto se hace con una
serie de comandos ode (Ordinary Differential Equations), los cuales se
especializan en determinados “tipos” de problemas; no obstante lo anterior,
todos ellos comparten una estructura similar.
dy dy
f (t ) y (t 2 t 3) y 3sen(t 0.25) g (t )
dt dt
Solución en MATLAB:
ft = linspace(0,5,25)
% Genera el horizonte en t para f , de 0 a 5 con 25 elementos.
f = ft.^2 - ft – 3
% Genera f (t )
gt = linspace(1,6,25)
g = 3*sin(gt-0.25)
% Genera g (t ) .
f = interp1(ft,f,t)
% Interpola el conjunto de datos (ft,f) en el momento t.
g = interp1(gt,g,t)
% Interpola el conjunto de datos (gt,g) en el momento t.
dydt = -f.*y + g
% Evaluar la EDO en el momento t.
Tspan = [1 5]
% Horizonte de solución de t=1 a t=5.
IC = 1
% Condición inicial y(t=0) = 1
[T Y] = ode45(@(t,y) myode(t,y,ft,f,gt,g),Tspan,IC)
% Solución mediante el comando ODE.
plot(T, Y)
title('Plot of y as a function of time')
xlabel('Time')
ylabel('Y(t)')
% Se grafica la solución y como dependiente del tiempo (es decir, y (t ) ).
Gráfico de y como función del tiempo
25
20
15
Y(t)
10
-5
1 1.5 2 2.5 3 3.5 4 4.5 5
Tiempo
Simulación de Montecarlo
X 1 f ( 1 )
X 2 f ( 2 )
X N f ( N )
yt xt t
N N
( yt y)( xt x) ( x t t y )( xt x)
es ˆMCO t 1
N
t 1
N
( xt x)
t 1
2
( x x)
t 1
t
2
Los resultados del ejercicio de simulación obtenidos confirmar los resultados teóricos
referidos a las insesgadez y eficiencia del estimador.
Sea el modelo
yt . yt 1 t
Sesión 5
Software for RE Analysis
Para verificar si el modelo ha sido resuelto, el usuario puede digitar “m” en la Ventana
de Comandos. Una matriz llamada m por solvek.m, será reportada. Esta es la matriz
denotada por M en la sección introductoria de solvek.m. Así, esto consiste en una
parte crucial de la solución. Las otras partes son las matrices N, P y Q, las cuales
pueden ser obtenidas al digitar “n”, “p” o “q” en la Ventana de Comandos. Si estos
pasos son satisfactorios, el usuario debería modificar modfile1.m mediante el
cambio en el valor de algún parámetro y la solución del modelo modificado. Por
ejemplo, el parámetro mu1 de la regla de política puede ser cambiado. Después de
hacerlo, el archivo modfile1.m debe ser cambiado, quizás bajo un nuevo nombre
con el fin de retener un archivo sin modificación. Entonces se digita el nuevo nombre y
se reporta la matriz m; nótese que sus valores han cambiado. Cambios más
sustanciales serán discutidos en líneas posteriores.
Esta es una forma de ejecutar un archivo .m, digitando simplemente su nombre, sin el
sufijo, en la Ventana de Comandos.
Sin embargo primero se necesitará entender la forma del modelo entendido por
Una complicación es que al incluir una variable predeterminada en las lista de aquellas
cuya respuesta es estudiada se requiere que los valores simulados sean tomados de
la matriz X en lugar de la matriz Y.
Una vez más, aparece una complicación si una variable predeterminada está en la
lista a ser estudiada.
estructurales del modelo que están representadas por modfile1.m. Estas son
con vt , ut , et y t shocks del tipo ruido blanco. Los valores para los parámetros son
b0 0 , b1 0.5 , 0.22 , 0 0 , 1 1.99 , 2 0 , 3 0.8 .
Referencias
Klein, Paul, “Using the generalized Schur form to solve a multivariate linear rational
expectations model,” Journal of Economic Dynamics and Control 24 (September
2000), 1405-1423.
McCallum, Bennett T., “Solutions to linear rational expectations models: a compact
exposition,” Economics Letters 61 (November 1998), 143-147.
_________________, “Role of the minimal state variable criterion in rational
expectations models,” International Tax and Public Finance 6 (November 1999), 621-
639. Also in International Finance and Financial Crises: Essays in Honor of Robert P.
Flood, Jr., edited by Peter Isard, Assaf Razin, and Andrew K. Rose, Kluwer Academic
Publishing, 1999.
________________, “Should monetary policy respond strongly to output gaps?”
American Economic Review Papers and Proceedings 91 (May 2001), 258-262.
Apéndice A
2. Definir Et xt 1 (ex1)
A(r,ix) = 1;
B(r,iex1) = 1;
4. Definir Et xt 2 (ex2)
A(r,iex1) = 1; emplea la definición en 2 y la ley de expectativas iteradas
B(r,iex2) = 1;