el entorno matlab - esi2.us.esjaar/datos/fia/enunciados.pdf · 2 practica 1. el entorno matlab´...

44
Pr´ actica 1 El entorno MATLAB 1.1 Objetivos En esta primera pr´ actica se pretende que el alumno: Se familiarice con el entorno de trabajo del programa MATLAB Aprenda a manipular variables, en especial vectores y matrices Conozca las funciones elementales para el trazado de gr´ aficos 1.2 Requisitos Se requiere que el alumno acuda a la sesi´ on pr´ actica con una copia de estas notas y con alg´ un documento de identificaci´ on: DNI, permiso de conducci´ on, tarjeta de la universidad, pasaporte, etc. 1.3 Desarrollo de la pr´ actica El alumno deber´ a: 1. Leer estas notas antes de la sesi´ on pr´ actica, despejando cualquier duda mediante consulta de sus apuntes de clase. 2. Escribir en el entorno MATLAB los ejemplos que se indican en los puntos siguientes, contemplando luego los resultados. Este proceso ha de realizarse de forma cr´ ıtica, es decir, el alumno ha de dedicar cierto tiempo a pensar porqu´ e se obtienen esos resultados y no otros. El alumno debe ser capaz de predecir el resultado de las ´ ordenes, de este modo aprender´ a el uso de la herramienta MATLAB. El profesor podr´ a pedirle al final de la sesi´ on que muestre el dominio adquirido mediante estos ejemplos. 3. Realizar los ejercicios de autoevaluaci´ on y comprobar que los resultados son satisfactorios. 4. Una vez haya completado todos los puntos anteriores puede pasar a realizar los ejercicios finales. 1.4 Evaluaci´on de la pr´ actica El profesor comprobar´ a al final de la pr´ actica que ha obtenido el aprovechamiento adecuado de los puntos 1 a 4 enumerados en el apartado anterior. Es importante que no pase a realizar nuevos apartados hasta haber comprendido perfectamente los anteriores. 1

Upload: nguyenquynh

Post on 28-Sep-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Practica 1

El entorno MATLAB

1.1 Objetivos

En esta primera practica se pretende que el alumno:

• Se familiarice con el entorno de trabajo del programa MATLAB

• Aprenda a manipular variables, en especial vectores y matrices

• Conozca las funciones elementales para el trazado de graficos

1.2 Requisitos

Se requiere que el alumno acuda a la sesion practica con una copia de estas notas y con algundocumento de identificacion: DNI, permiso de conduccion, tarjeta de la universidad, pasaporte,etc.

1.3 Desarrollo de la practica

El alumno debera:

1. Leer estas notas antes de la sesion practica, despejando cualquier duda mediante consultade sus apuntes de clase.

2. Escribir en el entorno MATLAB los ejemplos que se indican en los puntos siguientes,contemplando luego los resultados. Este proceso ha de realizarse de forma crıtica, es decir,el alumno ha de dedicar cierto tiempo a pensar porque se obtienen esos resultados y nootros. El alumno debe ser capaz de predecir el resultado de las ordenes, de este modoaprendera el uso de la herramienta MATLAB. El profesor podra pedirle al final de lasesion que muestre el dominio adquirido mediante estos ejemplos.

3. Realizar los ejercicios de autoevaluacion y comprobar que los resultados son satisfactorios.

4. Una vez haya completado todos los puntos anteriores puede pasar a realizar los ejerciciosfinales.

1.4 Evaluacion de la practica

El profesor comprobara al final de la practica que ha obtenido el aprovechamiento adecuadode los puntos 1 a 4 enumerados en el apartado anterior. Es importante que no pase a realizarnuevos apartados hasta haber comprendido perfectamente los anteriores.

1

Page 2: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

2 PRACTICA 1. EL ENTORNO MATLAB

1.4.1 Inicio de sesion en Windows

El inicio de una sesion ocurre siempre al encender el equipo. El ordenador carga el sistema deexplotacion de forma remota solicitando una clave personal del alumno. En caso de no conocersu clave ha de dirigirse al personal del CDC. Para evitar aglomeraciones haga todo esto antesdel dıa de la practica.

Los ordenadores pueden arrancar diversos sistemas de explotacion: Linus, Windows’98, Win-dows’2000. Lo normal es que haya que usar la version mas reciente de Windows, sin embargo estono es un requisito indispensable. Dicho de otro modo, las versiones antiguas tambien son validaspara realizar la practica lo cual es util si decide realizar en su casa algun trabajo adicional.

1.4.2 Manejo de Windows

El manejo de Windows es muy simple: basta con apuntar con el raton a los elementos que seven en la pantalla y pulsar el boton izquierdo. La accion de apuntar y pulsar recibe el nombreabreviado de ”hacer clic” o ”pinchar”.

La zona central (de color azul) de la pantalla recibe el nombre de escritorio. A la izquierdase encuentran unos dibujos que permiten ejecutar ciertos programas. Los dibujos son llamados”iconos” y tambien ”accesos directos”. En la parte inferior esta la barra de tareas con el botonde inicio como se muestra en la figura 1.1. En algunos equipos la barra solo es visible cuando seapunta con el raton a la zona inferior de la pantalla.

Figura 1.1: Boton de inicio y barra de tareas.

Si todo esto le suena raro realice alguna prueba algun dıa antes del inicio de la practica hastaque se familiarice con el entorno Windows y el manejo de los programas mas usuales: exploradorde Windows, libreta de notas, calculadora, etc.

Tambien es importante que sepa donde se encuentran las teclas de uso frecuente como Intro,Alt, Ctrl, Sup. El siguiente resumen puede ayudarle:

• Tecla Intro. Tiene dos funciones: en primer lugar permite pasar a la siguiente lınea en laescritura. Ademas, en programas de uso interactivo sirve para dar entrada a la informaciontecleada anteriormente de forma que pueda ser procesada. En algunos teclados aparece elsımbolo ←

|, o la palabra RETURN o ENTER.

• Tecla Alt. Al igual que la tecla de mayusculas permite cambiar la funcion de las teclasde funcion. Ademas sirve para generar los sımbolos de la tabla ASCII manteniendo latecla pulsada mientras se introduce el codigo correspondiente en decimal. En muchasaplicaciones esta tecla tiene significado especial. Por ejemplo, en los entornos de ventana,sirve para activar funciones dentro de un menu tecleando ALT+inicial opcion del menu.

