Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17
Transcript of Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17
Rafael Bustamante Romaní
N° 17
Octubre de 2017 Serie Apuntes de Clase ΩΒΓ
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, DECANA DE AMÉRICA
FACULTAD DE CIENCIAS ECONÓMICAS
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
1
La Serie Apuntes de Clase Omega Beta Gamma tiene por objetivo difundir los materiales de enseñanza generados por los docentes que tienen a su cargo el desarrollo de las asignaturas que forman parte de los Planes de Estudios de las Escuelas Académico-Profesionales de la Facultad de Ciencias Económicas de la Universidad Nacional Mayor de San Marcos. Estos documentos buscan proporcionar a los estudiantes la explicación de algunos temas específicos que son abordados en su formación universitaria.
Encargados de la serie:
Bustamante Romaní, Rafael Cisneros García, Juan Manuel. [email protected] [email protected]
Facultad de Ciencias Económicas. Universidad Nacional Mayor de San Marcos.
Calle Germán Amézaga N° 375. Ciudad Universitaria, Lima 1. Perú.
La Serie Apuntes de Clase ΩΒΓ es promovida y
desarrollada por un colectivo de docentes del Departamento de Economía de la Universidad Nacional Mayor de San Marcos. El contenido de cada publicación es íntegramente responsabilidad de cada autor, no representa necesariamente los puntos de vista de los integrantes del colectivo, ni de la Universidad.
Financeybusinness S.A.C. Es una firma especializada en
la prestación de servicios profesionales en capacitación
y de consultoría en el diseño e implementación de
estrategias empresariales ante los problemas
financieros, de gestión y riesgos a los que se enfrentan
las empresas en su normal funcionamiento.
http://financeybusiness.com
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
2
CAPITULO I I: FUNDAMENTOS DE
PROGRAMACIÓN EN MATLAB
Rafael Bustamante Romaní
MATLAB es una de las tantas herramientas de computacionales disponibles en el espectro
científico que es utilizado para resolver problemas de matemáticas, estadística, física,
economía y demás ciencias. MATLAB es un programa superior en los cálculos que
involucran matrices más no así si el cálculo es simbólico. El nombre mismo de MATLAB es
una abreviatura de Matrix Laboratory, laboratorio matricial. En muchos casos la realización
de cálculos con un programa de computación matemático como MATLAB sustituye la
programación de computadoras más tradicionales. Esto no significa que no se deba
aprender un lenguaje de alto nivel como C++ o FORTRAN, sino que los programas como
MATLAB se han convertido en una herramienta estándar para economistas y demás
científicos debido a que su lenguaje de programación es bastante amigable con el usuario.
Estos apuntes de clases pretenden presentar los fundamentos básicos para empezar con el
manejo del programa, el cual ya es una tendencia de amplio uso entre los economistas y
demás usuarios de la comunidad científica.
Palabras claves: Software, estadística, cálculo, matrices, MATLAB.
Clasificación JEL: C00, C02.
Estudios de Doctorado en Economía, Universidad Autónoma de México. Maestría en Economía con mención
en Finanzas, MBA Centrum en Pontificia Universidad Católica del Perú. B. Sc. Economía, Universidad Nacional Mayor de San Marcos. Profesor del Departamento de Economía de UNMSM. Investigador asociado al Instituto de Investigaciones FCE – UNMSM. Investiga. Contacto: [email protected]
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
3
Contenido
Introducción ............................................................................ 4
1. Lectura y escritura de variables: Input, disp, fprint....... 10
2. Comandos de control de flujos .......................................... 13
2.1 Comandos del tipo loop .................................................. 13
2.2 Comandos condicionales ................................................ 17
2.3 Operadores Lógicos ......................................................... 19
3. Ejemplos aplicativos ......................................................... 24
3.1 El Método de la bisección ................................................ 24
3.2 Método para buscar el cero en una función ................ 29
4. Bibliografía ............................................................................. 32
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
4
FUNDAMENTOS DE PROGRAMACIÓN EN MATLAB
Introducción
MATLAB es el nombre abreviado de “MATrix LABoratory”. MATLAB es un
programa para realizar cálculos numéricos con vectores y matrices. Como caso
particular puede también trabajar con números escalares −tanto reales como
complejos−, con cadenas de caracteres y con otras estructuras de información más
complejas. Una de las capacidades más atractivas es la de realizar una amplia
variedad de gráficos en dos y tres dimensiones. MATLAB tiene también un
lenguaje de programación propio. Este manual hace referencia a la versión 9.2
del 2017.
MATLAB es un gran programa de cálculo técnico y científico. Para ciertas
operaciones es muy rápido, cuando puede ejecutar sus funciones en código
nativo con los tamaños más adecuados para aprovechar sus capacidades de
vectorización. En otras aplicaciones resulta bastante más lento que el código
equivalente desarrollado en C/C++ o Fortran. En la versión 6.5, MATLAB
incorporó un acelerador JIT (Just In Time), que mejoraba significativamente la
velocidad de ejecución de los ficheros *.m en ciertas circunstancias, por ejemplo
cuando no se hacen llamadas a otros ficheros *.m, no se utilizan estructuras y
clases, etc. Aunque limitado en ese momento, cuando era aplicable mejoraba
sensiblemente la velocidad, haciendo innecesarias ciertas técnicas utilizadas en
versiones anteriores como la vectorización de los algoritmos. En cualquier caso,
el lenguaje de programación de MATLAB siempre es una magnífica herramienta
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
5
de alto nivel para desarrollar aplicaciones técnicas, fácil de utilizar y que, como
ya se ha dicho, aumenta significativamente la productividad de los
programadores respecto a otros entornos de desarrollo ( Rodríguez, García de
Jalón, & Vidal, 2005).
MATLAB dispone de un código básico y de varias librerías especializadas
(toolboxes). En estos apuntes se hará referencia exclusiva al código básico.
MATLAB se puede arrancar como cualquier otra aplicación de Windows,
clicando dos veces en el icono correspondiente en el escritorio o por medio del
menú Inicio). Al arrancar MATLAB se abre una ventana similar a la mostrada en
la Figura 1. Ésta es la vista que se obtiene eligiendo la opción Desktop
Layout/Default, en el menú View. Como esta configuración puede ser cambiada
fácilmente por el usuario, es posible que en muchos casos concretos lo que
aparezca sea muy diferente. En cualquier caso, una vista similar se puede
conseguir con el citado comando View/Desktop Layout/Default. Esta ventana
inicial requiere unas primeras explicaciones ( Rodríguez, García de Jalón, &
Vidal, 2005).
Matlab puede utilizarse como un lenguaje de programación que incluye todos
los elementos necesarios. Añade la gran ventaja de poder incorporar a los
programas propios del usuario todas las aplicaciones que ya tiene
implementadas, lo cual facilita y simplifica en muchos casos la programación.
También será de gran utilidad tener en cuenta la estructura vectorial y matricial
del programa. Como ya hemos adelantado, los programas en Matlab suelen
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
6
escribirse en los ficheros .m (M-ficheros). Lo normal es que sea en ficheros Scrips
que resultan los más sencillos. A veces, no tienen argumentos de entrada ni salida
y están formados por un conjunto de instrucciones que se ejecutan
secuencialmente. Por ejemplo, el fichero de la figura 26 representa una curva
cuando se escribe su nombre, en este caso “pinta”, en la línea de comandos y se
pulsa intro.
Figura Nº 1
Se puede decir que este ya es un programa creado en Matlab. Sin embargo la
estructura general de un programa MATLAB es la siguiente:
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
7
Comentarios: inicialmente, pueden aparecer líneas comentadas en las
que se da un título al programa y se realiza una breve descripción del
mismo. Esta parte es opcional, pero es útil introducirla ya que se nos
permite acceder directamente desde la ventana de comandos a la
información comentada mediante la utilización del comando help, en la
forma: >> help nombre del programa.
Entrada de datos si se requiere: los datos necesarios para la resolución
del problema deben suministrarse al programa mediante la lectura de sus
valores por teclado o desde un fichero de datos.
Algoritmo: Desarrollo de un procedimiento que permite obtener la
solución del problema en función de los datos de entrada.
Salida de datos: los datos obtenidos como solución del algoritmo se
deben ofrecer al usuario mediante escritura en pantalla o en un fichero de
datos.
Entrada y salida de datos: Existe un comando para introducir
información en un programa cuando estamos en modo de ejecución. Este
comando es: v=input (‘Cadena de Caracteres’) input realiza dos tareas:
Imprime en pantalla la cadena de caracteres que lleva como
argumento.
Los datos que el usuario teclea en respuesta al letrero, los
introduce en la variable v.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
8
Para que un programa en modo de ejecución pueda escribir letreros,
avisos, etc. por pantalla, se utiliza el comando: disp (‘Cadena de
Caracteres’) que escribe la cadena de caracteres que tiene como argumento
en pantalla. Para escribir el valor de una variable, se utiliza el comando:
disp(v) que muestra en pantalla el valor de la variable v. Para escritura de
texto y/o datos en pantalla, se puede utilizar la función: sprintf (‘formato’,
variables). Ejemplos: >> n=input(‘teclea el número de elementos’)
Una etapa importante en la implementación de una metodología luego de
haberla comprendido, consiste en diseñar la serie de procedimientos que
deberá realizar el computador, antes de escribirlos en su correspondiente
lenguaje. Para esto, es necesario detenernos en los siguientes aspectos:
>>disp(‘este valor no es adecuado’)
Diagramas de flujo (diseño y arquitectura de un programa)
El uso de aplicaciones recursivas y condicionales es muy habitual en
matemáticas. Para ello si utilizan las bifurcaciones y los bucles. Las
bifurcaciones permiten realizar una u otra operación según se cumplan o
no ciertas condiciones. Los bucles repiten operaciones sobre datos
distintos.
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
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
9
de comandos. Para esto, resulta beneficioso el empleo de la siguiente
notación para los diversos procesos dentro de un mismo programa:
Figura Nº 2
En concreto, los diagramas de flujo representan la forma más tradicional para
especificar los detalles algorítmicos de un proceso. Se utilizan principalmente en
programación, economía y procesos industriales; estos diagramas utilizan una
serie de símbolos con significados especiales (su uso hacia un diagrama más
claro, comprensible y estandarizado):
Flecha: indica el sentido y trayectoria del proceso de información o tarea.
Terminal Proceso Entrada/
Salida
Decisión Conector
Conector de
página No
Si
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
10
Rectángulo: se usa para representar un evento o proceso determinado.
Éste es controlado dentro del diagrama de flujo en que se encuentra. Es el
símbolo comúnmente utilizado.
Rectángulo redondeado: se usa para representar un evento que ocurre de
forma automática y del cual generalmente se sigue una secuencia
determinada.
Rombo: se utiliza para representar una condición. Normalmente el flujo
de información entra por arriba y sale por un lado si la condición se
cumple o sale por el lado opuesto si la condición no se cumple. Lo anterior
hace que a partir de éste el proceso tenga dos caminos posibles.
Círculo: representa un punto de conexión entre procesos, se utiliza
cuando es necesario dividir un diagrama de flujo en varias partes, por
ejemplo por razones de espacio o simplicidad. Una referencia debe de
darse dentro para distinguirlo de otros.
1. Lectura y escritura de variables: Input, disp, fprint
Las siguientes funciones permiten al Matlab leer las variables desde teclado y
visualizar mensajes en la pantalla del computador.
a. Input: Aparece un mensaje en la pantalla pidiendo un dato. El valor
digitado será asignado a la variable. Si desea añadir una cadena de
carácter se le debe añadir el carácter ‘s’.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
11
Sintaxis:
Variable = Input (aquí se escribe el mensaje requerido’
Ejemplo:
z= input (‘ingrese un número’)
>> z= input ('ingrese un numero:')
who
ingrese un numero:14
z =
14
Your variables are:
z
>> whos
Name Size Bytes Class Attributes
z 1x1 8 double
>> y= input ('ingrese tu nombre:','s')
ingrese tu nombre:Rafael
y =
'Rafael'
>> whos
Name Size Bytes Class Attributes
y 1x6 12 char
z 1x1 8 double
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
12
b. Disp: Permite visualizar en la pantalla un mensaje de texto o el valor de
una matriz pero sin imprimir su nombre. Las cadenas de caracteres se
consideran un caso especial de vectores.
Ejemplo:
disp(‘El curso de programación en Matlab acaba de empezar’)
c. fprint: Permite visualizar un valor numérico o el resultado de una
expresión guardada por el usuario. Tiene la ventaja de que se puede
escoger un formato.
Los especificadores de formato para las variables son:
%s Para cadena de caracteres
%d Para variables enteras
%f Para variables decimales
%lf Para grandes variables decimales
Sintaxis:
fprint (‘Aquí se escribe el mensaje y formato de la variable’,
variable)
Ejemplo:
Área= 100
fprintf( ‘el área del rectángulo es %12.3f \n’area)
Donde:
\n indica que el promp (>>) aparecerá en la siguiente línea:
%12.3f: Indica que el valor tendrá un formato con tres cifras decimales y
de doce caracteres incluyendo los decimales.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
13
2. Comandos de control de flujos
2.1 Comandos del tipo loop1
Este tipo de comandos funciona como “lazo”, entre un conjunto de instrucciones,
el cual depende de una variable “libre”. Loop, traducido como bucle, puede ser
usado para expresar la configuración de una lista reproducción de música, video
o fotografías en bucle, o sea, cuando la lista llega a su fin vuelve a ser reproducida
desde el inicio. En la música electrónica, por ejemplo, el loop indica la repetición
sin cortes de un fragmento de una música en vez de la repetición de una lista de
reproducción completa.
Loop considerado un circuito puede ser usado como closed loop que se
traduce como circuito cerrado.
La palabra loop, usado para las golosinas se traduce como aros como, por
ejemplo, los fruit loops serían aros de frutas.
Cuando se usa la palabra en el contexto not in the loop significa que algo no está
en determinado proceso. Cuando se refiere a una persona esta expresión indica
que no está informado. Por el contrario, una persona que está in the loop es
aquella que ha sido informada.
Algunas de las sentencias de las que dispone Matlab para este tipo de trabajos
son las siguientes:
for: Permite ejecutar de forma repetitiva un comando o grupo de comandos. La
forma general de un bucle for es:
1 También llamado “bucle”.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
14
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.
Así, un bucle for siempre empieza por la sentencia for y termina con la end. En
su interior incluye todo un conjunto de comandos que se separan por comas. En
algunos casos es bueno poner puntos y comas para evitar repeticiones en las
salidas. Por supuesto puede utilizarse en ficheros *.m.
Ejemplo:
function p=matrix(n,m)
for i = 1:n
for j= 1:m
p(i,j) =i+j
end
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
15
end
if: Mediante esta estructura se pueden ejecutar secuencias de comandos si se
cumplen determinadas condiciones. Su sintaxis es:
Sintaxis:
if condition 1
comando 1
else
comando 2
end
Que ejecuta comandos 1 si la condición 1 es cierta y el comandos 2 si es la
condición 1 falsa. Asimismo como en el caso de for, se pueden anidar sentencias
if:
Sintaxis:
if condition 1
comando 1
elseif condition 2
comando 2
elseif condition 3
comando 3
...
elseif condition N-1
comando N-1
else
end
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
16
while: repite una secuencia de comandos una serie comandos un número
indefinido de veces.
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 …”
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
17
==: “igual a …”
~=: “diferente de …”
El alcance de este comando siempre está determinado por la instrucción end.
2.2 Comandos condicionales
Cada vez que se crea un archivo-M, se está escribiendo un programa de
computadora usando el lenguaje de programación MATLAB (es más, muchos
comandos de MATLAB son a su vez archivos-M, los cuales pueden a su vez ser
examinados y modificados, pero esto último no es recomendable).
Para muchas funciones definidas por el usuario, el programador puede escribir
un archivo-M que ejecuta siempre la misma serie de comandos, dados los
argumentos de entrada. Sin embargo, habrá ocasiones en las cuales se requerirá
que una función desempeñe diferentes secuencias de comandos, dependiendo de
la situación (es decir, en forma condicional). Esto se puede realizar a través de
comandos de ramificación. Al igual que en otros lenguajes de programación, la
ramificación en MATLAB es ejecutada con el comando if.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
18
Sintaxis (comandos if, else y elseif)
if2 condicion
instrucciones
end
if condicion
instrucciones1
else3
instrucciones2
end
if condicion
instruccionesA
elseif4 condicion
instruccionesB
end
if condicion
instruccionesX
elseif condicion
instruccionesY
else
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.
2 “Si ocurre que…”. 3 “En caso contrario…“. 4 “Si además ocurre que…”.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
19
2.3 Operadores Lógicos
Los operadores lógicos son utilizados por si solos o en conjunto con los comandos
tipo loop para realizar diversas tareas, En MATLAB se pueden grabar matrices
con valores lógicos, es decir, con verdadero y falso. El valor “1” representará
enunciados verdaderos y “0”, a los falso.
>> 2>4
ans =
0
>> 2>=2
ans =
1
Los resultados tambien pueden ser introducidos dentro de una matriz.
>> [2>3; 2>1]
ans =
0
1
>> A=[1;2];
B=[1;4];
A>=B
ans =
1
0
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
20
Si se observa en el “Workspace”, el elemento “ans” tiene la categoría lógica;
recordemos que la numérica es double. Ahora bien, se pueden armar enunciados
lógicos utilizando operadores. Estos realizan las conexiones lógicas entre las
celdas de las matrices, las cuales deben ser del mismo tamaño.
Operador Conector Lógico
& “y”
| “o”
~ negación
xor “o…o”
Ejemplo:
>> C= 1 > 3 & 3 > 2.5
C =
0
>> D= 1 > 3 | 3 > 2.5
D =
1
>> F=~(1>3)
F =
1
>> xor(A,B)
ans =
0
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
21
Ejemplo:
>>A = [0 1 1 0 1];
>>B = [1 1 0 0 1];
Resultado de:
A & B= 01001
A | B = 11101
~A = 10010
xor(A,B)=10100
Además, se tiene el operador any y all. Trabajan por los vectores columnas. El
comando “any” arroja “1” si alguno de los elementos de la columna es diferente
de cero y “all” lo hace si todos son diferentes de cero. Por lo tanto, dichos
comandos pueden ser utilizados para operaciones lógicas o usar varias
desilguadades.
Ejemplo:
>> A = [0 1 2;0 -3 8; 0 5 0]
>>a1 = any (A)
>>a2 = all (A)
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
22
A =
0 1 2
0 -3 8
0 5 0
a1 =
0 1 1
a2 =
0 1 0
Los operadores lógicos pueden utilizarse con los comandos “is*”. Estos imponen
“1” en el caso de verdadero y “0” en el de falso.
isfinite(): Detecta si es infinito
isprime(): Detecta números primos en las celdas
isnan(): Detecta elementos de las celdas que no son un número (NaN)
isvector(): Determina si el input es un vector
isscalar(): Determina si el input es un escalar
Al momento que se utilizen los loops “if” y “while”, estos buscarán que la
condición que se impone es verdadera, es decir, que tenga el valor “1” o que el
vector de la condición sea en su totalidad “1”.
Ejemplo:
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
23
>> if [1 1 1 1]
>>x=123
>>else
>>x=321
>>end
x =
123
>> if 1
>>x=123
>>else
>>x=321
>>end
x =
123
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
24
Para pasar una matriz de ceros y unos a una lógica, se utiliza el comando
“logical()”.
3. Ejemplos aplicativos
3.1 El Método de la bisección
Se pide encontrar el valor en el dominio cuya imagen sea igual cero de la
siguiente función: 4 3 2( ) 3 6 2 5 9f x x x x x , en el intervalo 0,10 , 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:
Programa función
function f=func1(x);
f=3*x^4+6*x^3-2*x^2+5*x-9;
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
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
25
programa será utilizado en varios ocasiones en el programa principal que se
presenta a continuación.
Programa Principal
clear all
close all
clc
eps=0.00001; % Defino el valor de épsilon (el máximo nivel de tolerancia)
condition=1;
a=input('Ingrese el punto a (negativo) = '); % Ingreso el valor de inicio del
método de
% la bisección
b=input('Ingrese el punto b (positivo) = '); % Ingreso el valor final de metodo
% de la bisección
ya=func1(a); % Aplico la función al valor inicial
yb=func1(b); % Aplico la función al valor final
if ya*yb>0 % Condición simple
% Se impone condición que los valores de la función de
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
26
% "a" y "b" deben tener signos diferentes. Si no cumple,
% termina el programa.
%disp('Los parámetros no cumplen la restricción')
error('Los parámetros no cumplen la restricción')
return %La función error muestra el comentario en alerta
else % Si cumple la condición, empezamos a realizar el método
% de la bisección
while condition==10 % Empiezo el loop principal
c=(a+b)/2; % Creo una variable "c" como promedio entre "a" y "b"
yc=func1(c); % evalúo "c" en la función
if yc<0 % Si la función toma valores negativos
a=c; % Se redefine "a" como "c"
elseif yc>0 % Si la función toma valores negativos
b=c; % Se redefine "b" como "c"
end
if abs(yc)<eps % Si la función en valor absoluto es menor que épsilon...
condition=0; % entonces no se satisface la condición para que siga el
% loop, por lo tanto para de iterar.
end
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
27
end
end
'El cero se alcanza en:' % El programa imprimira el ultimo valor de c, que en
disp(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).
x3=[-20:.1:10]; % Se dibuja la funcion, empiezo definiendo la grilla.
for i=1:length(x3) % para cada valor de la grilla encuentro la imagen.
yx3(i)=func1(x3(i));
end
plot(x3,yx3) % Dibujo la función
title('Grafico de la función');
grid on;
La idea del método de la bisección es que 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
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
28
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 (negativo) = -2
Ingrese el punto b (positivo) = 2
Si ingresamos valores de “a” y “b” que al ser evaluados en la función presentían
el mismo signo , entonces el programa se detiene para (comando break).
Luego, si se cumplen las condiciones el programa prosigue aplicando un loop
descrito en el programa. El loop se realizará hasta que la divergencia entre el
valor del promedio evaluado en la función con el cero sea menor en valor
absoluto a cierto épsilon. Cuando encuentra este punto, el programa imprime el
valor del promedio. El programa imprime lo siguiente:
ans =
'El cero se alcanza en:'
0.8909
Figura Nº 3
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
29
3.2 Método para buscar el cero en una función
Programa función
function f=func1(x);
f(x)=x^2-x;
Programa Principal
% Este programa plantea un método para encontrar el 0 a una función
% Vamos a utilizar la función f(x)=x^2-x, generada anteriormente
clear all
close all
clc
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
30
puntos=100; %Esto va a definir la cantidad de puntos de la
grilla
eps=0.0001; % Definimos el máximo nivel de tolerancia
condition=1;
while condition==1
x=linspace(-.5,.5,puntos);
% El comando linspace me genera un vector (ver
el help)
p=[1 -1 0] % Creamos el polinomio para usar en la
siguiente línea
fx=polyval(p,x); % Evaluamos el polinomio en todos los valores
de x
absfx=abs(fx); %Le tomo valor absoluto
[minimos,ubic]=min(absfx); %me guarda en mínimos los mínimos y en el
objeto ubic (la ubicación de los mínimos)
if min(minimos)<eps
condition=0;
else
puntos=puntos*2;
clear x fx absfx minimos ubic % Despejamos dichas variables.
end
end
'El cero se alcanza en:'
orden=sortrows([minimos ubic]);
cero=x(orden(1,2))
%Finalmente procedemos a graficar esto
subplot(2,1,1), % Esto es para que pueda visualizar dos
gráficos en uno
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
31
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')
p =
1 -1 0
p =
1 -1 0
p =
1 -1 0
p =
1 -1 0
p =
1 -1 0
p =
1 -1 0
p =
1 -1 0
ans =
'El cero se alcanza en:'
cero =
7.8137e-05
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
32
Figura Nº 4
4. Bibliografía
de Jalón de la Fuente, J., Goñi Lasheras, R., Sarriegui Domínguez, J., & Girón
Legorburu, I. (1997). Aprenda Matlab 4.2 como si estuviera en Primero.
Universidad de Navarra, Escuela superior de Ingenieros Industriales.
García de Jalón, J., Rodríguez, J., & Vidal, J. (2005). Aprenda Matlab 7.0 como si
estuviera en primero. Universidad Politécnica de Madrid. Madrid: Escuela
Técnica Superior de Ingenieros Industriales .
Rodríguez, J., García de Jalón, J., & Vidal, J. (2005). Aprenda Matlab 7.0 como si
estuviera en primero. Universidad Politécnica de Madrid, Escuela Técnica
Superior de Ingenieros Industriales, Madrid.
Benitez López, J., & Hueso Pagoaga, J. (2000). Introducción a MATLAB.
Universidad Politécnica de Valencia, Departamento de Matemática
Aplicada, Valencia.
Cutipa Coaquira, M., & Gutierrez Pachas, D. (2009). MATLAB 7. MACRO EIRL.
Serie Apuntes de Clase ΩΒΓ N°17. Octubre de 2017. FCE / UNMSM
Matlab aplicado a las Decisiones Económicas: Capitulo II: Fundamentos de Programación en Matlab. Bustamante Romaní, Rafael.
33
Martínez del Río, F. (2015). Programación en Matlab. Universidad de Jaén,
Departamanto de Informática .
MathWorks. (2017). MATLAB® Primer.