Sei sulla pagina 1di 6

Fonaments d’Informàtica

1r curs d’Enginyeria Industrial

Práctica 3: Funciones
Objetivos de la práctica
En esta práctica estudiaremos cómo podemos aumentar la funcionalidad del
lenguaje MATLAB para nuestras aplicaciones definiendo funciones.

Antes de comenzar
En primer lugar debéis crear vuestra carpeta de trabajo con el explorador de
Windows.
A continuación, iniciar MATLAB y cambiar el directorio a la carpeta de
trabajo que habéis creado:
• pwd indica cuál es el directorio actual
• dir contenidos del directorio actual
• cd camino cambiar de directorio.

M-files en MATLAB
Los M-files pueden ser scripts, que simplemente ejecutan una serie de
órdenes o instrucciones de MATLAB; o pueden ser funciones, que además
aceptan argumentos y producen resultados.
Se crea un M-file utilizando un editor de textos. La versión 5.3 de MATLAB
tiene su propio editor (medit). Utilizamos el editor para escribir el M-file,
a continuación lo grabamos y lo llamamos directamente desde la línea de
comandos de MATLAB como si fuera cualquier otra orden de las que ya
conocemos.
Scripts vs. Funciones

Scripts Funciones
• No aceptan argumentos de • Aceptan argumentos de entrada y
entrada ni producen resultados de producen resultados
salida
• Trabajan sobre las variables en el • Por defecto, las variables internas
workspace son locales a la función
• Útiles para automatizar una serie • Útiles para extender el lenguaje
de pasos que se repiten muchas MATLAB para tus aplicaciones
veces

Los scripts trabajan sobre variables en el Workspace de la línea de


comandos o crean nuevas variables que son añadidas a dicho Workspace,
de modo que todas esas variables pueden ser luego manipuladas desde la
línea de comandos.

Funciones

Veremos un ejemplo de función y sobre ella describiremos sus elementos


básicos.

function pf = pvt (p) %Definición de la función


% PVT Precio venta publico %Línea H1
% PVT (p) devuelve el precio con IVA, %Texto ayuda
% de un producto, dado su precio (p) sin IVA.
iva = 0.16; %Cuerpo de la función
pf = p * (1+ iva);

• Definición de la función: Esta línea define el nombre de la función


(pvt) y el número y orden de parámetros de entrada (en el ejemplo, un
parámetro: p) y el número y orden de parámetros de salida o resultados
(en el ejemplo, un parámetro: pf).

function pf = pvt (p)


parámetro de entrada
nombre de la función
parámetro de salida
palabra reservada
Si la función tiene más de un parámetro de entrada, estos se separan por
comas y si tiene más de un parámetro de salida se escribe la lista
separada por comas y entre corchetes ([ ]). Este sería un ejemplo
general:
function [x, y] = mifuncion (a, b, c)

• Línea H1: Se trata de una primera línea comentada (empieza con %) tras
la línea de definición de la función. MATLAB muestra esta primera
ayuda cuando usamos el comando lookfor o pedimos ayuda sobre un
directorio
• Texto de ayuda: MATLAB muestra este texto junto con la línea H1
cuando solicitamos ayuda sobre una determinada función (help pvt).
Se muestra el texto comentado hasta la primera línea en blanco o la
primera línea ejecutable. El resto de comentarios tras este bloque se
ignoran.
• Cuerpo de la función: esta parte contiene las sentencias que realizan
los cálculos y asignan valores a los parámetros de salida.

La función opera sobre variables en su propio espacio de trabajo, separado


del espacio de trabajo de la línea de comandos.

Nombre de la función
Los nombres de las funciones deben empezar por una letra. Por lo demás,
pueden ser cualquier combinación de letras, números o signos.

El nombre del fichero (M-file) que contiene la función es el mismo nombre


de la función seguido de la extensión .m.
pvt.m

Cuando llamamos a una función, MATLAB busca en el espacio de trabajo y