• Tecla Alt Gr. Permite obtener los signos |, [, ], } y { , u otros dependiendo del sistema.

• Tecla Ctrl. Pulsada conjuntamente con algunas letras produce caracteres de control, porejemplo Ctrl+C y Ctrl+Z para terminar la ejecucion de programas.

En general cuando se ha de pulsar una tecla conjuntamente con otra se indica mediante elsigno +. Por ejemplo, una combinacion de teclas especialmente util es Ctrl+Alt+Sup que sirvepara acceder al Administrador de Tareas cuando algun programa se ”cuelga”.

Page 3: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 3

1.4.3 Puesta en marcha de MATLAB

Para poner en marcha MATLAB basta con pulsar el icono correspondiente en el escritorio.

1.4.4 Ejemplos elementales

El programa MATLAB se maneja (en su mayor parte) escribiendo sentencias dentro de unaventana llamada de ordenes (Command Window en ingles). Busque esa ventana entre las variasque pueden aparecer al lanzar MATLAB. Puede cerrar las otras pues no van a ser utilizadas.

La mejor manera de aprender a realizar operaciones con MATLAB es probar el programacon ejemplos sencillos y explorar su comportamiento. La forma mas simple de usar MATLABes como una calculadora. En lugar de pulsar teclas se ha de escribir la operacion a realizar ypulsar Intro para que esta se lleve a cabo.

Por ejemplo si se escribe

6+8

y se pulsa Intro se obtiene en la pantalla:

>> 6+8

ans =

14

>>

Como ya se ha dicho, el sımbolo >> sirve para indicar al usuario que puede escribir ahı suorden. A menudo recibe el nombre de sımbolo inductor pues induce al usuario a escribir.

Puede verse que el resultado viene precedido de ans=. Estas letras son la abreviatura deanswer (respuesta, resultado).

El programa MATLAB admite operaciones con parentesis, como por ejemplo 2 · (5 + 3).

>> 2*(5+3)

ans =

16

>>

Notese que la multiplicacion se indica por medio del asterisco *. Tambien es posible realizaroperaciones menos elementales, como por ejemplo logaritmos en base 10

>> log10(100)

ans =

2

>>

Page 4: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

4 PRACTICA 1. EL ENTORNO MATLAB

o raıces cuadradas

>> sqrt(36)

ans =

6

Si uno desea dar nombres simbolicos a los numeros que ha de manejar debe crear variables.Para ello basta con asignar un valor mediante una expresion del tipo:

nombre_de_la_variable = valor_que_se_asigna

por ejemplo:

x=22.3

el programa responde con un mensaje que indica que se ha creado la variable y que hatomado el valor adecuado

>> x=22.3

x =

22.3000

>>

Es importante saber que estas expresiones hacen dos cosas: crear la variable (tomando ciertacantidad de memoria para almacenar su valor) y dar un valor inicial a la variable.

Esta facilidad para crear variables conlleva algunos peligros que se intentaran de minimizarmediante una programacion cuidadosa.

Las variables pueden usarse en otras expresiones como si se tratase de numeros, por ejemplo:

>> x+10

ans =

32.3000

>>

Para saber el valor que contiene una variable basta con escribir su nombre y pulsar Intro.

>> x

x =

22.3000

>>

Si uno desea conocer cuantas variables tiene en un momento dado puede usar la orden who.En el ejemplo anterior se obtiene:

>> who

Your variables are:

ans x

Page 5: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 5

Observe que ans (la respuesta) es una variable. Puede comprobar que su valor coincide conel de la ultima respuesta dada por MATLAB.

Las variables pueden combinarse de muchas formas en expresiones que recuerdan la notacionmatematica. Por ejemplo:

>> y=x+5

y =

27.3000

Otra caracterıstica interesante del programa MATLAB es que al pulsar la tecla ”flechaarriba” (una de las teclas de cursor situadas abajo y a la derecha en el teclado) aparece en laventana de ordenes la orden anterior. Si se pulsa dos veces aparece la anterior de la anterior,etc. De este modo es posible repetir ordenes sin tener que volver a escribirlas. Ademas, parafacilitar el uso del programa la ventana de ordenes tambien admite operaciones de copiado ypegado de texto.

1.4.5 Operaciones logicas

Ademas de las operaciones aritmeticas de sobra conocidas existen operaciones logicas, comopor ejemplo la comprobacion de igualdad. Considere el ejemplo siguiente consistente en unaexpresion de comprobacion de igualdad:

>> x==7

ans =

0

>>

La expresion x == 7 equivale a preguntar ¿Es el valor de x igual a 7?. La respuesta obtenidaes cero, lo cual indica que x no es igual a 7. De forma equivalente la sentencia x == 22.3 produceun valor 1 al ser evaluada.

>> x==22.3

ans =

1

>>

De estos ejemplos se desprende que las comprobaciones que el valor logico verdadero esrepresentado en MATLAB mediante el valor numerico ”1”, mientras que el valor logico falso esrepresentado por ”0”.

Otras operaciones logicas son ”mayor que” >, ”menor que” <, ”mayor o igual que” >= ,”menor o igual que” <=, ”distinto a” ∼=. A modo de ejemplo considere las expresiones siguientesy las respuestas proporcionadas por MATLAB.

>> x<10

ans =

0

>> x>=22.3

ans =

1

Page 6: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

6 PRACTICA 1. EL ENTORNO MATLAB

>> x ~= 8

ans =

1

Las operaciones que dan como resultado un valor logico se pueden combinar utilizando lasuma logica (operacion ”o”), el producto logico (operacion ”y”) y la negacion (operacion ”no”).

Por ejemplo, para saber si x < 100 y al mismo tiempo x > 5; es decir, para comprobar si5 < x < 100 se usara la expresion x<100 & x > 5

>> x<100 & x>5

ans =

1

Como era de esperar el resultado es 1. Eso quiere decir que es cierto que ”x es menor que100 y mayor que 5”.

Las operaciones que se han comentado se indican en la tabla siguiente de forma mas resumida.

Expresion en MATLAB Operacion+ suma aritmetica

- resta aritmetica o cambio de signo

* multiplicacion aritmetica

/ division

< relacion "menor que"

> relacion "mayor que"

<= relacion "menor o igual que"

>= relacion "mayor o igual que"

== relacion "igual que"

∼= relacion "distinto que"

& producto logico (operacion "y")

| suma logica (operacion "o")

∼ negacion (operacion "no")

Pruebe algunas de estas relaciones con ejemplos de su propia invencion.

1.4.6 Funciones incorporadas

De todas las ordenes de MATLAB ninguna debiera ser mas util para el usuario aprendiz que lafuncion de ayuda. Se comentara mas adelante como usar la funcion help, de momento se va ausar ahora para conocer la lista de funciones ”elementales”.

>> help elfun

El resultado de esta orden es una larga lista de funciones que se muestra en la tabla 1.1 (queesta en ingles como puede verse por lo que habra que acostumbrarse).

La forma de uso de estas funciones es simple e intuitiva, por ejemplo a = sin(1) asigna ala variable a el valor del seno de un radian, o sea sen(1).

>> a = sin(1)

a =

0.8415

Page 7: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 7

Trigonometric.

sin Sine.sinh Hyperbolic sine.asin Inverse sine.asinh Inverse hyperbolic sine.cos Cosine.cosh Hyperbolic cosine.acos Inverse cosine.acosh Inverse hyperbolic cosine.tan Tangent.tanh Hyperbolic tangent....Exponential.

exp Exponential.log Natural logarithm.log10 Common (base 10) loga-

rithm.log2 Base 2 logarithm and dis-

sect floating point num-ber.

sqrt Square root....

Complex.

abs Absolute value.angle Phase angle.complex Construct complex data

from real and imaginaryparts.

conj Complex conjugate.imag Complex imaginary part.real Complex real part....

Rounding andremainder.fix Round towards zero.floor Round towards minus in-

finity.ceil Round towards plus infin-

ity.round Round towards nearest

integer.mod Modulus (signed remain-

der after division).sign Signum.

Tabla 1.1: Algunas funciones elementales de MATLAB

A modo de ejemplo se van a calcular las soluciones de

P (x) = x2 + 5x− 24 = 0

Las soluciones son los valores x = s1 y x = s2 que hacen que P (x) = 0 y se obtienen como

s1 =−b−

√b2 − 4ac

2a

s2 =−b +

√b2 − 4ac

2a

siendo a = 1, b = 5 y c = −24 los coeficientes de P (x).Utilice el entorno MATLAB para calcular s1 y s2. Intente hacer uso de las variables a, b y

c. Para comprobar que ha realizado los calculos bien, La respuesta correcta es s1 = −8, s2 = 3.Pruebe a repetir el calculo de las soluciones pero ahora para la ecuacion:

P (x) = 4x2 − x + 5 = 0

Observe que solo necesita cambiar los valores de a, b y c. La solucion de este nuevo casotiene parte real y parte imaginaria como se puede comprobar:

s1 =

0.1250 - 1.1110i

s2 =

0.1250 + 1.1110i

Page 8: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

8 PRACTICA 1. EL ENTORNO MATLAB

En el resultado anterior la letra i simboliza el numero imaginario√−1. El programa MAT-

LAB permite trabajar de este modo con numeros complejos.

Si los resultados han sido correctos y ha comprendido el uso de las variables y las operacionespuede pasar al punto siguiente. En caso contrario revise las ordenes que haya escrito y vuelva aintentarlo.

1.4.7 Vectores

Los vectores se introducen en MATLAB como una coleccion de valores. Por ejemplo un vectorfila es

>> v=[ -1 2 -3 4 -5]

v =

-1 2 -3 4 -5

>>

Este vector v ∈ IR1×5 es tratado por MATLAB como un unico objeto. Para acceder a lascomponentes individuales del vector se usan parentesis indicando el ındice de la componentecomo se muestra en las dos sentencias del ejemplo siguiente.

>> v(3)

ans =

-3

>> v(1)*8

ans =

-8

Es decir que en MATLAB la expresion v(k) equivale a la notacion matematica vk.

Tambien se pueden construir vectores columna. Para ello se separan las filas mediante puntoy coma como se muestra a continuacion

>> u=[0; 1; 0; 1; 0]

u =

0

1

0

1

0

De este modo se ha creado un vector u ∈ IR5×1. En el ejemplo siguiente se ilustra que elproducto escalar de dos vectores se obtiene facilmente.

>> v*u

ans =

6

Del mismo modo se puede llevar a cabo el producto de un vector por un escalar como semuestra a continuacion

Page 9: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 9

>> n = v*3

n =

-3 6 -9 12 -15

Los vectores son tratados por MATLAB como matrices con la peculiaridad de tener una solafila o columna. Por este motivo no merece la pena dedicar mas espacio a los vectores y convienepasar ya a las matrices.

1.4.8 Matrices

En MATLAB una matriz es una variable como otra cualquiera y no precisa mecanismos compli-cados para su creacion y uso. A modo de ilustracion considere que pretendemos sumar las dosmatrices:

A =

(

0 2 41 1 1

)

, B =

(

3 3 3−1 −1 −1

)

El primer paso es introducir las matrices en variables. Comenzando con la matriz A escribi-mos la sentencia

A = [ 0 2 4; 1 1 1]

en la pantalla se obtiene:

>> A = [ 0 2 4; 1 1 1]

A =

0 2 4

1 1 1

Como puede verse, los elementos de una misma fila se separan por espacios (o comas) y unafila se separa de la siguiente mediante el punto y coma.

Se procede del mismo modo con la matriz B, obteniendose:

>> B = [ 3 3 3; -1 -1 -1]

B =

3 3 3

-1 -1 -1

Para realizar la suma se procede igual que si A y B fuesen variables escalares; es decir, seescribe A+B

>> A+B

ans =

3 5 7

0 0 0

Con la misma facilidad se calcula el producto de matrices o funciones de matrices. Porejemplo, para calcular el valor absoluto de los elementos de la matriz B se escribe:

>> C=abs(B)

C =

3 3 3

1 1 1

Page 10: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

10 PRACTICA 1. EL ENTORNO MATLAB

Como puede observarse el resultado es una nueva matriz C cuyos elementos son el valorabsoluto de los elementos de la matriz B. A modo de ejercicio intente calcular el productoescalar de los vectores v y w:

v =(

0 −1 2)

, w =

113

Para ello ha de crear un vector fila (equivalente a una matriz de una fila y tres columnas) yun vector columna (equivalente a una matriz de tres filas y una columna). El producto de losvectores se escribe simplemente v*w. Compruebe que w*v no es un producto escalar, sino queda como resultado una matriz.

1.4.9 Funciones para el manejo de datos

Puesto que MATLAB esta pensado para ser usado de forma interactiva es frecuente que elusuario necesite saber que variables ha creado, cuales son sus caracterısticas, cuanto espacioocupan, etc. Para ello se dispone de ciertas funciones que se van a explicar a continuacion.

Informes . Se ha comentado anteriormente que la orden who proporciona una lista de variables.Vea como ejemplo la secuencia de ordenes y respuestas siguiente:

>> x=8

x =

8

>> y=x+2

y =

10

>> who

Your variables are:

x y

Existe una modalidad que proporciona los tamanos de las variables y que es de utilidadcuando se trabaja con matrices. La orden es whos como puede verse en el ejemplo.

>> A=[1 2 3; 3 4 6]

A =

1 2 3

3 4 6

>> whos

Name Size Bytes Class

A 2x3 48 double array

x 1x1 8 double array

y 1x1 8 double array

Page 11: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 11

Grand total is 8 elements using 64 bytes

Dimensiones A veces es necesario conocer el tamano o dimensiones de una unica variable,por ejemplo para saber el numero de filas de una matriz y disponer de este numero paraposteriores calculos. Para estos casos se puede usar la funcion size.

>> size(A)

ans =

2 3

En el caso de manejar vectores resulta mas conveniente la funcion length que proporcionael numero de elementos.

>> v=[ -1 2 -3 4 -5]

v =

-1 2 -3 4 -5

>> length(v)

ans =

5

1.4.10 Funciones para trazado de graficas

Uno de los motivos por el que MATLAB ha sido un entorno favorecido por el publico es lafacilidad con la que se pueden realizar graficos de muy distintos tipos. En este punto se va aindicar la forma de realizar algunas representaciones graficas que pueden ser muy utiles parailustrar posteriormente otros ejercicios.

La orden de dibujo mas simple es plot. Esta funcion puede ser utilizada de muchas maneras.En primer lugar puede usarse para representar las componentes de un vector. Por ejemplo,supongamos que el vector:

>> v=[ 14 15.6 16.2 18 16.5 14 ]

esta formado por las temperaturas (en grados Celsius) medidas cada cuatro horas en una estacionmeteorologica. Si se escribe lo siguiente en el entorno MATLAB

>> v=[ 14 15.6 16.2 18 16.5 14 ]

v =

14.0000 15.6000 16.2000 18.0000 16.5000 14.0000

>> plot(v)

se observa que aparece una nueva ventana conteniendo una grafica con el aspecto que muestrala figura 1.2. Puede observarse que en el eje vertical MATLAB ha representado los valores v1,v2, etc. mientras que en el horizontal aparece el subındice correspondiente.

Continuando con el ejemplo supongamos ahora que se conoce la hora a la que se realizo cadamedida y que deseamos que aparezca en el eje horizontal. Sea t = [4 8 12 16 20 24], el vectorque contiene las horas correspondientes a cada medicion contenida en v. Para crearlo escriba:

Page 12: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

12 PRACTICA 1. EL ENTORNO MATLAB

1 2 3 4 5 614

14.5

15

15.5

16

16.5

17

17.5

18

Figura 1.2: Grafica obtenida con la orden plot(v)

>> t= [ 4 8 12 16 20 24 ]

t =

4 8 12 16 20 24

El nuevo dibujo se obtiene mediante:

>> plot(t,v)

observe que se produce un cambio en la ventana, de forma que ahora se obtiene lo quemuestra la figura 1.3. Puede verse que el eje horizontal esta ahora marcado con las componentesdel vector t. Dicho de otro modo, ya no se esta representando las componentes vk frente a suındice k sino las componentes de v (vk) frente a las de t (tk) para k = 1, · · · , 6.

4 6 8 10 12 14 16 18 20 22 2414

14.5

15

15.5

16

16.5

17

17.5

18

Figura 1.3: Grafica obtenida mediante plot usando una variable para el eje horizontal y otrapara el vertical.

Puede ser interesante ahora anadir unos letreros indicativos de que es lo que se esta repre-sentando. Esto se consigue de manera simple con las ordenes siguientes:

>> xlabel(’hora’)

Page 13: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 13

>> ylabel(’temperatura’)

>> title(’Datos estacion meteorologica’)

1.5 Ejercicios para autoevaluacion

Con estos ejercicios se pretende verificar que ha comprendido bien las ideas presentadas en lospuntos anteriores.

1.5.1 Vectores y Matrices

Siga los pasos que se indican

1. Cree en MATLAB las tres variables siguientes:

H =

1 0 0 0 10 2 2 2 03 0 0 0 3

, p =

02468

10

, q =(

1 4 9 16 25 36)

2. Escriba en la ventana de ordenes las sentencias necesarias para sumar el elemento H3,1

con el p3. Compruebe que el resultado es el correcto.

3. Escriba en la ventana de ordenes las sentencias necesarias para asignar al elemento p2 elvalor -2. Compruebe que el resultado es el correcto.

4. Escriba la orden figure para que se abra una nueva ventana de graficos. Muestre en esaventana una grafica con los elementos de q en el eje horizontal y el logaritmo decimal delos elementos de q en el eje vertical.

5. Si dispone aun de 20 minutos o mas de tiempo puede realizar la siguiente parte (pero noborre las graficas anteriores). En caso contrario avise al profesor para ser evaluado.

1.5.2 Trazado de funciones

Procure no borrar las de ejercicios anteriores, para ello utilice la orden figure de modo que secreen nuevas ventanas que contengan las nuevas graficas. Se pretende representar graficamentela funcion y =sen(x) con x variando entre 0o y 360o. Para ello siga los pasos que se indican:

1. Cree un vector x cuyo primer elemento es x1 = 0, el siguiente x2 = 10, el siguiente x3 = 20,ası hasta llegar a la cantidad 360. Para no tener que hacerlo a mano utilice:

>> x=0:10:360

2. Calcule el vector y como el seno de x/180 ∗ 3.141592

3. Dibuje la grafica de y frente a x. Use previamente la orden figure para que la graficaaparezca en una ventana nueva y, de este modo, conservar la grafica del ejercicio anterior.

4. Si los resultados son los esperados pase al punto siguiente, en caso contrario revise sutrabajo

Page 14: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

14 PRACTICA 1. EL ENTORNO MATLAB

5. Para marcar los puntos individuales que componen la curva en color rojo utilice esta versionde plot: plot(x, y, ’r.’). Pruebe tambien con plot(x, y, ’rx-’) para tener marcasen forma de cruz unidas con lınea continua.

6. Pruebe a ver que sucede si el vector x contiene pocos puntos, por ejemplo mediantex=0:40:360. Recalcule y y represente sus valores frente a x.

1.6 Ejercicios finales

No realice esta parte si tiene alguna duda acerca de las anteriores.

1.6.1 Trazado de funciones II

Proceda a representar las siguientes funciones en los intervalos indicados. Procure no borrar lasde ejercicios anteriores, para ello utilice la orden figure de modo que se creen nuevas ventanasque contengan las nuevas graficas. En todos los casos ha de anadir tıtulos a las graficas paraque sean mas facilmente identificables. Elija adecuadamente el numero de puntos (numero decomponentes de x e y en el intervalo) para que la grafica muestre una curva nıtida.

Apartado Funcion Intervalo Tıtulo1 y = sen(x/2) x ∈ [0, 10] radianes Frecuencia mitad2 y = sen(x)+ sen( 2x ) x ∈ [0, 10] radianes Dos frecuencias3 y =| sen(x) | x ∈ [0, 10] radianes Valor absoluto del seno

Page 15: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Practica 2

Sentencias de control del programa

2.1 Introduccion

Los calculos que son necesarios realizar para obtener un determinado resultado a menudo re-quieren tomas de decision e iteraciones. Por este motivo los lenguajes de programacion incluyensentencias que permiten realizar bifurcaciones y bucles. En esta practica se van a realizar prue-bas con las sentencias que MATLAB pone a disposicion del programador para llevar a cabo elcontrol del flujo del programa.

2.1.1 Objetivos

Se pretende que el alumno:

• Aprenda a realizar programas en MATLAB y guardarlos en archivos M.

• Experimente con programas que contienen bifurcaciones y bubles.

2.1.2 Requisitos

Se requiere que el alumno acuda a la sesion practica con una copia de estas notas y con algundocumento identificacion: DNI, permiso de conduccion, tarjeta de la universidad, pasaporte,etc.

2.1.3 Desarrollo de la practica

El alumno debera:

• Leer estas notas antes de la sesion practica, despejando cualquier duda mediante consultaa sus apuntes de clase.

• Escribir en el entorno MATLAB todos los ejemplos que se indican en los puntos siguientes,contemplando luego los resultados. Este proceso ha de realizarse de forma crıtica, es decir,el alumno ha de dedicar cierto tiempo a pensar porque se obtienen esos resultados y nootros. El alumno debe ser capaz de predecir el resultado de las ordenes, de este modoaprendera el uso de la herramienta MATLAB

• Escribir los programas en los archivos que se indican en todos los apartados incluyendo losejercicios finales. Compruebe siempre que un ejercicio funciona antes de pasar al siguiente.

Es imprescindible que el alumno descubra por sı mismo sus errores y aprenda a corregirlos.No sirve de nada preguntar al profesor o al companero en cuanto surge la menor duda o dificultad.

15

Page 16: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

16 PRACTICA 2. SENTENCIAS DE CONTROL DEL PROGRAMA

2.2 Archivos M

Una de las caracterısticas del entorno MATLAB es que permite que las ordenes puedan sertomadas de un archivo en lugar de ser introducidas por el teclado.

La idea es simple: si el usuario va a repetir a menudo un conjunto de ordenes puede escribirlasen un archivo de texto. Posteriormente le indica a MATLAB que lea dicho archivo ejecutandolas ordenes una por una. El efecto es el mismo que si el usuario hubiese escrito las ordenes enel entorno de MATLAB. Ahora bien, puesto que el archivo de texto se puede guardar en discono es preciso volver a escribir las ordenes nunca mas. Cada vez que el usuario desee ejecutarde nuevo el conjunto de ordenes podra indicar nuevamente a MATLAB que lea el archivo. Estosupone un gran ahorro de tiempo en muchos casos.

Es costumbre dar a los archivos que contienen ordenes de MATLAB una extension prede-terminada que los diferencia de otros archivos de texto. Esta extension es .m. Por ejemplo si unarchivo contiene las ordenes para dibujar un vector se le puede llamar dibuvector.m.

Los archivos que contienen ordenes de MATLAB seran llamados desde ahora archivos M.Para escribir el archivo de texto se puede usar cualquier programa como la libreta de notas, eleditor de MS-DOS, etc. MATLAB incorpora su propio programa para redaccion llamado M file

Editor, o sea redactor de archivos M.

A modo de ejemplo considere las siguientes ordenes de MATLAB que convierten una cantidaden pesetas a euros.

pesetas=input(’Escriba la cantidad en pesetas : ’)

euros = pesetas/166.386

Supongamos que se introduce este texto dentro de un archivo al cual se le da el nombrede cpe.m (el nombre viene de Convertidor de Pesetas a Euros). Este archivo debe estar en lacarpeta de trabajo de MATLAB1. La forma de indicar a MATLAB que utilice el archivo essimple: se escribe su nombre en el entorno MATLAB. Se obtiene el resultado que se muestra acontinuacion.

>> cpe

Escriba la cantidad en pesetas : 1000

pesetas =

1000

euros =

6.0101

Este ejemplo pone de manifiesto que los programas en MATLAB no son sino listas de ordenesque MATLAB interpreta tomandolas una a una de un archivo de texto. Recuerde siempre queel archivo de texto ha de estar en la misma carpeta que MATLAB este utilizando como carpetade trabajo.

Se habra observado que la orden input sirve para que el programa lea los datos que necesita.En el ejemplo anterior ha servido para obtener un valor en pesetas que se ha convertido luegoa euros. Ademas esta orden presenta en pantalla un texto que invita al usuario a introducir losdatos.

1Es muy probable que dicha carpeta se encuentre protegida contra escritura. En tal caso tendra que usar

una carpeta alternativa, por ejemplo la carpeta ’Mis Documentos’. En tal caso tendra que cambiar la carpeta de

trabajo para que pase a ser la carpeta ’Mis Documentos’. Si utiliza la version 6.1 o superior bastara con cambiar

esta carpeta en el cuadro ’Current Directory’ que se encuentra arriba a la derecha en la ventana de ordenes.

Page 17: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 17

Utilice el redactor de MATLAB (en el menu File→ New →M −File) para crear el archivode texto cpe.m. Use luego varias veces el programa anterior utilizando cada vez valores distintosy compruebe que el resultado es el correcto.

Cada vez que se escribe cpe en la ventana de ordenes de MATLAB se ejecutan las ordenesque el archivo cpe.m contiene. Se dice entonces que se esta ejecutando el programa cpe.

Como segundo ejemplo se va a realizar un programa que convierta los grados sexagesimalesen radianes. La formula matematica que se ha de emplear es radianes = grados · π/180.

Escriba el siguiente texto dentro de un archivo de nombre grarad.m dentro de la carpeta detrabajo.

angrados=input(’Escriba el angulo en grados sexagesimales : ’)

anradianes = angrados*3.1415/180;

disp(’El angulo en radianes es’)

anradianes

Para verificar el buen funcionamiento del programa se pueden hacer unas cuantas pruebascomo la que se muestra a continuacion:

>> grarad

Escriba el angulo en grados sexagesimales : 90

angrados =

90

El angulo en radianes es

anradianes =

1.5708

Nota: si el archivo de texto no se graba en la carpeta de MATLAB no podra ser ejecutado.Para comprobar los archivos que tiene en la carpeta de MATLAB pruebe la orden what. Lacarpeta de windows que MATLAB usa puede conocerse mediante la orden pwd.

2.2.1 Legibilidad

Frecuentemente el usuario de MATLAB escribe archivos M que le resultan de utilidad. Pasadoun tiempo sin usar un archivo es posible que uno olvide que tarea realiza exactamente. En talcaso es necesario mirar el contenido del archivo y repasar su contenido. Es en este punto cuandose agradece (o se echa en falta) una buena practica de programacion que haga que el codigo sealegible.

Los siguientes consejos ayudaran sin duda al usuario de MATLAB a conseguir programaslegibles.

• Elegir nombres de variables indicativos de lo que representan.

• No usar una misma variable para representar mas que una cosa.

• Incluir comentarios en el codigo para ayudar a seguir la secuencia del programa. Loscomentarios son lıneas que comienzan por el signo %. El programa MATLAB no hacecaso de tales lıneas, pero son de ayuda para recordar lo que se ha programado.

• Dividir el codigo en trozos, de forma tal que sea posible abarcar cada trozo de un vistazo enuna ventana mediana. La division no ha de ser arbitraria, sino que cada trozo debe tenerun cometido claro. Normalmente los diagramas de flujo desarrollados con anterioridad ala codificacion indican como realizar esta division.

Page 18: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

18 PRACTICA 2. SENTENCIAS DE CONTROL DEL PROGRAMA

A pesar de haber dado estos consejos hemos de ser conscientes de que la buena programacionsolo se logra mediante un proceso de aprendizaje por prueba y error.

2.3 La bifurcacion

Ya se ha visto en los diagramas de flujo realizados en las clases teoricas que las bifurcaciones sonimprescindibles para llevar a cabo ciertas tareas. En MATLAB es posible realizar la bifurcacionbasica mediante la sentencia if-else. La forma de uso se muestra en el codigo que aparece acontinuacion.

if condicion

...

sentencias bloque S

...

else

...

sentencias bloque N

...

end

En esta construccion, la condicion es una expresion que da como resultado un valor logico(por ejemplo x > 2) que puede ser verdadero o falso. En caso de que la evaluacion de la expresionarroje un resultado verdadero se procede a ejecutar las sentencias del bloque S (bloque sı). Encaso contrario se ejecutan las sentencias del bloque N (bloque no). Al terminar uno u otrobloque se pasa a las sentencias posteriores a end.

De la explicacion anterior debe resultar evidente que al usar la bifurcacion se ejecutan lassentencias S o las N pero no ambas. Para que quede mas claro considere el diagrama de flujode la figura 2.1 a) que corresponde a una bifurcacion generica. Dentro de los bloques S y N sepuede colocar cualquier conjunto de sentencias, incluyendo nuevas bifurcaciones como se veramas adelante.

