Anda di halaman 1dari 9

Fonaments dInformtica

1r curs dEnginyeria Industrial

Prctica 3: Funciones
Objetivos de la prctica
En esta prctica estudiaremos cmo podemos aumentar la funcionalidad del
lenguaje MATLAB para nuestras aplicaciones definiendo funciones.
Antes de comenzar
En primer lugar debis crear vuestra carpeta de trabajo con el explorador de
Windows.
A continuacin, iniciar MALTAB y cambiar el directorio a la carpeta de
trabajo que habis creado:
pwd
indica cul 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 adems
aceptan argumentos y producen resultados.
Se crea un M-file utilizando un editor de textos. La versin 5.3 de MATLAB
tiene su propio editor (medit). Utilizamos el editor para escribir el M-file,
a continuacin lo grabamos y lo llamamos directamente desde la lnea de
comandos de MATLAB como si fuera cualquier otra orden de las que ya
conocemos.

Scripts vs. Funciones


Funciones
Scripts
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 funcin
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 lnea de
comandos o crean nuevas variables que son aadidas a dicho Workspace,
de modo que todas esas variables pueden ser luego manipuladas desde la
lnea de comandos.
Funciones
Veremos un ejemplo de funcin y sobre ella describiremos sus elementos
bsicos.
%Definicin de la funcin
function pf = pvt (p)
%Lnea H1
% PVT Precio venta publico
% PVT (p) devuelve el precio con IVA, %Texto ayuda
% de un producto, dado su precio (p) sin IVA.

iva = 0.16;
pf = p * (1+ iva);

%Cuerpo de la funcin

Definicin de la funcin: Esta lnea define el nombre de la funcin


(pvt) y el nmero y orden de parmetros de entrada (en el ejemplo, un
parmetro: p) y el nmero y orden de parmetros de salida o resultados
(en el ejemplo, un parmetro: pf).
function pf = pvt (p)
parmetro de entrada
nombre de la funcin
parmetro de salida
palabra reservada

Si la funcin tiene ms de un parmetro de entrada, estos se separan por


comas y si tiene ms de un parmetro de salida se escribe la lista
separada por comas y entre corchetes ([ ]). Este sera un ejemplo
general:
function [x, y] = mifuncion (a, b, c)
Lnea H1: Se trata de una primera lnea comentada (empieza con %) tras
la lnea de definicin de la funcin. 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 lnea H1
cuando solicitamos ayuda sobre una determinada funcin (help pvt).
Se muestra el texto comentado hasta la primera lnea en blanco o la
primera lnea ejecutable. El resto de comentarios tras este bloque se
ignoran.
Cuerpo de la funcin: esta parte contiene las sentencias que realizan
los clculos y asignan valores a los parmetros de salida.
La funcin opera sobre variables en su propio espacio de trabajo, separado
del espacio de trabajo de la lnea de comandos.
Nombre de la funcin
Los nombres de las funciones deben empezar por una letra. Por lo dems,
pueden ser cualquier combinacin de letras, nmeros o signos.
El nombre del fichero (M-file) que contiene la funcin es el mismo nombre
de la funcin seguido de la extensin .m.
pvt.m
Cuando llamamos a una funcin, MATLAB busca en el espacio de trabajo y
despus 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 lnea de comandos.
Si queremos ver el contenido del M-file pvt.m, entonces teclearemos en la
lnea de comandos:
>> type pvt
Llamada a una funcin
Podemos llamar a una funcin desde la lnea de comandos, como si fuera
cualquier otra orden o funcin ya definida en MATLAB. Tambin podemos

llamar a una funcin dentro de otra funcin como veremos en posteriores


