Professional Documents
Culture Documents
Considere una función usual, con una variable de entrada (independiente, y una
variable de salida (dependiente). Lo que varía es la cantidad de argumentos que pueden
tener estas variables.
Ejemplo:
y f x 2 x 6 , una variable de entrada, y una de salida.
z F x, y 2 x 2 6 xy y 3 8 , dos variables de entrada, y una de salida.
u, v G x, y, z 2 x 5 y z, x 3 y 5z ,
tres variables de entrada, y dos de salida.
Para realizar estas funciones se usaran archivos script de extensión: ****.m. En el
desarrollo de estas funciones es posible usar funciones predefinidas por MatLab,
también se pueden usar funciones definidas por el usuario, las cuales deben ubicarse
siempre en la carpeta de trabajo de MatLab.
Funciones definidas por el usuario; generalmente para representar una función que se
usara en varios programas adicionales.
x FUNCIÓN y f x
Básicamente un archivo de función, es un archivo tipo .m, visto en el capitulo tres. Pero
la diferencia está en la primera línea, que lleva una forma especial, para indicar lo de
función. Además del nombre de tal archivo.
06 archivos de función 1
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
function variables_salida=nombre_funcion(variables_entrada)
sentencias
end
function y=nombre_funcion(a,b,c)
4. En general, definiremos una función del siguiente modo:
function [y1,y2]=nombre_funcion(a,b,c)
Con tres argumentos a, b y c variables de entrada y que devuelve dos resultados en las
variables y1 e y2.
Una función se llama del mismo modo que las funciones predefinidas. Las funciones se
pueden llamar desde la ventana de comandos, desde un fichero script o desde otra
función.
Todas las variables en una función son locales a dicha función, incluyendo las de
entrada y las de salida.
06 archivos de función 2
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
Con esta función se podrían hacer muchas cosas, como: graficar, derivar, integrar, etc.
Veamos una de ellas, grafiquemos en el intervalo [-10,10]
06 archivos de función 3
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
Grafico Resultante:
400
350
300
250
200
150
100
50
-50
-10 -5 0 5 10
g=9.81;
v0x=v0*cos(theta*pi/180);
v0y=v0*sin(theta*pi/180);
thmax=v0y/g;hmax=v0y^2/(2*g);
ttot=2*thmax;dmax=v0x*ttot;
06 archivos de función 4
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
Grafico resultante
TRAYECTORIA DE UN PROYECTIL
250
200
ALTURA (m)
150
100
50
0
0 100 200 300 400 500 600
DISTANCIA (m)
∑ ∑ ( ̅)
̅ √
06 archivos de función 5
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
1.65, 1.82, 1.72, 1.75, 1.73, 1.85, 1.90, 1.74, 1.76, 1.77.
>> x=[1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77];
media = 1.7690
desviacion = 0.0713
>> x=[1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76
1.77];
>> mean(x)
ans = 1.7690
>> std(x)
ans = 0.0713
06 archivos de función 6
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
Funciones anónimas
Las funciones anónimas nos permiten definir una función simple sin necesidad de
crearla y guardarla en un fichero .m. Se pueden definir en la ventana de comandos, en
un fichero script o dentro de otra función, con la siguiente sintaxis:
variable=@(parámetros) expresion
expresion consiste en una única y válida expresión, puede tener una o más variables de
entrada que se especifican en la lista de argumentos separadas por comas. Puede incluir
variables que se han definido previamente
Las funciones se pueden asignar a variables y estas variables se pueden pasar a otras
funciones como se pasan escalares o vectores. Más adelante veremos cómo se llama a
una función dentro de otra función que se le pasa en uno de sus parámetros.
function y=func(x)
y=cos(x)-x;
end
Llamada a la función
>> z=func(0.5)
z = 0.3776
En la ventana Workspace, vemos que aparece una variable f de distinto tipo que guarda
la referencia a la función anónima.
Sea una función anónima f que incluye una variable a cuyo valor definimos previamente
06 archivos de función 7
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
>> a=4;
>> f=@(x) a*x;
>> f(3)
ans = 12
>> a=5;
>> f(3)
ans = 12
√ ( )
Nota: MATLAB captura el valor de las variables cuando se define la función anónima.
La función anónima f(x) se define con un valor de a=2
>> a=2;
>> f=@(x) cos(a*x);
>> f(0.5)
ans = 0.5403
>> a=3;
>> f(0.5)
ans = 0.5403
Para que la función f(x) utilice el nuevo valor de a hay que volverla a definir
>> a=3;
>> f=@(x) cos(a*x);
06 archivos de función 8
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
>> f(0.5)
ans = 0.0707
Existen mucha situaciones en las que una función f1 utiliza otra función f2. Por ejemplo,
MATLAB tiene una función fzero que se utiliza para calcular las raíces de una ecuación
f (x)=0. La función f se le pasa a fzero cuando se llama para encontrar las raíces de f(x).
Hay varias formas de pasar una función f a otra función para su uso.
Ya hemos visto el significado de manejador para una función anónima, un valor que
guarda una variable f o c y que está asociado a una función.
Si definimos una función de forma explícita en un fichero por ejemplo, la función func,
obtenemos el manejador anteponiendo el carácter @ al nombre de la función
Vamos ahora, a ver como se le pasa una función a otra función en uno de sus
parámetros.
( ) ( ) ( ) ( )
Calculamos también la derivada segunda de una función en un punto del siguiente modo
06 archivos de función 9
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
>> derivada(f2,2)
ans = 9.8686e-007
Para
Un fichero función puede contener más de una función. Las funciones se definen una a
continuación de la otra. La primera función es la primaria y tiene el mismo nombre que
el fichero, las otras funciones son secundarias y se denominan subfunciones y pueden
estar en cualquier orden dentro del fichero. Solamente se puede llamar a la función
primaria en la ventana de comandos o por otras funciones. Cada función tiene sus
propias variables que son locales a la función, no se puede acceder a las variables de
una subfunción desde la función primaria o desde otra subfunción. No se puede acceder
a las variables de la función primaria desde una subfunción.
Más adelante veremos la utilidad de estas funciones cuando los programas sean más
largos y complejos, de momento vamos a ver un ejemplo que nos permita vislumbrar
como se definen y llaman las subfunciones.
√ √
Vamos a crear una función que nos permita comprobar las propiedades de las raíces de
una ecuación de segundo grado, y dos subfunciones, la primera calcula la raíz y la
segunda la raíz .
06 archivos de función 10
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
function raiz=calcula_raiz1(a,b,c)
raiz=(-b+sqrt(b*b-4*a*c))/(2*a);
end
>> [-b/,c/a]=comprobar_raices(1,-1,-6)
b_a = 1
c_a = -6
Funciones anidadas
Una función anidada es una función definida dentro de otra función. Las funciones
primarias y las anidadas deben obligatoriamente terminar con end
Las funciones anidadas tienen acceso a las variables de la función primaria y la función
primaria tiene acceso a las variables definidas por la función anidada.
Una función anidada puede contener otra y así sucesivamente, pero este proceso puede
llevar a confusión. Existen reglas para llamar a una función anidada dentro de otra pero
no tiene por el momento interés para el lector.
06 archivos de función 11
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
Vemos que las funciones anidadas calcula_raiz1 y calcula_raiz2 tienen acceso a los
parámetros a, b y c de la función primaria, que son variables locales a la función
comprobar_raices y también, a la variable local dis, que guarda el discriminante de la
ecuación de segundo grado. Por otra parte, la función primaria tiene acceso a las
variables x1 y x2 declaradas en cada una de las funciones anidadas.
>> [b_a,c_a]=comprobar_raices(1,-1,-6)
b_a = 1
c_a = -6
function [med,des]=estadistica_1(datos)
n=length(datos);
med=media(datos,n);
des=desviacion(datos,med,n);
end
%calcula la media del vector de datos
function res=media(x,num)
res=sum(x)/num;
end
%calcula la desviación estándar
06 archivos de función 12
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
function res=desviacion(x,m,num)
xd=x-m;
xd_suma=sum(xd.^2);
res=sqrt(xd_suma)/(num-1);
end
function [med,des]=estadistica_1(x)
n=length(x);
media;
desviacion;
%calcula la media del vector de datos
function media
med=sum(x)/n;
end
%calcula la desviación estándar
function desviacion
xd=x-med;
xd_suma=sum(xd.^2);
des=sqrt(xd_suma)/(n-1);
end
end
FUNCIONES EN LINEA
Se usan para realizar funciones simples, que también pueden tener una o más variables
de entrada.
nombre inline 'exp resion matematica en forma de cadena '
nombre inline 'exp resion matematica ','arg1','arg 2', ,'arg n '
y f x 3x 2 6 x 8
Ejemplo: Considerando la función cuadrática:
06 archivos de función 13
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
>> f(1)
ans = 1
>> f(2)
ans = 16
>> G=inline('3*x+6*y+9*x*y-6','x','y')
G = Inline function:
G(x,y) = 3*x+6*y+9*x*y-6
>> G(1,2)
ans = 27
>> G(1,2),G(6,8)
ans = 27
ans = 492
>> [G(1,2), G(3,5), G(8,1), G(3,7)]
ans = 27 168 96 234
>> x=[1 2 3],y=[7 6 4]
x= 1 2 3
y= 7 6 4
>> G(x,y)
??? Error using ==> inlineeval at 15
Error in inline expression ==> 3*x+6*y+9*x*y-6
Inner matrix dimensions must agree.
Error in ==> inline.subsref at 27
INLINE_OUT_ = inlineeval(INLINE_INPUTS_,
INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Como aparece un error debemos redefinir la función, para cuando los argumentos son
vectores o matrices.
06 archivos de función 14
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
ans = 66 5
ans = 48 3
>>
Ejemplos 02: g x, y 4 x5 y 7 x3 y 2 8x 2 y 4 6 x 29 y 6
>> G=inline('4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)')
G = Inline function:
G(x,y) = 4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)
>> G(5,6),G(8,7),G(9,1)
ans = -1505694
ans = -3547965
ans = 240676
>> x=[-2 -1 0 1 2 3 4 5],y=[-3 -2 -1 0 1 2 3 4]
x = -2 -1 0 1 2 3 4 5
y = -3 -2 -1 0 1 2 3 4
>> G(x,y)
ans = -23865 -2010 -29 6 135 -290 -15165 -105954
EL COMANDO “feval”
Este comando evalúa el valor de una función, en algún o algunos valores dados. La
diferencia con el caso anterior, está en que aquí se da la función, solo el nombre, y se
evalúa en el valor dado.
variable = feval(‘nombre_funcion’,valor_argumento)
Ejemplo 01: Aquí vamos a definir una función H, y luego la evaluamos en x=1.
>> H=inline('exp(x.^2)./(1+x.^4)')
H = Inline function: H(x) = exp(x.^2)./(1+x.^4)
>> feval(H,1)
ans = 1.3591
>>
Ejemplo 02:
>> D=feval(inline('exp(x.^2)./(1+x.^4)'),1)
D = 1.3591
>> H=inline('exp(x.^2)./(1+x.^4)')
H = Inline function: H(x) = exp(x.^2)./(1+x.^4)
>> feval(H,1)
ans = 1.3591
>> G=inline('exp(x.^2)./(y+x.^4)')
G = Inline function: G(x,y) = exp(x.^2)./(y+x.^4)
>> feval(G,1,1)
ans = 1.3591
06 archivos de función 15
06 Funciones y ficheros de función Mg. Amado Malca Villalobos
>> feval(G,4,5)
ans = 3.4046e+004
>> D=feval(inline('exp(x.^2)./(1+x.^4)'),1)
D = 1.3591
>> D=feval('sin',0)
D= 0
>> D=feval('sin',pi/6)
D = 0.5000
>> D=feval(inline('cos(x)+tan(x)'),pi/7)
D = 1.3825
06 archivos de función 16