A fin de aclarar todo esto considere un ejemplo sencillo como el siguiente trozo de codigo:

x=input(’Introduzca el valor de x ’)

if x < 0,

va = -x;

else

va=x;

end

disp(El valor absoluto es)

va

Como puede ver en el bloque S se realiza la operacion va ← −x mientras que el bloque Ncontiene la operacion va ← x. Se consigue de este modo que va sea el valor absoluto del valorque se ha leıdo x. Este programa serıa de utilidad en caso de que no dispusiesemos en MATLABde otros medios para calcular el valor absoluto.

Escriba el texto dentro de un archivo de nombre valorabs.m dentro de la carpeta de trabajoy compruebe su funcionamiento. No pase al siguiente ejercicio sin antes estar totalmente segurodel buen funcionamiento del programa.

El siguiente ejemplo de bifurcacion tambien es muy simple y sirve para calcular como seranlas raıces de una ecuacion.

Page 19: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 19

inicio

¿ x < 0 ? sí no

fin

a) b)

Escribir va

Leer x

va x va -x

x Variable real Dato

va Variable real Resultado. Valor

absoluto de x

condición sí no

Bloque N Bloque S

Figura 2.1: a) Diagrama de flujo correspondiente a una bifurcacion generica. b) Diagrama deflujo correspondiente al ejemplo de bifurcacion