después en los directorios indicados en el pathwork (comando path).

Si queremos conocer los M-files que tenemos en nuestro directorio de


trabajo, escribiremos la orden what en la línea de comandos.

Si queremos ver el contenido del M-file pvt.m, entonces teclearemos en la


línea de comandos:
>> type pvt

Llamada a una función


Podemos llamar a una función desde la línea de comandos, como si fuera
cualquier otra orden o función ya definida en MATLAB. También podemos
llamar a una función dentro de otra, como veremos en posteriores prácticas.
>> precio = 1000;
>> preciofinal = pvt(precio)
>>
preciofinal =
1160

Observar que los parámetros de entrada y salida no tienen por qué tener el
mismo nombre que en la definición de la función.

>> preciofinal = pvt(1400)


>>
preciofinal =
1624

Es importante escribir todos los parámetros de entrada entre paréntesis y


todos los parámetros de salida entre corchete, siempre en el orden
correspondiente:
>> [v, w] = mifuncion (a, b, c)

Las variables de una función son locales, de modo que, aunque en el seno
de la función se modifiquen los argumentos de entrada, el valor de dichas
variables en el Workspace queda inalterado.

Ejercicios

1.
a. Escribir una función que calcule el perímetro de un círculo dado
su radio.
b. Escribir una función que calcule el área de un círculo dado su
radio.
c. Modifica la función anterior para que dado el círculo, calcule tanto
el área como la longitud de la circunferencia.

2. Escribir una función que calcule las dos raíces de una ecuación de
segundo grado: ax2+bx+c=0. a, b, y c son parámetros de entrada.

3.
a. Escribir una función que convierta un número binario en
hexadecimal.
b. Escribir una función (base2base) que convierta una cadena que
representa un número en cualquier base a cualquier otra base que
se indique.
4. La siguiente función calcula la parábola y=x2 entre n y -n a
intervalos de 0.1:
function y = x(n)
% x Calcula la función y=x2
% La función se representa entre los valores -n y n
x=-n:0.1:n;
y=x.^2;
plot(x,y);
grid;

a. Escribir dicha función y comprobar su funcionamiento.


b. Modificar la función para que podamos calcular la función y=xp,
donde p sea cualquier valor positivo.

5. La presión atmosférica (p) varía en función de la altura (h) según la


siguiente expresión: p=1035*e-0.12h, donde la altura se mide en
kilómetros y la presión en milibares.
a. Escribir una función presion que calcule la presión para una
altura dada (utilizar la función de MATLAB exp).
b. Queremos ahora observar en una gráfica cómo varía la presión en
función de la altura. Para ello, definiremos a_vec como un vector
de alturas que toma los valores enteros entre 0km y 30km,
aplicaremos la función que hemos escrito para obtener los valores
del vector de presiones p_vec y dibujaremos la gráfica con la
altura en las abscisas y la presión en las ordenadas:
>> a_vec = 0:1:30;
>> p_vec = presion (a_vec);
>> plot (a_vec, p_vec);

6. Diseñar una función en MATLAB que calcule la superficie y


volumen de un cilindro dados su radio (r) y altura (h) (V=πr2h,
S=2πr2+2πrh).

7. Sabiendo que la resistencia total de 3 resistencias conectadas en serie


es:
rT= r1 + r2 + r3
Y que si dichas resistencias se conectan en paralelo, entonces su
resistencia total es:
1/rT = 1/r1 + 1/r2 + 1/r3
Escribir una función tal que dadas 3 resistencias calcule su
resistencia total conectadas en paralelo y en serie.

8. Sabiendo que cada carácter se representa con 8 bits, escribir una


función tal que dada una cadena de unos y ceros que representa una
palabra en binario (la longitud de la cadena debe ser múltiplo de 8),
devuelva la palabra (con caracteres) que representa. Utilizar la
función length para conocer la longitud de la cadena y la función
reshape para separar la cadena de unos y ceros en grupos de 8
bits.