prcticas.
>> precio = 1000;
>> preciofinal = pvt(precio)
>>
preciofinal =
1160
Observar que los parmetros de entrada y salida no tienen por qu tener el
mismo nombre que en la definicin de la funcin.
>> preciofinal = pvt(1400)
>>
preciofinal =
1624
Es importante escribir todos los parmetros de entrada entre parntesis y
todos los parmetros de salida entre corchete, siempre en el orden
correspondiente:
>> [v, w] = mifuncion (a, b, c)
Las variables de una funcin son locales, de modo que, aunque en el seno
de la funcin se modifiquen los argumentos de entrada, el valor de dichas
variables en el Workspace queda inalterado.
Ejercicios
1) Se tienen los partidos ganados (ge) por un equipo de ftbol, los partidos
perdidos (pp) y los partidos empatados (pe). Escribir:
a) Una funcin que calcule los partidos jugados por el equipo.
b) Una funcin que calcule los puntos obtenidos en total.
c) Una funcin que calcule los puntos por partido.
2) Escribir una funcin que calcule las combinaciones de n sobre m:
comb(n,m)= n! / (m! * (n-m)!)
3) Escribir una funcin que calcule el permetro de un crculo dado su
radio.
4) Escribir una funcin que calcule el rea de un crculo dado su radio.

5) Modifica la funcin anterior para que dado el crculo, calcule tanto el


rea como la longitud de la circunferencia.
6) Escribir una funcin que calcule las dos races de una ecuacin de
segundo grado: ax2+bx+c=0.
7) Escribir una funcin que convierta un nmero binario en hexadecimal.
8) Escribir una funcin (base2base) que convierta una cadena que
representa un nmero en cualquier base a cualquier otra base que se
indique.
9) Escribir una funcin que calcule la deformacin de una viga de longitud
L sujeta en los extremos, cuando se le aplica una fuerza F en el punto
central. Dicha deformacin depende adems de la elasticidad (E) y del
momento de inercia (I) y se calcula como:
deformacin = (-F*L3) / (48*E*I*)
Calcular cul ser la deformacin (en pulgadas) para una viga de las
siguientes caractersticas: L= 15 ft., F=50.000 lb., E=30*106 lb/in2,
I=797 in4.
Queremos ahora observar cmo vara la deformacin de la viga en
funcin de la fuerza que se le aplique. Para ello, definiremos f como
un vector que toma valores entre 20000 y 60000, aplicaremos la
funcin que hemos escrito para los valores de f y dibujaremos la
grfica con la fuerza en las abscisas y la deformacin en las ordenadas:
>> f =20000:1000:60000;
>> d= deformacion (L, f, E, I);
>> plot (f, d);
10) La siguiente funcin calcula la parbola y=x2 entre n y -n a intervalos
de 0.1:
function y = x (n)
% x Calcula la funcin y=x2
% x(n) La funcin se representa entre los
valores -n y n
x=-n:0.1:n;
y=x.^2;
plot(x,y);
grid;

Escribir dicha funcin y comprobar su funcionamiento. Modificar la


p
funcin para que podamos calcular la funcin y=x , donde p sea
cualquier valor positivo.
11) Sabiendo que cada carcter se representa con 8 bits, escribir una
funcin tal que dada una cadena de unos y ceros que representa una
palabra en binario (la longitud de la cadena debe ser mltiplo de 8),
devuelva la palabra (con caracteres) que representa. Utilizar la funcin
length para conocer la longitud de la cadena y la funcin reshape
para separar la cadena de unos y ceros en grupos de 8 bits.
12) MATLAB no tiene definidas operaciones para valores enteros. Por
ejemplo, definir a y b de la siguiente forma y comprobar que no
podemos hacer a+b:
>>a=int8(40);
>>b=int8(110);
Escribir una funcin que reciba dos valores enteros y devuelva su
suma entera.
13) Disear una funcin en MATLAB que calcule la superficie y
volumen de un cilindro dados su radio (r) y altura (h) (V=r2h,
S=2r2+2rh).
14) La presin atmosfrica (p) vara en funcin de la altura (h) segn la
siguiente expresin: p=1035*e-0.12h, donde la altura se mide en
kilmetros y la presin en milibares.
a) Escribir una funcin que calcule la presin para una altura dada.
b) Utilizando la funcin anterior, dibujar la grfica que representa la
variacin de la presin cuando la altura va de 0 a 30km. (tomados de
1 en 1.)
15) 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 funcin tal que dadas 3 resistencias calcule su resistencia
total conectadas en paralelo y en serie.