a=input(’?Coeficiente a?’) %coeficientes de a x^2 + b x + c = 0

b=input(’?Coeficiente b?’)

c=input(’?Coeficiente c?’)

if b*b-4*a*c < 0,

disp(’Las raıces son complejas’)

else

disp(’Las raıces son reales’)

end

Es facil ver que este programa toma como datos los coeficientes a, b y c de una ecuacionde segundo grado ax2 + bx + c = 0, los analiza y escribe en la pantalla si las raıces (solucionesde la ecuacion) seran reales o complejas (con parte imaginaria). Antes de avanzar escriba estassentencias en un archivo de nombre raices2g.m y compruebe su funcionamiento.

2.3.1 Problema ejemplo con bifurcaciones

Se desea leer por teclado dos valores x e y que representan las coordenadas de un punto en elplano P=(x, y). Se quiere que el programa indique el numero del cuadrante al que P pertenece.Suponga que ni x ni y valen cero.

Recuerde que el primer cuadrante se caracteriza porque ambas coordenadas son positivas,el segundo cuadrante esta a la izquierda del primero y se caracteriza por tener abscisas negati-vas y ordenadas positivas. El tercer cuadrante tiene ambas coordenadas negativas y el cuartocorresponde a abscisas positivas y ordenadas negativas.

En primer lugar intente dibujar un diagrama de flujo. Posteriormente escriba el programaque se presenta grabandolo en un archivo de texto de nombre cuadrante.m.

x=input(’Introduzca la coordenada x: ’);

Page 20: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

20 PRACTICA 2. SENTENCIAS DE CONTROL DEL PROGRAMA

y=input(’Introduzca la coordenada y: ’);

if x>0,

if y>0,

resultado=1

else

resultado=4

end

else

if y>0,

resultado=2

else

resultado=3

end

end

Antes de ejecutarlo decida si funciona o no simplemente mirando el codigo. Realice poste-riormente pruebas con el programa. Compruebe que el resultado que el programa proporcionaes adecuado para distintas combinaciones de x e y.

2.4 El bucle ”mientras”

El bucle ”hacer mientras que la condicion sea cierta” es una estructura cıclica con salida encabeza. Esta estructura repetitiva se construye en MATLAB mediante un conjunto de lıneas decodigo que tienen la forma siguiente:

while condicion

sentencias del cuerpo del bucle

end

En la figura 2.2 a) se muestra el diagrama de flujo correspondiente al bucle. La condiciones una expresion que da como resultado un valor logico, por ejemplo x > 2. El cuerpo del bucleson sentencias cualesquiera.

Examinando el diagrama de flujo de la figura 2.2 a) es facil deducir que mientras la condicionse cumpla se repetira el bucle una y otra vez. Es decir, si al evaluar la expresion logica de lacondicion se obtiene un resultado verdadero se pasa a ejecutar el cuerpo del bucle, en casocontrario se termina el bucle.

Como ejemplo sencillo considere el siguiente trozo de codigo:

x=0; suma=0;

while x<10,

suma = suma + x;

x = x+2;

end

suma

Es facil adivinar que ocurre al ejecutar este programa, sobre todo si se dibuja el diagramade flujo equivalente (vease figura 2.2 b).

Para mejorar la legibilidad de los programas es muy aconsejable incluir comentarios y ordenarla apariencia en la pantalla de las sentencias. De este modo el ejemplo en cuestion resulta masfacil de interpretar.

Page 21: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 21

¿ condición ?

cuerpo

no

inicio

Escribir suma

¿ x < 10 ?

Iniciar x a 0

y suma a 0

suma suma + x

no

x x + 2

fin

a) b)

x Variable entera

suma Variable entera

Contador de 0 a 10

Suma de los valores de x

Figura 2.2: a) Diagrama de flujo correspondiente a un bucle generico del tipo ”repetir mientrasla condicion sea cierta”. b) Diagrama de flujo correspondiente al ejemplo de uso del bucle”mientras”

x=0; % variable contador para el bucle

suma=0; % variable suma parcial

while x<10, % condicion de salida

suma = suma + x; % suma parcial

x = x+2; % actualizacion

end

suma % escritura del resultado

Escriba el texto anterior en un archivo de nombre sumapares.m y comprueba su funcionamiento.

Observe que las ordenes que terminan en punto y coma se realizan ”silenciosamente”, esdecir, sin que aparezca nada en la pantalla. De este modo se consigue en el programa anteriorque solo se escriba el resultado final. Pruebe a ejecutar el programa eliminando alternativamentetodos los signos punto y coma (uno cada vez) y observe los resultados.

Lo normal es que los programas y funciones no escriban los calculos intermedios en la pantalla.Esto es ası para evitar que la pantalla se llene de informacion no deseada. Por tanto hay queacostumbrarse desde este momento a usar el signo de punto y coma al final de las sentencias.

2.4.1 Problema ejemplo con bucle ”mientras”

El programa tendra un numero secreto que el usuario debera adivinar mediante pruebas. Su-pongamos que el numero es el 456. El programa debe preguntar al usuario un numero, si elnumero es el correcto el programa presentara en pantalla un mensaje de felicitacion y termina.En caso contrario el programa vuelve a preguntar un numero.

En primer lugar dibuje un diagrama de flujo que permita resolver esta tarea. Despues analiceel programa siguiente:

Page 22: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

22 PRACTICA 2. SENTENCIAS DE CONTROL DEL PROGRAMA

x=456; %numero secreto

nro=input(’Dame un numero: ’); %peticion de dato

while nro ~= x, %condicion de salida

nro=input(’Intentalo de nuevo. Dame un numero: ’);

end

disp(’Acertaste’) %mensaje de enhorabuena

Guarde este programa en un archivo de nombre adivina.m y pruebelo varias veces paracomprobar su buen funcionamiento.

2.5 Ejercicios adicionales

Se proponen para resolver una serie de problemas independientes cuyos enunciados se muestrana continuacion. Las sentencias que resuelven cada tarea han de guardarse en archivos M. Useunicamente el bucle mientras y operaciones elementales.

Nombre delarchivo M Enunciado del problema a resolver

temp.m Se han de introducir en un vector v unas medidas de temperatura tomadas porun globo sonda. El programa preguntara al usuario una a una el valor de cadatemperatura. Para finalizar el usuario escribira una temperatura mayor que 1000.El programa ha de interpretar la temperatura mayor que 1000 no como parte delvector sino como indicacion de que ha de finalizar la lectura. Posteriormenteel programa dibujara las temperaturas leıdas en una grafica mediante la ordenplot. Ademas debera poner rotulos a los ejes y un tıtulo a la grafica.

vley.m Se ha de generar un vector v cuyas componentes siguen la ley: vk = k2 − 20. Elvector ha de tener N componentes; es decir, k variara entre 1 y N . El numeroN sera introducido por teclado al comienzo del programa. Suponga que siempresera un numero entero y que N > 1. Ademas de calcular las componentes de vel programa ha de dibujar una grafica de vk frente a k; es decir vk en el eje deordenadas (eje vertical) y k en el eje de abscisas (horizontal). Ademas deberaponer rotulos a los ejes y un tıtulo a la grafica.

senx2.m Se han de crear dos vectores x e y con 250 componentes dadas porxk = −9 + 0.1 · k y yk =sen(0.4 · (xk)

2). Posteriormente el programa ha demostrar la grafica de y (ordenadas) frente a x (abscisas). Ademas debera ponerrotulos a los ejes y un tıtulo a la grafica.

2.6 Evaluacion

La evaluacion comenzara 20 minutos antes del fin de la clase. En ese momento el profesorcomprobara la validez de cualquiera de los programas que haya generado a lo largo de la practica.Para ello escribira el profesor le pedira que escriba el nombre del archivo (.m) correspondientey que pruebe el programa con los datos que le proporcione.

Ademas de estas pruebas de los programas el profesor podra preguntar al alumno acerca decualquier aspecto de dichos programas para comprobar que ha asimilado los conceptos funda-mentales.

Page 23: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Practica 3

Sentencias de control II

3.1 Objetivos

En esta tercera practica se pretende que el alumno:

• Aprenda el uso basico del bucle ”para” mediante la sentencia for de MATLAB.

• Experimente con programas que contienen esta estructura cıclica.

Para ello debera probar todos los ejercicios y ejemplos propuestos hasta que se convenza desu buen funcionamiento. No avance al siguiente punto hasta haber superado totalmente cadaejemplo o ejercicio.

