Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

34
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

Transcript of Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

Page 1: 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

Page 2: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 3: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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]

Page 4: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 5: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 6: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 7: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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:

Page 8: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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.

Page 9: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 10: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 11: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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’.

Page 12: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 13: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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.

Page 14: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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”.

Page 15: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 16: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 17: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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 …”

Page 18: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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.

Page 19: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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…”.

Page 20: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 21: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 22: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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)

Page 23: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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:

Page 24: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 25: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 26: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 27: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 28: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 29: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 30: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 31: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 32: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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

Page 33: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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.

Page 34: Serie Apuntes de Clase ΩΒΓ Octubre de 2017 N° 17

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.