Fonaments dInformtica
1r curs dEnginyeria Industrial

Prctica 3 (cont.): Funciones


Objetivos de la prctica
En esta prctica se continuarn ampliando los conocimientos sobre el
diseo de funciones en MATLAB.
Subfunciones
Los ficheros de funciones en MATLAB pueden contener ms de una
funcin. La primera funcin en el fichero es la funcin principal, aquella
que es invocada con el nombre del fichero (M-file). El resto de funciones
en ese mismo fichero son subfunciones y son nicamente visibles para la
funcin principal u otras subfunciones en ese mismo fichero.
Cada subfuncin comienza con su propia lnea de definicin. Las diferentes
subfunciones estn una detrs de otra en el fichero y pueden aparecer en
cualquier orden, siempre y cuando la funcin principal est la primera.
Ejemplo:
function [long, area] = circulo (radio) %funcin principal
% CIRCULO Calcula el perimetro y el area de un circulo dado
su radio
long = perimetro(radio);
area = areacirc (radio);
function p = perimetro (rad)
%calcula el permetro de un crculo
p = 2 * pi *rad;

% subfuncin

function a= aracirc(rad)
%calcula el rea de un crculo
a = pi *rad^2;

% subfuncin

Nota: Observar que la funcin circulo s es visible para cualquier otra


funcin. Esto es, podemos llamar a la funcin circulo desde cualquier
otra funcin que definamos o desde la lnea de comandos de MATLAB. Sin
embargo, las funciones perimetro y areacirc slo son visibles para
la funcin circulo. Es muy importante, por tanto, decidir cundo vamos

a definir una funcin como subfuncin de otra, puesto que su uso queda
restringido slo al mbito de la funcin principal.
Ejercicio:
Implementar la funcin circulo tal y como aparece en el recuadro
anterior. Calcular el rea y permetro de un crculo de radio 2.5, llamando a
la funcin desde la lnea de comandos. Desde la lnea de comandos llamar
a la funcin perimetro para que calcule el permetro del crculo.
Observar que ocurre. Desde la lnea de comandos, escribir la orden what.
Observar qu funciones (ficheros .m) aparecen.
Definir ahora las funciones circulo2, perimetro2 y
areacirc2 pero cada una de ellas como funcin independiente. Repetir
los pasos indicados en el prrafo anterior y observar las diferencias.

Ejercicios
1. Sea una circunferencia centrada en el origen de coordenadas. Dado un
punto de la circunferencia P (x, y), escribir una funcin que calcule el
radio y el ngulo en grados sexagesimales de dicho punto sobre la
circunferencia. Para ello, definir una subfuncin que calcule el radio,
otra que calcule el ngulo en radianes y una tercera que convierta de
radianes a grados sexagesimales.
(x,y)

tg = y/x

2. Se lanza una pelota con una velocidad inicial v0=15m/s. La velocidad


(v) y la posicin (d) de la pelota despus de t segundos vienen
expresadas como:
v = v0 + at
d = v0t + (at2)/2
Donde a es la acelaracin de la gravedad (-9.80665 m/s2). La distancia
se mide en metros y la velocidad en metros por segundo.
Escribir una funcin en MATLAB (utilizando subfunciones) que calcule
la velocidad que lleva la pelota y la distancia recorrida tras t segundos.

Comprobar el comportamiento de la pelota dibujando las grficas de


velocidad y distancia para valores de t entre 0 y 3 segundos (a
intervalos de 0.1 segundos).
3. Disear una funcin que recibe la hora actual (horas, minutos y
segundos) y devuelve los segundos transcurridos desde la medianoche.
La funcin utilizar subfunciones para pasar de horas y minutos,
respectivamente, a segundos.
4. Repetir el ejercicio anterior pero utilizando 3 funciones independientes
(sin subfunciones).

Anda mungkin juga menyukai