3.2 La estructura cıclica ”para”

En muchas situaciones es preciso repetir una tarea un numero conocido de veces, por ejemplopara elevar un numero a una potencia dada. En esas situaciones se puede construir un buclecon un contador dando lugar al llamado bucle ”para”.

El bucle ”para” conlleva realizar una tarea varias veces. En cada pasada o repeticion elcontador del bucle se modifica y se comprueba que no se ha sobrepasado el lımite. Estos buclesse realizan facilmente en MATLAB con el uso de la sentencia for.

Los bucles que utilizan for se codifican en MATLAB del siguiente modo:

for contador = valorinicial:valorfinal,

sentencias del cuerpo del bucle

end

En la figura 3.1 a) se muestra el diagrama de flujo correspondiente al bucle anterior. En else observa que contador es una variable que sirve para controlar el bucle. Esta variable tomainicialmente el valor especificado por valorinicial. La variable se incrementa al final de cadapase o repeticion en una unidad. La condicion de salida del bucle consiste en que el contadorsobrepase el lımite fijado por el valor valorfinal.

A fin de aclarar las ideas se muestra el siguiente ejemplo de bucle usando la sentencia for.

for k = 1:6,

k

end

23

Page 24: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

24 PRACTICA 3. SENTENCIAS DE CONTROL II

¿ contador dentro

de límites?

cuerpo

no

inicio

¿ k 6 ?

Iniciar k a 1

no

k k + 1

fin

a) b)

k Variable entera Contador de 1 a 6

Asignar al

contador el valor

inicial

Incrementar el

contador

Escribir k

Figura 3.1: a) Diagrama de flujo correspondiente a un bucle generico del tipo ”para”. b)Diagrama de flujo correspondiente al ejemplo de uso del bucle ”para”

En la figura 3.1 b) se presenta el diagrama de flujo correspondiente a este ejemplo. Es facilver que el bucle no realiza calculo alguno, simplemente escribe en la pantalla los valores sucesivosque va adquiriendo la variable k.

Este ejemplo revela porque se le llama bucle ”para”. Se observa que para cada valor de k

entre 1 y 6 se escribe k en la pantalla, que es lo que literalmente dice la sentencia for k=1:6,.

Los valores iniciales y finales no necesariamente son constantes, pueden ser variables comoen el programa siguiente .

% valores inicial y final para bucle

v_inicial = input(’Introduce valor inicial ’)

v_final = input(’Introduce valor final ’)

% bucle

for k = v_inicial:v_final,

k %escritura en pantalla

end

Ademas, el incremento de la variable contador puede ser distinto de uno. Por ejemplo pararealizar una cuenta atras (mediante decremento del contador) o para saltar de dos en dos, etc.La forma de indicar un incremento en la sentencia for es muy simple:

for contador = valorinicial:incremento:valorfinal,

sentencias del cuerpo del bucle

end

Page 25: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 25

A modo de ejemplo considere el programa:

for k=1:2:20,

k

end

Observara al ejecutarlo que se escriben en pantalla los numeros k desde el 1 al 20 avanzando dedos en dos.

El bucle ”para” es muy util en el trazado de graficas. Por ejemplo, para dibujar y = x2 − 5con x ∈ [−3, 3] se puede utilizar un bucle que calcule un vector vx = [−3, − 2.9, − 2.8, · · · , 3]de abscisas y otro vector vy con sus ordenadas correspondientes: vyk = (vxk)

2 − 5.Copie las sentencias siguientes en un archivo de nombre graf1.m

for k=1:101,

vx(k)= -3 + 6*(k-1)/100;

vy(k)= vx(k)*vx(k) - 5;

end

plot(vx, vy)

title(’graf1’)

Ejecute el programa escribiendo en la ventana de ordenes graf1. Aparecera una ventananueva conteniendo la grafica. Se debe observar que la forma de la curva obtenida en la pantallasea la esperada.

Puede ser util anadirle a la grafica una rejilla o cuadriculado que facilite su inspeccion. Paraello basta con utilizar la orden de MATLAB grid. Puede escribirla en la ventana de ordenes encualquier momento o incluirla al final del programa en el archivo graf1.m.

Inspeccione ahora (mediante whos o por cualquier otro metodo que conciba) las componentesdel vector vx. Fıjese que se han creado 101 componentes que van desde el -3 hasta el 3. Comoejercicio escriba un programa de MATLAB que sirva para trazar la grafica de y =sen(x3) conx ∈ [−2, 2]. La grafica ha de constar de 501 puntos. Guarde el programa en un archivo denombre graf2.m.

En la figura 3.2 se muestra el aspecto que debe tener la grafica para este ejercicio. Si obtieneen su pantalla un resultado que no es el correcto debe repasar su programa.

3.3 Familias de curvas

Se ha mostrado en practicas anteriores la manera de crear en MALAB una grafica de una funcioncualquiera y =f(x). En este apartado se va a mostrar como dibujar dos curvas en una mismagrafica, lo cual permitira trazar familias de curvas. Escriba en MATLAB las sentencias que sevan a ir indicando y compruebe los resultados obtenidos.

Recuerde que la sentencia basica para el trazado de graficas es plot. Para comenzar sedibujara la curva de y = x2 con un programa parecido al del apartado anterior:

for k=1:21,

vx(k)= -3 + 6*(k-1)/20;

vy(k)= vx(k)*vx(k);

end

plot(vx, vy)

A continuacion se va a anadir otra curva con otro color dentro de la misma grafica. Paraque no se borre la curva anterior se ha de escribir la orden

Page 26: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

26 PRACTICA 3. SENTENCIAS DE CONTROL II

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1graf2

Figura 3.2: Grafica correspondiente al programa graf2.m.

>> hold on

Current plot held

Ahora se puede escribir lo siguiente

>> plot(vx, -vy*0.5, ’r’)

Aparecera una nueva curva en color rojo, las abscisas son las mismas, pero las ordenadasestan multiplicadas por −0.5.

Este ejemplo pone de manifiesto que la orden plot admite varios argumentos. Merece lapena hacer alguna prueba para comprender mejor el modo de funcionamiento. Escriba close

all para cerrar todas las ventanas graficas y a continuacion pruebe cada una de las sentenciasque se indican, analizando en cada caso la grafica obtenida.

1. plot(vx, vy, ’r’). La curva se dibuja en color rojo, pues el argumento ’r’ indica rojo(en ingles red).

2. plot(vx, vy, ’rx’). Los puntos que forman la curva no se unen. En lugar de esoaparecen marcados con una cruz roja.

3. plot(vx, vy, ’b’). La curva es azul, pues el argumento ’b’ indica azul (en ingles blue).

4. plot(vx, vy, ’b:’). La curva es azul y aparece dibujada con trazo punteado.

5. plot(vx, vy, ’bo’). Las marcas son cırculos azules.

6. plot(vx, vy, ’bo’); hold; plot(vx, vy, ’g’); hold. Las marcas son cırculos azulesy ademas se unen los puntos con una lınea verde.

Terminado este inciso se pasa a describir la forma de presentar familias de curvas. En primerlugar se ha de crear una grafica vacıa, que luego se llenara. Para ello basta con escribir la ordenfigure. En segundo lugar hay que indicar a MATLAB que las distintas curvas han de dibujarseunas encima de otras, para ello se usa hold on. El tercer paso consiste en dibujar las distintascurvas de la familia. Al terminar es conveniente escribir hold off para desactivar el modo demezcla de curvas.

Page 27: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 27

Experimente con el siguiente ejemplo el uso de hold on y hold off. Escriba las sentenciasuna a una y observe en la grafica el resultado.

>> figure

>> hold on

>> plot([1 2], [ 0 3], ’r’)

>> plot([1 2], [ 1 4], ’g’)

>> hold off

>> plot([1 2], [ -1 -4], ’b’)

Habra observado que las graficas roja y verde aparecen mezcladas en la misma ventanamientras que la grafica azul hace desaparecer las dos anteriores. Con este ejemplo debe quedarmuy claro como funcionan las ordenes hold on y hold off. Si no lo ha comprendido escribaclose all y repita de nuevo el ejemplo mirando en cada paso el efecto en la ventana de graficas.

3.3.1 Familia de parabolas

Se ha de dibujar una parabola del tipo y = ax2 para diferentes valores de a, siendo siemprex ∈ [−3, 3]. El diagrama de flujo de la figura 3.3 indica los pasos a realizar y el resultadoesperado.

El trabajo del alumno consiste en escribir un programa en MATLAB que lleve a cabo latarea indicada por el diagrama. Como puede verse, de todas las curvas de la familia solo se hande dibujar las correspondientes a a = 0.1, a = 0.3, a = 0.5, a = 0.7 y a = 0.9. Guarde esteprograma con el nombre fampar.m en la carpeta de trabajo.

En caso de que encuentre alguna dificultad debe analizar el funcionamiento del programa deforma modular, comprobando en primer lugar que el bucle interior es correcto antes de pasar albucle exterior.

3.4 Matrices

Los bucles ”para” son muy adecuados en problemas con vectores y matrices. Como ilustracionobserve el siguiente programa de MATLAB:

for k=1:7,

for j=1:3,

a(k,j)=k^2-j;

end

end

a

Intente dibujar el diagrama de flujo correspondiente a las operaciones que realiza. Una vezconseguido esto escriba en un archivo de nombre matriza.m las sentencias anteriores. Ejecuteluego el programa, observara que el programa calcula y escribe una matriz A de siete filas y trescolumnas cuyo elemento generico es akj = k2 − j. Si escribe la orden whos podra comprobarque la variable a existe y tiene las dimensiones correctas.

Modifique el programa anterior para que se calcule (calcular solo, no escribir) una matriz Bcon numero de filas m = 20 y numero de columnas n = 30 y con elemento generico:

bkj = sen(k/7) · cos(j/7)

Guarde el programa con el nombre sencos.m. Ejecutelo y compruebe mediante la ordenwhos que la matriz ha sido creada con las dimensiones correctas. Una vez hecho esto escriba en

Page 28: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

28 PRACTICA 3. SENTENCIAS DE CONTROL II

¿ k 101 ?

no

iniciar índice k

al valor 1

k <-- k+1

¿ a 0.9 ?

no

a <-- a + 0.2

iniciar parámetro

a al valor 0.1

Calcular la abscisa v x k como

-3+6·(k-1)/100 y la ordenada

v y k como a·(v x

k ) 2

Dibujar vector v y

frente a v x

Inicio cálculo y dibujo de

familia de parábolas

Fin cálculo y dibujo de

familia de parábolas

Preparar ventana de

gráficos

Calcular vectores v x y

v y

Inicio cálculo de vectores v x

y v y

Fin cálculo de vectores v x y

v y

Objeto Nombre Tipo Valor

Parametro de la familia de curvas y = ax2 a real variableVector de abscisas vx real variableVector de ordenadas vy real variable

Indice para recorrer vectores (varıa entre 1 y 101) k entera variableComponente k-esima de vx (esta en el intervalo[−3, 3])

vxk real variable

Componente k-esima de vy, calculada como a(vxk)2 vxk real variable

−3 −2 −1 0 1 2 30

1

2

3

4

5

6

7

8

9

Figura 3.3: Diagrama de flujo para el trazado de una familia de parabolas de la forma y = ax2

