Clase 1 del curso de fundamentos de Matlab para el análisis económico. Presenta aspectos fundamentales del ambiente del software, además de introducir a las operaciones con vectores, las funciones, vectores lógicos y principales operadores de Matlab, todo con ejemplos aplicados a la economía.
4. Introducci´on
Es una sofisticada herramienta de computaci´on, cuyo nombre
resulta de la abreviatura Matrix Laboratory y se ha
convertido en un potente instrumento multiplataforma para
los economistas.
Aunque el lenguaje de programaci´on M se cre´o en 1970
proporcionando un acceso sencillo al Software de matrices,
Matlab surge en 1984, creado por Cleve Moler, para facilitar
la resoluci´on de ejercicios evitando programas generales como
C o Fortran.
La introducci´on a Matlab resulta intuitiva, no obstante, su
dominio puede costar. En esta primera secci´on se muestra
como realizar c´alculos matem´aticos b´asicos, asignar valores a
vectores y los operadores b´asicos del programa.
4 / 43
5. Sem´antica y sintaxis
En programaci´on podemos cometer dos tipos de errores: de
sintaxis y de sem´antica.
El tipo de regla que nos impide tropezar se llama Sintaxis,
que es el lenguaje y conjunto de reglas que forman las
sentencias.
Los errores en Matlab se asocian con colores rojo en la pantalla de
comando. El programa es estricto con sus leyes, dado que impide
generar rutinas ambiguas.
5 / 43
8. Aspectos fundamentales
El directorio de trabajo nos permite especificar la carpeta de
trabajo. Es esta se suele tener las bases de datos y funciones
a utilizar. [cd permite modificar el directorio.]
El ´area de trabajo (workspace) brinda informaci´on sobre los
objetos creados.
Ventana de comandos (command window) permite indicar
instrucciones al programa.
(>>) el prompt es el indicador de comando, que es la parte
donde ingresamos las ordenes.
clc borra el historial de comando.
clear borra los objetos guardados en memoria.
Matlab es case sensitive
8 / 43
10. Instrucciones b´asicas
Directas: la ventana de comandos, seguidos de >>, indicamos
nuestras operaciones en Matlab de forma similar a como se
realizan con una calculadora.
>> 2+2
Matlab utiliza los signos algebraicos tradicionales para
realizar operaciones aritm´eticas: suma (+), menos (-),
multiplicaci´on (∗), divisi´on (/), exponenciaci´on (ˆ).
Usando funciones: tambi´en se pueden utilizar funciones para
indicarle ordenes al programa. Estas funciones son
aritm´eticas, matem´aticas, estad´ısticas, financieras, etc.
>> sqrt(2)
10 / 43
11. Ejercicios: operadores aritm´eticos
Ejercicio 1.1. Escriba las siguientes expresiones en el prompt de
comando de MATLAB y observe los resultados:
2 + 2
2 ∗ 5 + 3
3,62
√
2 +
√
9
pi
11 / 43
12. Una distinci´on sobre los logaritmos
Los logaritmos tienen un uso especial en econom´ıa. El log es
el exponente al cual se debe elevar la base para obtener el
n´umero loga(x) = y es equivalente a ay
= x. La funci´on
log10 permite obtener el logaritmo base 10.
>> log10(100)=2 (102
= 100)
En el caso de un logaritmo que tenga como base el e, se
conoce como logaritmo natural (ln(x)), al logaritmo cuya
base es el n´umero e (2.71). Este se obtiene en Matlab usando
la funci´on log [loge(5) = 1.6094 ... e1,6094
= 5].
>> log(5) [exp(1.6094)]
La funci´on log, tambi´en podemos utilizar logaritmos de base
distinta a 10, agregando un segundo argumento de una
funci´on log3(100) = y [loga(x) = ln(x)/ln(b)].
>> log(100, 3)
12 / 43
13. Operador de asignaci´on
Matlab guarda nuestros ´ultimos resultados en el objeto ans,
no obstante, esto no nos permite guardar los resultados para
utilizarlos posteriormente.
No obstante, Matlab permite guardar los c´alculos realizados
en objetos, mediante el operador de asignaci´on (un solo signo
=):
>> result=1+1
>> result1=result+2
El sigo ; permite evitar se impriman los resultados de
nuestra orden. Mientras que el signo , permite indicar varias
ordenes en una misma l´ınea de comando.
13 / 43
14. Ejercicios: asignaci´on
Ejercicio 1.2. Si el precio de un libro es de 2, 317 y ha decidido
comprar 2, guarde ambos elementos en dos variables p y q,
respectivamente. Luego, obtenga el costo total a pagar (pxq), guardado
en otra variable llamada ct.
14 / 43
15. Definir vectores
Crear un vector (V) de n elementos en Matlab:
V = [v1, v2, v3, .., vn]
V = [v1 v2 v3 ... vn]
La lista expl´ıcita (identifica cada miembro) es la manera
m´as sencilla de expresar un vector, objetos que permiten
aprovechar las potencialidades de Matlab.
>> edad=[1,2,3,5,4,5,6]
Por lo general, en econom´ıa tendremos tres tipos especiales
de vectores: num´ericos, l´ogicos y de texto. Un vector no
puede ser de dos clases a la vez, por eso podemos acceder a
estructura adicionales de bases de datos.
15 / 43
16. Operaciones con vectores: funciones (I)
Podemos realizar operaciones con vectores completos o sobre
partes especificas del mismo (indexaci´on).
En el caso de las funciones, estas funciones brindan
informaci´on sobre el contenido y las caracter´ısticas del vector.
Se utilizan usando el nombre de la funci´on seguido del
nombre del vector entre par´entesis:
>> edad=[1,2,3,5,4,5,6]
>> sum(edad)
>> sort(edad), sort(edad, descend )
>> max(edad) %min
>> mean(edad)
>> length(edad)
>> whos edad
16 / 43
17. Operaciones con vectores: funciones (II)
Podemos combinar y anidar las funciones anteriores.
>> meanEdad=sum(edad)/length(edad)
>> length(sum(edad))
17 / 43
18. Operaciones con vectores: operadores
Podemos realizar las tradicionales operaciones aritm´eticas
sobre vectores. Esta operaciones repite la operaci´on indicada
sobre cada uno de los elementos del vector.
>> edad+1
>> edad ∧ 1
>> edad
>> log(edad)
Tambi´en, podemos utilizar los corchetes concatenar vectores.
>> edad=[edad 8 9 12]
18 / 43
19. Operaciones con vectores: indexaci´on de vectores
Matlab permite acceder a partes de un vector, sobre el cual
podemos realizar operaciones directamente.
>> edad=[15 12 19 14 16 15 17 13 14];
>> edad(1)
>> edad([1 2 4 3])
>> edad(end) = edad(length(edad))
>> edad(end-2)
19 / 43
20. Operaciones con vectores: indexaci´on de vectores
Entres las operaciones que se pueden realizar se encuentra la
de cambiar un elemento o parte de un vector.
>> edad(1)=22
>> edad([1 2 4 3])=13
>> edad([1 2 4])=[6 7 5]
20 / 43
21. Ejercicios: operaciones e indexaci´on de vectores
Ejercicio 1.3. La calificaci´on de 5 estudiantes han sido: 69, 72, 91, 81,
70. Utilice esta informaci´on para crear un vector llamado calif que
contenga dichas calificaciones.
calif=[69, 72, 91, 81, 70]
- Sustituya el vector anterior, de forma tal que puede agregar las
calificaciones de 8 estudiantes, guardada en un vector de calificaciones
anteriores: califold=[71,72,85,84,68,98,85,78].
- Imprima en la pantalla, las calificaciones del primer, tercero y s´eptimo
estudiante.
- Genere un nuevo vector llamado califold2, que sea igual al cuadrado del
vector. calif
- Cambie el valor de las tres primeras edades por: 5 12 74, respectivamente.
21 / 43
22. Operadores relacionales
Como otros programas, Matlab cuenta con operadores
relacionales, que se pueden aplicar sobre escalares y sobre
vectores, indicando uno (1) cuando la operaci´on sea cierta y
cero (0) en caso de ser falsa.
Los operadores relacionales son:
< menor que
> mayor que
<= menor igual
=> mayor igual
== igual
= no igual
22 / 43
23. Operaciones con vectores: indexaci´on de vectores
Los operadores relacionales permiten testear relaciones entre
escalares y vectores, realizar indexaci´on l´ogica y condicionales en
nuestras estructuras.
Comparar escalares:
>> 3>2
Crear vectores l´ogicos: son vectores [0 1] que indican
cumplimiento o no de alguna condici´on.
>> edad>18
23 / 43
24. Operadores relacionales: indexaci´on l´ogica
Indexaci´on logica: tambi´en podemos utilizar los operadores
relacionales para acceder a las partes de un vector que
cumplen con determinadas condiciones.
>> edad(edad>18)
>> edad(∼(edad>18)) % ∼ negaci´on l´ogica
Reflexione
La diferencia entre el vector l´ogico y la indexaci´on l´ogica.
24 / 43
25. Ejercicios: relacionales y vectores l´ogicos
Ejercicio 1.4. Los siguientes vectores representan los resultados para
Marcos y Luis, de haber apostado en un casino durante 7 d´ıas
consecutivos: m=[-3,4,1,2,-3,-2,-1], l=[-2,-1,1,3,-1,-2,0],
respectivamente.
- Cree un vector l´ogico para cada persona que indique 1 los d´ıas que
registraron p´erdidas y 0 en casos contrario.
- Utilice la funci´on min, para ver cu´al ha sido la mayor perdida de cada uno
de los jugadores.
- Utilice la funci´on sum para contabilizar la cantidad de d´ıas que cada
persona perdi´o dinero.
- Pruebe si es cierto que la p´erdida total de Marcos es mayor a las de Luis.
- Cree un vector llamado m1 que sustituya los valores positivos del vector m
por ceros.
25 / 43
26. Operadores l´ogicos
Estos operadores permiten agrupar operadores relacionales:
& Y
| O
∼ Negaci´on l´ogica
x y Y & | O ∼ de O
1 1 1 1 0
1 0 0 1 0
0 1 0 1 0
0 0 0 0 1
26 / 43
27. Ejercicios: operadores l´ogicos
Ejercicio 1.5. Suponga tenemos informaci´on del sexo (1=mujer) y la
edad de 8 personas: sexo=[1,0,1,0,0,1,0,1] y
edad=[16,19,21,20,15,27,42,21].
- Pruebe la siguiente orden: data=[edad , sexo ].
- Cree un vector llamado mujerMenor, que sea igual a 1 en el caso de mujeres
menores de edad (tenga pendiente nombrar la variable indicador en funci´on
del grupo que toma el valor de 1).
- Cree un vector hombreOmayor, que sea igual a 1 en el caso de que la persona
sea hombre o mayor de edad.
- Utilice la funci´on sum para contabilizar el total de hombres mayores de edad.
- Presente todos los vectores anteriores un una sola matriz de datos.
27 / 43
28. funciones l´ogicas: Any
any es una funci´on vectorizada de Matlab que permite
verificar si al menos uno (1) de los elementos de un objeto en
Matlab (sea vector o matriz) cumple con una condici´on
determinada.
>> edad=[7 9 15 17 12 13];
>> any(edad>17) (ans 0)
>> edad=[7 9 15 17 12 13 18];
>> any(edad>17) (ans 1)
28 / 43
29. funciones l´ogicas: All
All es una funci´on vectorizada que permite verificar si todos
los elementos de un objeto en Matlab (sea vector o matriz)
cumple con una condici´on determinada, especificada
mediante indexaci´on l´ogica.
>> edad=[7 9 15 17 12 13];
>> all(edad>17) (ans 0)
>> edad=[7 9 15 17 12 13 18];
>> all(edad>17) (ans 0)
>> edad=[21 23 25 26 18];
>> all(edad>17) (ans 1)
29 / 43
30. Indexaci´on de valores mediante find
En muchas ocasiones, necesitamos conocer la posici´on
(´ındice) que ocupa cierto valor a lo interno de nuestro vector,
en tales casos utilizamos la funci´on find.
>> x=[4,7,8,9,10];
>> find(x==8)
Tambi´en podemos anidar funciones, suponga a testeado
diversos autoregresivos Ar(p) para determinar el orden
´optimo de rezagos a partir del m´ınimo de alg´un criterio de
informaci´on:
>> find(x==min(x))
30 / 43
31. Ejercicios: operadores l´ogicos
Ejercicio 1.6. Continu´e con el ejemplo 1.4 e indique en que d´ıa ambos
apostadores obtuvieron iguales resultados.
- Indique el d´ıa en que obtuvieron las mayores perdidas.
- Indique los d´ıas en que ambos registraron perdidas.
Reflexione
La diferencia entre operador de asignaci´on (=) y el operador
relacional (==).
31 / 43
32. Ejercicios: operadores l´ogicos
Ejercicio 1.7. Ha estimado un modelo VAR, y desea identificar cual es
el retardo que minimiza el criterio de informaci´on AIC, para identificar
el orden de retardo del VAR a partir de la informaci´on contenida la
siguiente tabla. Utilice el comando find para identificar el orden de
retardo que debe utilizar.
Retardos 1 2 3 4 5 6
AIC 0.012 0.11 0.109 0.1092 0.1097 0.11
32 / 43
33. Operador Colon
Muchos vectores y operaciones siguen una determinada
secuencia, el operador colon (:) permite realizar este tipo de
operaciones de forma sencilla:
>> anios=[2000:2010]
Adem´as, podemos indicar los saltos deseados en la secuencia
del vector:
>> 1:2:10
33 / 43
34. Ejercicios: secuencias
Ejercicio 1.7. Continuando con el ejercicio 1.5, utilice el vector edad
para realizar las siguientes operaciones utilizando indexaci´on mediante
el operador colon:
- Acceda a las 4 primeras posiciones del vector.
- Acceda a todas, excepto la ´ultima posici´on del vector.
- Acceda a toda las posiciones pares del vector.
- Cree un nuevo vector llamado edadpar, que sea igual al vector edad pero
donde todos los valores pares del mismo sean iguales a cero.
34 / 43
35. Ejercicios: secuencias
Ejercicio 1.8. En un estudio de estacionalidad tenemos una serie
mensual para tres a˜nos:
- Cree un vector llamado mes donde se repita la secuencia de n´umeros del 1 al
12 (1:12) de forma que cada uno indique un mes determinado (mes=[1:12,
1:12, 1:12]).
- Cree un nuevo vector llamado dic, que sea igual a 1 durante el mes de
diciembre y cero en los dem´as casos.
- Cree un nuevo vector llamado juliDic que sea igual a 1 durante el mes de
diciembre o julio, y cero en los dem´as casos.
- Cree otro vector llamado trim, que sea igual a 1 durante los primeros tres
meses del a˜no y cero en los dem´as casos.
35 / 43
36. Indexaci´on con operador colon
Tambi´en podemos utilizar el operador para acceder a partes
de un vector:
>> edad(1:5)
>> edad([2 4:7])
>> edad(1:end)
>> edad(1:end-1)
36 / 43
38. Secuencias: repmat
La funci´on repmat nos permite generar secuencia de vectores
(matrices) ya creadas:
>> edad=[10 15 20]
>> repmat(edad, 2)
>> repmat(edad, 1)
>> repmat(edad, [1 2])
>> repmat(edad, [2 1])
38 / 43
39. Vectores de texto
Hasta ahora hemos visto vectores num´ericos y l´ogicos, sin
embargo, en muchas ocasiones es preciso contar con un vector
de caracteres. Estos se crean en Matlab colocando el texto
entre comillas simple, dentro de corchetes:
>> sexo= { h m h m m }
Note que podemos acceder a partes del vector y aplicar
algunas funciones, pero no podemos realizar operaciones
l´ogicas sobre el mismo:
>> sexo(1)
>> sort(sexo)
>> sexo== h
Undefined operator == for input arguments of type cell .
39 / 43
40. Vectores categ´oricos
En el an´alisis econ´omico, especialmente de bases de hogares,
suele ser bastante ´util transformar los vectores texto en
categ´oricos, debido a que permite trabajar operadores l´ogicos
sobre los mismos.
>> sexoC=categorical(sexo)
>> sum(sexoC==’m’)
Tambi´en es posible renombrar los elementos dentro de un
vector.
>> sexoC1=categorical(sexo, {’h’ ’m’}, {’Hombre’ ’Mujer’})
40 / 43
41. Ejercicios: vectores de texto
Ejercicio 1.10. suponga en unas elecciones han participado tres
partidos (a b c) obteniendo los siguientes votos [1425 7812 2564]:
- Determine, mediante el comando find, cual ha sido el partido ganador.
41 / 43
42. Bibliograf´ıa
1 Attaway, Stormy (2013). A Practical Introduction to Programming and
Problem Solving Department of Mechanical Engineering, Boston
University. Third Edition.
2 Madoz, A. and Etxeberria, P. (2015). Notes on Matlab. University of the
Basque Country, UPV/EHU. January
3 MathWorks (2015). MATLAB Language Reference. Language Reference
Manual version 4 Barcelona GSE.
4 Moore, Holly (2008). MATLAB para ingenieros. Pearson Prentice Hall.
42 / 43
43. Gracias!!!
Fundaci´on para el Avance de las Matem´aticas (FAMA)
Curso de fundamentos de Matlab para el an´alisis econ´omico
43 / 43