(parte superior), tabla de objetos de dicho diagrama (parte central) y grafica resultante (parteinferior).

Page 29: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 29

05

1015

2025

30

0

5

10

15

20

−1

−0.5

0

0.5

1

Figura 3.4: Superficie formada por los elementos de bkj = sen(k/7) · cos(j/7) tomados comoalturas (eje z) frente a sus ındices k y j

la ventana de ordenes de MATLAB la orden mesh(b). El resultado ha de ser similar al mostradoen la figura 3.4.

Como puede verse, la orden mesh es parecida a plot, pero permite trazar superficies. Lascomponentes de la matriz se interpretan como alturas (eje z), los subındices k y j son interpre-tados como la posicion sobre los ejes y y x respectivamente.

Gracias a esta orden sera posible trazar de forma comoda superficies correspondientes afunciones z = f(x, y) siendo f : IR2 → IR como por ejemplo paraboloides del tipo z = ax2 + by2.

A fin de aclarar el uso de mesh considere el problema de trazar la superficie de la funcionz = x + 0.5 · y que es un plano que pasa por el origen. Escriba el siguiente programa en unarchivo de nombre plano.m y ejecutelo para comprobar su funcionamiento.

for k=1:15,

for j=1:30,

z(k,j) = k + 0.5*j;

end

end

mesh(z);

xlabel(’j’);

ylabel(’k’);

title(’Superficie plana’);

Si llegado a este punto ha comprendido perfectamente los programas realizados pase a realizarlos ejercicios adicionales que se indican a continuacion.

3.5 Ejercicios adicionales

Se desea resolver una serie de problemas independientes cuyos enunciados se muestran en latabla adjunta. Las sentencias que resuelven cada tarea han de guardarse en archivos M con elnombre que se indica en cada caso. Antes de pasar al problema siguiente asegurese que el archivoque ha creado funciona perfectamente y resuelve el problema planteado. Si fuese necesario useclear all de forma adecuada para limpiar las variables al pasar de un ejercicio a otro.

Page 30: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

30 PRACTICA 3. SENTENCIAS DE CONTROL II

Nombre para elarchivo M

Enunciado del problema a resolver

expo.m Se han de generar dos vectores x e y. El vector x tiene como compo-nentes: xk = 0.01 + k/100 con k = 1, 2, · · · , 500. Las componentes deyk cumplen que yk = (xk)

2 · e−xk .Para calcular la exponencial utilice la funcion exp().El programa finalmente ha de dibujar la grafica de y frente a x. Anadauna rejilla con grid y rotulos en los ejes y un tıtulo a la grafica.

cuadr.m Calcule la matriz D de 26 filas y 40 columnas cuyo elemento generico esdkj = ((k − 13)/10)2 + ((j − 20)/15)2. Dibuje luego la superficie corres-pondiente usando mesh.

espi.m Una curva en coordenadas polares puede trazarse facilmente obteniendodos vectores vx y vy que luego se dibujan uno frente al otro. Por ejem-plo la espiral r(θ) = θ/2 con θ ∈ [0, 4π] puede dibujarse sabiendo quex = r(θ)cos(θ) y que y = r(θ)sen(θ).Considere un vector de angulos va tal que vak = 0.2·k con k = 1, · · · , 63.A partir de el calcule un vector de distancias polares vr tal quevrk = r(vak) = vak/2, posteriormente usando va y vr calcule dos vec-tores vx y vy tales que vxk = vrk · cos(vak) y vyk = vrk · sen(vak).Dibuje finalmente la espiral mediante la orden plot(vx, vy, ’rx-’).Anada rotulos en los ejes, un tıtulo en la grafica y una rejilla.

card.m Proceda de manera parecida al ejercicio anterior pero dibujando la car-dioide r(θ) = 1− cos(θ) con θ ∈ [0, 2π].

Page 31: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Practica 4

Funciones

4.1 Introduccion

Esta practica servira para ilustrar el concepto de funcion y su uso dentro del entorno del pro-grama MATLAB.

4.1.1 Objetivos

Se pretende que el alumno:

• Aprenda el uso basico de las funciones

• Experimente con programas que hacen uso de funciones

• Realice sus propias funciones que le sirvan para resolver partes de un problema mayor

4.1.2 Requisitos

Se requiere que el alumno acuda a la sesion practica con una copia de estas notas y con algundocumento identificacion: DNI, permiso de conduccion, tarjeta de la universidad, pasaporte,etc.

El trabajo de evaluacion requiere haber realizado previamente varios diagramas de flujo comose explica mas adelante. El alumno debe acudir a la practica con el material que haya obtenidocomo fruto de su trabajo personal. En particular estudie y analice el diagrama de flujo de lafigura 4.2 y realice los diagramas de flujo de los modulos que faltan (haciendo uso de funciones).

4.1.3 Desarrollo de la practica

El alumno debera:

• Leer estas notas antes de la sesion practica, despejando cualquier duda mediante consultaa sus apuntes de clase.

• Escribir los diagramas de flujo de las funciones que son necesarias para el ejercicio final.

• Escribir durante la sesion en el entorno MATLAB todos los ejemplos que se indican enlos puntos siguientes, contemplando luego los resultados. Este proceso ha de realizarsede forma crıtica, es decir, el alumno ha de dedicar cierto tiempo a pensar por que seobtienen esos resultados y no otros. El alumno debe ser capaz de predecir el resultado delas ordenes, de este modo aprendera el uso de la herramienta MATLAB.

31

Page 32: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

32 PRACTICA 4. FUNCIONES

• Codificar el programa del ejercicio final a partir de los diagramas de flujo realizados.

• Comprobar el buen funcionamiento del programa del ejercicio final.

Es imprescindible que el alumno descubra por sı mismo sus errores y aprenda a corregirlos.No sirve de nada preguntar al profesor o al companero en cuanto surge la menor duda o dificultad.

4.2 Funciones

Una funcion es un conjunto de ordenes que lleva a cabo una tarea precisa. La funcion es utilizadadentro de un programa como si de una orden se tratara. La funcion puede calcular resultadosutilizando los datos que se le suministran explıcitamente.

Un ejemplo de funcion es el seno (sin). Observe que cumple las condiciones que se hanimpuesto:

• Es un conjunto de ordenes (aunque no podamos verlas).

• Realiza una tarea concreta consistente en calcular el seno del numero indicado.

• Calcula resultados a partir de datos suministrados (considere a modo de ejemplo la sen-tencia y=sin(1.5)).

Ademas de las funciones existentes en MATLAB hay mecanismos para que el usuario escribafunciones nuevas. Para ello solo tiene que preparar en un archivo de texto las ordenes de MAT-LAB que realizan un determinado calculo y posteriormente anadir una cabecera que permita aesas ordenes trabajar como debe hacerlo una funcion.

Se va a ilustrar el procedimiento con un ejemplo. Suponga que se necesita una funcion quecalcule el factorial de un numero dado n. Se comienza disenando un diagrama de flujo tal ycomo el que se muestra a continuacion

Objeto Nombre Tipo Valor

dato n entero variable

resultado factorial entero variable

contador de 2 a n factor entero variable

variable auxiliar,producto parcial

producto entero variable

inicio

¿factor n?

Iniciar producto a 1

y factor a 2

no

factor factor + 1

fin

producto producto·factor

factorial producto

A partir de dicho diagrama se pasa a la codificacion en MATLAB, tarea que resulta simplepues basta con escribir en un archivo las ordenes:

Page 33: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 33

inicio del cálculo de factorial como

mi_fact(n)

¿factor n?

Iniciar producto a 1

y factor a 2

no

factor factor + 1

fin del cálculo de factorial como

mi_fact(n)

producto producto·factor

factorial producto

Objeto Nombre Tipo Valor

argumento n entero variable

resultado n! factorial entero variable

contador de 2 a n factor entero variable

variable auxiliar,producto parcial

producto entero variable

inicio del cálculo de xelevay como

potencia(x,y)

¿contador<y?

Iniciar producto a 1

y contador a 0

no

contador contador+1

fin del cálculo de xelevay como

potencia(x,y)

producto producto·x

xelevay producto

Objeto Nombre Tipo Valor

argumento, base x entero variable

argumento, expo-nente

y entero variable

resultado, xy xelevay entero variable

contador de 0 a n-1

contador entero variable

variable auxiliar,producto parcial

producto entero variable

Figura 4.1: Diagramas de flujo de las funciones mi fact y potencia.

Page 34: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

34 PRACTICA 4. FUNCIONES

producto=1; % se inicia el producto a uno

for factor=2:n, % para cada factor entre 2 y n

producto = producto*factor; % se obtiene el nuevo valor del producto

% multiplicando lo que valıa antes por

end % el factor actual

factorial = producto; %el resultado es el producto obtenido

y con esto se tiene resuelto parte del problema. Para utilizar este trozo de codigo basta conescribir el nombre del archivo en el que se ha guardado (utilice facto.m). Previamente hay quedarle un valor a n, por ejemplo, si se quiere calcular el factorial de 5 se escribira:

>>n=5;

>>facto

Y el resultado aparecera en la variable factorial. Para utilizar este trozo de codigo es necesariorecordar que siempre se ha de usar la variable n para el dato. Dicho de otro modo, este trozo decodigo no sirve si se pretende calcular el factorial de x o de q. Esto es incomodo y las funcionesintentan precisamente evitar este y otros inconvenientes. Volviendo al ejemplo, lo que se necesitaes anadir una cabecera para que el trozo de codigo se convierta en una funcion.

function [factorial] = mi_fact(n)

producto=1; % se inicia el producto a uno

for factor=2:n, % para cada factor entre 2 y n

producto = producto*factor; % se obtiene el nuevo valor del producto

% multiplicando lo que valıa antes

% por el factor actual

end

factorial = producto; %el resultado es el producto obtenido

Se ha de guardar este texto en un archivo M cuyo nombre ha de ser mi fact.m. Este nombrese ha escogido para recalcar que es una funcion del usuario (mıa) y que calcula el factorial. Paraprobar mediante ejemplos que este archivo M es una funcion escriba en la ventana de ordenesde MATLAB lo siguiente:

>> mi_fact(5)

ans =

120

observe que se obtiene el resultado esperado.Cada vez que se utiliza una funcion se dice que se hace ”una llamada” a la misma, o que se

la ”invoca”. Notese que esta invocacion, uso o llamada produce un efecto interesante: el valorque se le proporciona (el valor 5 en el ejemplo) es copiado en la variable n de la funcion, demodo que las ordenes que se habıan escrito y que calculan el factorial de n estan en realidadcalculando el factorial del dato escrito entre parentesis. A este fenomeno se le suele llamar ”pasede argumento”.

Por otra parte, el resultado que se calcula y que almacena en la variable factorial aparecetras la llamada en el entorno de MATLAB. Si esto no se entiende del todo considere este otroejemplo:

>> y=0

y =

Page 35: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 35

0

>> y=mi_fact(4)

y =

24

Ahora debe ser obvio que el valor de factorial ha sido asignado a la variable y. A estefenomeno se le da el nombre de ”devolucion de resultados”. Con esta explicacion ya tiene sentidouna frase habitual entre programadores como ”le pase a la funcion el valor 4 y me devolvio eny el factorial de 4”.

La nueva funcion mi fact puede usarse dentro de sentencias de MATLAB en expresiones detodo tipo. Por ejemplo:

>> mi_fact(4)+2

ans =

26

>> (mi_fact(4)+2)/2

ans =

13

>> v(1)=mi_fact(4); v(2)=mi_fact(5);

>> v

v =

24 120

4.2.1 Argumentos

Los datos que se proporcionan a la funcion se llaman argumentos por analogıa con las funcionesmatematicas. Una funcion en MATLAB puede tener cualquier numero de argumentos. Ademaslos argumentos pueden ser variables escalares, vectores, matrices, etc. A modo de ejemploconsidere la siguiente funcion de nombre potencia que admite dos argumentos x e y y quecalcula xy. Tenga en cuenta que se ha programado haciendo la suposicion de que y es un enteropositivo.

function [xelevay] = potencia(x, y) %funcion para calcular x a la y

producto=1; % valor inicial para la variable producto parcial

contador=0; % valor inicial para el contador de multiplicaciones

while(contador<y) % mientras que el numero de

% multiplicaciones sea menor que y

producto = producto * x; % se multiplica el producto actual por x

contador = contador + 1; % y se incrementa el contador de

% multiplicaciones hechas

end

xelevay = producto; % el resultado es el ultimo producto

El codigo anterior se guardara en un archivo de nombre potencia.m. Para ver si la codifi-cacion ha sido correcta se pueden realizar algunas llamadas a la funcion y ver si devuelve losresultados esperados. Por ejemplo:

>> potencia(2,4)

ans =

Page 36: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

36 PRACTICA 4. FUNCIONES

16

>> potencia(-2,5)

ans =

-32

>> potencia(2,0)

ans =

1

Observe que en este ejemplo la llamada a la funcion se hace colocando dos argumentos entreparentesis. El primer argumento es el valor que toma x y el segundo es el valor que toma y. Sepuede ver que en todos los casos el resultado obtenido es xy como se pretendıa.

Antes de proseguir es importante recordar que los diagramas de flujo de funciones llevan enel bloque de inicio un rotulo especial que indica: los resultados que se obtienen, el nombre de lafuncion y los argumentos que la funcion necesita. Ademas se ha de incluir una tabla de objetosque aclare el significado de las variables y constantes usadas, en particular el de los argumentos yresultados de la funcion. En la figura 4.1 se muestran los diagramas de flujo de las dos funcionesque han servido como ejemplo: mi fact y potencia. El resto de diagramas de esta practicadeben ser realizados por el alumno.

Para terminar con el espacio dedicado a los argumentos se va a mostrar una funcion quetrabaja con vectores. Se pretende que la funcion reciba como datos un vector y el numero decomponentes que contiene y devuelva como resultado la media aritmetica de sus componentes.La llamada a la funcion sera algo como media(v, 3), siendo v un vector de tres componentes.El resultado que ha de devolver es (v1 + v2 + v3)/3. El codigo siguiente ha de introducirse enun archivo de nombre media.m.

function [mediavector] = media(v, n)

suma=0; % se inicia a cero la variable que contendra

% la suma de las n componentes de v

for i=1:n, % para cada componente desde 1 hasta n

suma = suma + v(i); % se a~nade a la suma la componente

% i-esima del vector v

end

mediavector = suma/n; % el resultado es la suma de las componentes

% del vector dividida por la dimension n del mismo

El buen funcionamiento de la funcion puede ponerse a prueba mediante algunas llamadas a lamisma. Por ejemplo:

>> v = [ 1 2 3 4];

>> media(v, 4)

ans =

2.5000

Antes de proseguir experimente con las funciones que haya escrito usandolas con datos dis-tintos y en expresiones diversas.

4.3 Ejercicio final

Se han de programar un conjunto de funciones que permitan analizar de forma estadıstica unaserie de datos. A fin de concretar se va a suponer que los datos consisten en un conjunto de

Page 37: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 37

medidas de temperatura tomadas (mediante un sensor) de la estacion meteorologica situada enla pista de un aeropuerto. Estas medidas se almacenan en un vector T .

Para ello debe crear un programa que ha de funcionar en forma de menu, preguntando alusuario que opcion de las disponibles desea realizar. Las opciones consisten en operaciones quese pueden realizar sobre los datos, por ejemplo calcular medias, varianzas, hacer dibujos, etc.

Es muy importante que el programa que realice cumpla las siguientes normas:

• El programa debe hacer uso de funciones escritas por el alumno para realizar las distintastareas.

• El programa no debe utilizar variables globales.

• El programa debe utilizar unicamente las operaciones basicas permitidas en los diagramasde flujo. Como excepcion se permite usar la funcion sqrt para realizar la raız cuadrada yla funcion plot para dibujar graficas.

A continuacion se indican las tareas del programa de forma mas detallada.

0 Mostrar las opciones al usuario (1 a 5) y preguntarle la opcion que desea.

1 Si la opcion elegida por el usuario es 1, se han de tomar nuevos datos (es decir, leer nuevosvalores para las componentes de T . La lectura se hara preguntando en primer lugar elnumero de componentes n y leyendo luego las componentes desde la T1 hasta la Tn). Unavez realizada la lectura se ha de volver al punto 0.

2 Si la opcion es 2, se han de presentar los datos (previamente leıdos con la opcion 1) enla pantalla (es decir, dibujar las componentes del vector T frente a sus ındices) y volverluego al punto 0.

3 Si la opcion es 3, se han de calcular y escribir la media de las temperaturas (previamenteleıdas con la opcion 1). Volver luego al punto 0.

4 Si la opcion es 4, se ha de calcular y escribir la desviacion tıpica, calculada como:√

1

n− 1

n∑

k=1

(Tk −media)2

Volver luego al punto 0.

5 Si la opcion es 5, se ha de terminar el programa.

6 Si la opcion elegida es cualquiera otra se ha de volver al punto 0.

El diagrama de flujo para este programa consta de un diagrama principal que contienemodulos y funciones. En la figura 4.2 se muestra el diagrama principal y un modulo. Es precisoescribir las funciones que faltan para completar el diagrama.

A la hora de probar el programa se recomienda que vaya anadiendo funciones una a unacomprobando su buen funcionamiento antes de pasar a anadir la siguiente funcion.

4.4 Evaluacion

El profesor evaluara la practica 20 minutos antes del final de la sesion, comprobando el fun-cionamiento de todas las funciones descritas en esta practica y que el alumno maneja con solturalos conocimientos necesarios para haber realizado semejante tarea.

Recuerde que el trabajo de evaluacion requiere haber realizado previamente varios diagramasde flujo como se ha explicado anteriormente.

Page 38: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

38 PRACTICA 4. FUNCIONES

¿ opción < 5 ?

no

Inicio análisis estadístico

Fin análisis estadístico

Trabajar con la opción

leída

Mostrar opciones

disponibles

Leer opción

¿ opción = 1 ?

Leer T vector de datos

no

¿ opción = 2 ?

Dibujar gráfica datos

no

¿ opción = 3 ?

Calcular y escribir la

media de T

no

¿ opción = 4 ?

Calcular y escribir la

desviación típica de T

no

Inicio trabajar con la opción leída

Fin trabajar con la opción leída

¿ opción = 9 ?

no

Objeto Nombre Tipo Valor

Vector de datos de temperatura (expresadas en gradosCelsius) que se ha de leer del teclado

T vector dereales

variable

Numero entre 1 y 9 que se leera del teclado e indicarala opcion solicitada por el usuario del programa

opcion entera variable

Media de las componentes del vector T calculada como(∑n

k=1Tk)/n

media real variable

Desviacion tıpica de las componentes del vector T cal-

culada como√

1

n−1

∑nk=1

(Tk −media)2

desviaciontıpica

real variable

Texto indicativo de las opciones de analisis estadısticoque el programa pone a disposicion del usuario (veasetexto para conocer tales opciones)

opcionesdisponibles

caracteres constante

Componente k-esima del vector T Tk real variable

Dimension del vector T n entera variable

Indice para recorrer el vector T. Varıa de 1 a n k entera variable

Figura 4.2: Diagrama de flujo para el programa de analisis estadıstico de datos.

Page 39: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Practica 5

Superficies

5.1 Introduccion

El trabajo numerico con superficies representadas mediante matrices permite poner a prueba losconocimientos de algoritmos y programacion que el alumno ha debido adquirir durante el curso.Ademas ilustra ideas geometricas de caracter general que manejara a lo largo de la carrera.

5.1.1 Objetivos, requisitos y desarrollo de la practica

Se pretende aprender a realizar la representacion grafica de funciones de dos variables en elentorno MATLAB.

Los alumnos tendran una copia de estas notas algun documento identificacion: DNI, permisode conduccion, tarjeta de la universidad, pasaporte, etc.

El trabajo de evaluacion requiere realizar un programa y demostrar su funcionamiento. Esobligatorio haber meditado las posibles soluciones al ejercicio y realizado un diagrama de flujoque luego se codificara.

5.2 Superficies con mesh

Una superficie z = f(x, y) definida en un rectangulo [xinf , xsup]× [yinf , ysup] puede representarsemediante un conjunto discreto de alturas medidas o calculadas en algunos puntos del dominio. Amodo de ejemplo considere la funcion de dos variables z = x− y. Para representar graficamenteesta funcion en el intervalo dado por x ∈ [2, 8], y ∈ [1, 4] se pueden tomar 4 puntos para cadavariable independiente, lo cual da lugar a 16 parejas (x, y) como muestra la figura 5.1.

2 4 6 81

2

3

4

eje x

eje

y

rejilla

Figura 5.1: Rejilla de puntos en el plano x-y cubriendo el intervalo [2, 8] × [1, 4].

39

Page 40: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

40 PRACTICA 5. SUPERFICIES

Se puede calcular la altura correspondiente para cada pareja (x, y) mediante la relacionz = x − y. Los valores resultantes pueden representarse del modo mostrado por la figura 5.2a). La grafica que resulta es poco clara y por ello se prefiere la que se muestra en la figura 5.2b). En los parrafos que siguen se va a explicar como conseguir graficas de este estilo usandoMATLAB. Antes de ello conviene volver al ejemplo para observar ciertos detalles. En particularconviene tomar nota de que cada una de las variables independientes x e y se han hecho variardentro de su intervalo obteniendose una serie de puntos. En el caso del ejemplo mostrado por lasfiguras, los puntos son {2, 4, 6, 8} para el eje de abscisas y {1, 2, 3, 4} para el eje de ordenadas.Estos puntos pueden acomodarse en dos vectores vx = (2, 4, 6, 8) y vy = (1, 2, 3, 4). El productocartesiano produce 16 pares (x, y). Para cada uno de esos pares se ha calculado la altura. Estasalturas pueden incluirse en una matriz z de cuatro filas y cuatro columnas. Para el caso que nosocupa es facil ver que la matriz toma los valores:

z =

1 3 5 70 2 4 6−1 1 3 5−2 0 2 4

Puede verse que el eje x se ha hecho corresponder con las columnas de la matriz y el eje ycon las filas, de este modo se ha preservado la orientacion horizontal-vertical. Esta orientacionhace coincidir el eje x con la horizontal para la representacion grafica y las columnas con lahorizontal para la matriz.

24

68

0

2

4−5

0

5

10

eje x

alturas

eje y

eje

z

24

68

0

2

4−5

0

5

10

eje x

Superficie z=x−y

eje y

eje

z

a) b)

Figura 5.2: Alturas y representacion grafica de una superficie sobre una rejilla.

Volviendo ahora al caso general, lo habitual es tomar puntos (x, y) situados sobre una rejillaen el dominio rectangular, con nx × ny puntos. La rejilla consiste en una division de cada ejesegun los valores contenidos en dos vectores vx y vy. De este modo los puntos de la rejilla vienendados por los pares (vxj , vyk) para k = 1, · · · , ny y j = 1, · · · , nx. Las alturas correspondientesa cada uno de los pares (vxj , vyk) seran los valores f(vxj , vyk). Estos valores se pueden incluiren una matriz z ∈ IRny×nx cuyos elementos vienen dados por zkj = f(vxj , vyk).

El problema de dibujar graficas de la superficie dada por una cierta funcion conlleva por tantocrear una matriz z como la descrita anteriormente y tambien un par de vectores vx e vy cuyascomponentes son las abscisas {vxj} y ordenadas {vyk} de la rejilla. Posteriormente, mediante lafuncion mesh de MATLAB se realiza la representacion grafica, simplemente escribiendo la ordenmesh(vx, vy, z).

Escriba este programa de ejemplo para ilustrar los pasos indicados. Guarde las ordenes enun archivo con nombre ejesup.m. Posteriormente ejecute el programa y dedique cierto tiempo

Page 41: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 41

a verificar que el resultado es correcto.

vx = [2, 4, 6, 8];

vy = [1, 2, 3, 4];

for k=1:4,

for j=1:4,

z(k,j) = vx(j)-vy(k);

end

end

mesh(vx, vy, z);

xlabel(’eje x’);

ylabel(’eje y’);

zlabel(’eje z’);

title(’Superficie z=x-y’);

Resumiendo, el problema de representar graficamente una funcion de dos variables en MAT-LAB necesita que se proporcionen los datos siguientes:

• El intervalo [xinf , xsup]× [yinf , ysup].

• El numero de puntos en la rejilla en abscisas nx y en ordenadas ny.

• La funcion a representar se supone conocida, por lo que no es un dato que haya de serleıdo.

Los resultados que se pretenden conseguir son:

• El vector vx cuyas componentes vxj (con j = 1, · · · , nx) son las divisiones en el eje deabscisas de la rejilla. Se ha de verificar que la primera componente es vx1 = xinf y laultima ha de ser vxnx = xsup.

• El vector vy cuyas componentes vyk (con k = 1, · · · , ny) son las divisiones en el eje deordenadas de la rejilla. Se ha de verificar que la primera componente es vy1 = yinf y laultima ha de ser vyny = ysup.

• La matriz z de ny filas y nx columnas cuyas componentes son zij = f(vxj , vyk) siendo lossubındices k = 1, · · · , ny y j = 1, · · · , nx.

Escriba el diagrama de flujo de un algoritmo que lea los valores xinf , xsup, yinf , ysup, nx yny y que permita obtener los vectores vx, vy y la matriz z con vistas a representar graficamente

en MATLAB la superficie f(x, y) = cos(x) · e−y2/10 en la forma indicada anteriormente.Posteriormente codifique el algoritmo obtenido en MATLAB incluyendo la orden mesh(vx,

vy, z). Almacene el programa con el nombre superf.m. Pruebe su buen funcionamientoutilizando valores diversos de xinf , xsup, yinf , ysup, nx y ny y observando las graficas queaparecen.

Advertencia: en las pruebas que realice procure que el producto nx · ny este entre 300 y600 de otro modo la gran cantidad de calculos hara que el ordenador se ralentice.

5.3 Curvas de nivel

Las curvas de nivel son una forma comoda para representar superficies. El alumno debe yaconocer su uso en Topografıa a traves de otra asignatura.

Page 42: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

42 PRACTICA 5. SUPERFICIES

En el entorno MATLAB se dispone de una funcion que permite dibujar curvas de nivelllamada contour. Para realizar unas pruebas ponga en marcha el programa superf.m delapartado anterior. Los vectores vx, vy y la matriz z se van a utilizar para crear curvas de niveldel siguiente modo:

>>figure

>>contour(vx,vy,z)

Observe la figura que resulta y comparela con la superficie dibujada por superf.m. Puederesultar interesante anadir letreros a los ejes, lo cual se consigue con:

>> xlabel(’valores de x’)

>> ylabel(’valores de y’)

>> title(’Curvas de nivel de f(x,y)’)

Una variante interesante se consigue con la funcion contourf cuya forma de uso es similara la anterior. Pruebe lo siguiente:

>>figure

>>contourf(vx,vy,z)

A la figura anterior se le puede anadir una barra que indique la equivalencia entre colores yvalores de z. Para ello escriba simplemente:

>>colorbar

y observe el resultado. Realice alguna otra prueba con mesh y con contour escribiendo lossiguientes ejemplos que utilizan la funcion peaks para crear una matriz z de alturas:

>> clear all; close all

>> z=peaks(40);

>> mesh(z)

>> figure; contour(z)

>> figure; contour(z, 50)

La funcion peaks permite crear matrices de alturas con nx = ny que son utiles para ilustrarfunciones como mesh y contour. Observe que en el ultimo ejemplo se ha indicado a la funcioncontour que represente 50 curvas de nivel en lugar del valor habitual.

5.4 Busqueda de cumbres

Dada una matriz z de alturas como las usadas en los apartados anteriores con ny filas y nx

columnas se desea determinar si existen maximos locales (cumbres).

Para concretar mas considerese la superficie mostrada en la figura 5.3 y su correspondientegrafico de curvas de nivel. Puede observarse que existe mas de una cumbre. El objetivo no eshallar la cumbre mas alta sino indicar en que lugares existe alguna de estas caracterısticas delterreno.

Para solucionar el problema se puede usar la idea de que una cumbre es un punto del terrenoque sobresale de los puntos vecinos. Este hecho sera visible en la matriz z de alturas pues lacumbre correspondera a algun elemento zk,j con la propiedad de ser mayor que sus vecinos.

Por ejemplo, en la matriz siguiente

Page 43: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

Fundamentos de Informatica, 1o Ing. Aer. Depto. Ingenierıa de Sistemas y Automatica. ESI. US. 43

0

20

40

60

0

20

40

60−10

−5

0

5

10

columnas jfilas k

altu

ra

columnas j

fila

s k

10 20 30 40 50

5

10

15

20

25

30

35

40

45

50

−6

−4

−2

0

2

4

6

Figura 5.3: Terreno con multiples cumbres y simas (izquierda) y mapa con curvas de nivel(derecha). La barra de la derecha indica la correspondencia entre tonos de gris y altura.

0 0 1 2 2 1 0 0 00 0 2 2 2 2 1 0 00 0 2 2 2 2 1 0 00 1 1 2 3 1 1 0 00 0 1 1 2 1 1 0 0

hay una sola cumbre, correspondiente al elemento z4,5. Puede verse que los elementos adya-centes tienen menor valor, por tanto el z4,5 es un maximo local.

Ha de tenerse en cuenta que los vecinos que hay que comprobar son: el de arriba, el deabajo, el de la izquierda, el de la derecha y tambien los cuatro situados en las diagonales; esdecir, arriba a la izquierda, arriba a la derecha, abajo a la izquierda y abajo a la derecha.

Los elementos que estan situados en los bordes de la matriz (los de las filas primera y ultimay los de las columnas primera y ultima) no pueden ser comprobados porque no tienen todos susvecinos, por ello se dejan fuera del analisis.

Escriba un algoritmo (en forma de diagrama de flujo) que permita determinar los puntosen los que hay una cumbre (maximo local) de una funcion utilizando el metodo descrito ante-riormente. Suponga que este algoritmo ya dispone de una matriz z de alturas, de ny filas y nx

columnas. El algoritmo no tiene pues que leer ningun dato.El algoritmo para detectar cumbres debera analizar cada uno de los elementos interiores de

la matriz y comprobar si se cumple o no la condicion de ser mayor que los vecinos. El resultadodel algoritmo ha de ser una lista de pares (k, j) correspondientes a todos los elementos zk,j quecumplen la condicion de ser cumbres.

Codifique el algoritmo en MATLAB usando un archivo de nombre cumbres.m

Para comprobar si el programa cumbres funciona correctamente se haran algunas pruebas.Antes de la llamada al programa se ha de crear una matriz de alturas. Pruebe en primer lugarcon una matriz pequena que contenga una sola cumbre, como por ejemplo:

0 0 10 0 10 4 10 1 1

Si se cambian los valores de nx y ny para que se ajusten a esta matriz y se crea la matriz zcon los datos anteriores, el resultado ha de ser una lista de los valores de k y de j. Puesto que

Page 44: El entorno MATLAB - esi2.us.esjaar/Datos/FIA/Enunciados.pdf · 2 PRACTICA 1. EL ENTORNO MATLAB´ 1.4.1 Inicio de sesi´on en Windows El inicio de una sesion ocurre siempre al encender

44 PRACTICA 5. SUPERFICIES

la unica cumbre es z3,2 la lista ha de ser k = [3], j = [2].Las siguientes sentencias permiten realizar la prueba que se ha descrito:

>> nx=3;

>> ny=4;

>> z = [0, 0, 1; 0, 0, 1; 0, 4, 1; 0, 1, 1]

>> cumbres

Recuerde que en MATLAB las matrices se escriben separando las columnas con comas y lasfilas por punto y coma. A continuacion pruebe con una matriz que contenga dos cumbres, comola siguiente.

0 0 1 10 5 1 10 1 1 10 1 4 10 1 1 1

El resultado que el programa proporciona ha de ser una lista de los valores de k y de j.Puesto que las cumbres son z2,2 y z4,3 la lista ha de ser k = [2, 4], j = [2, 3].

Si estas pruebas dan un resultado correcto puede pasar a una prueba con matrices mayoresque representen superficies. Para ello se puede usar la funcion peaks. La forma de hacer unaprueba sera con las ordenes siguientes:

>> clear all; close all

>> nx=40; ny=40;

>> z=peaks(40);

>> contour(z, 20); colorbar; grid

>> ylabel(’filas k’);

>> xlabel(’columnas j’)

>> cumbres

Como resultado ha de obtenerse la lista de pares (k, j) que son cumbres.Para comprobar si el resultado es correcto mire si los puntos (k, j) obtenidos por el programa

se corresponden en la grafica con cumbres de la superficie dada por z. Las cumbres pueden verseen el grafico de curvas de nivel. Compruebe que el programa proporciona resultados correctospara cualquier eleccion de nx = ny.

Advertencia: Si usa valores de nx = ny menores que 20 el resultado puede ser enganosoaunque el programa sea correcto.

5.5 Evaluacion

Veinte minutos antes del final de la sesion debera mostrar al profesor:

1. La grafica obtenida con el programa superf.m para los siguientes valores de los datosxinf = −8, xsup = 8, nx = 40, yinf = −5, ysup = 5, ny = 25.

2. Los resultados al usar cumbres.m con un valor de nx = ny = n que el profesor le indiquey con la matriz de alturas dada por z=peaks(n).

El profesor podra ademas preguntar acerca de los diagramas de flujo realizados y de losprogramas codificados.