Funciones
La entrada y la salida puede ser una o varias variables, cada una de ellas puede ser un escalar, un vector o una matriz de cualquier tamaño.
Definición de una función
Las funciones se crean del mismo modo que un script seleccionado en el menú New/Function y se guardan en un fichero que tiene el mismo nombre que la función y extensión .m
La primera línea en el editor es la definición de la función que comienza con la palabra clave
function variables_salida=nombre_funcion(variables_entrada) sentencias end
nombre_funcion , es el nombre significativo que se le asigna a la función y coincide con el nombre del fichero de extensión .m en el que se guarda el código de dicha función. Las reglas para nombrar un función son las mismas que para las variables, los nombres no deben de incluir espacios, ni se pueden utilizar plabras reservadas por MATLAB.variables_entrada , es el conjunto de parámetros que se le pasa a la función. Los nombres de las variables van entre paréntesis y separadas por coma.variabales_salida , es el valor o conjunto de valores de las variables devueltos por la función. Las variables de salida van después de la palabra reservadafunction entre corchetes cuadrados y separados por comas si hay varios.sentencias , líneas de código que tomando los valores de los parámetros de entrada calculan mediante expresiones los valores que devuelve la función.end , marca el final de la función es opcional (salvo en las funciones anidadas) pero es conveniente acostumbrarse a ponerlo al finalizar la función.
Opcionalmente, en la segunda línea se pone un comentario, en el que se explica la tarea que realiza la función. A continuación, una explicación detallada sobre las variables de entrada y de salida
- Cuando una función no devuelve ningún valor, se define
- Cuando una funcion no precisa de variables de entrada se define
- Cuando una función devuelve una solo resultado
y se puede escribir, de dos maneras - En general, definiremos una función del siguiente modo:
con tres argumentos
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.
Vamos a ver unos cuantos ejemplos en esta página de funciones.
Ejemplos
Suma de dos números
Empezaremos por una función
Definición de la función
function [z] = suma (x,y) %Esta función suma dos números x e y %y devuelve el resultado de la suma en z z=x+y; %efectúa la suma end
A la función
La función se guarda en un fichero
El fichero que guarda la función tiene el mismo nombre que la función, tal como vemos al seleccionar en el Editor File/Save as...
Llamada a la función
La llamada a la función se puede hacer desde la ventana de comandos
>> suma(2,3) ans = 5
Se puede hacer desde un script
a=3; b=2; res=suma(a,b); disp(res)
En la llamada a la función
>> suma(2,3) ans = 5 >> x Undefined function or variable 'x'. >> z Undefined function or variable 'z'.
Como hemos visto hay que pasar los valores que guardan las variables
Sistema de ayuda
En la ventana de comandos escribimos
>> help suma Esta función suma dos números x e y y devuelve el resultado de la suma en z
aparecen los comentarios que hemos puesto al principio de la función, pero no aparecen el comentario "efectúa la suma", que hemos puesto en la tercera línea.
Movimiento de caída de los cuerpos

Las ecuaciones que describen el movimiento de caída de los cuerpos son:
Donde v0 y x0 es la velocidad inicial y la posición inicial, respectivamente.
Vamos a crear una función denominada
v=40-10·t
x=200+40·t-5·t2
Seleccionamos New/Function para abrir el editor de funciones.
- Definimos la función:
- La palabra clave function
- Las variables de salida entre corchetes cuadrados
[x,v] - El operador asignación =
- El nombre de la función,
caida_libre - Entre paréntesis la variable de entrada (
t ) - Escribimos el cuerpo de la función con dos sentencias que calculan la velocidad
v y la posiciónx cuando se proporciona el dato del tiempot - Finalizamos con
end . - Seleccionamos Save para guardar la función en el fichero
caida_libre.m con el mismo nombre que la función.
function [x,v] = caida_libre(t) v=40-10*t; x=200+40*t-5*t^2; end
En la ventana de comandos se llama a esta función
>> [pos,vel]=caida_libre(2) pos = 240 vel = 20
Que calcula y muestra, la velocidad v=20 m/s y la posición x=240 m en el instante t=2 s
En la llamada a la función
Si intentamos acceder a la variable
>> x,t ??? Undefined function or variable 'x'.
Si queremos que la función
function [x,v] = caida_libre(t) v=40-10*t; x=200+40*t-5*t.^2; end
En la ventana de comandos se llama a esta función
>> t=0:2:10; >> [pos,vel]=caida_libre(t) pos = 200 260 280 260 200 100 vel = 40 20 0 -20 -40 -60
Media y desviación estándar de un conjunto de datos
La definición de media y desviación estándar es la siguiente
Creamos una función denominada
function [med,des]=estadistica(x) n=length(x); med=sum(x)/n; des=sqrt(sum((x-med).^2/(n-1))); end
- La función
sum calcula la suma de los elementos de un vectorx - La función
length , calcula el número de elementos del vectorx .
Calcular la media y la desviación estándar de la altura de los 10 alumnos de una clase:
1.65, 1.82, 1.72, 1.75, 1.73, 1.85, 1.90, 1.74, 1.76, 1.77.
Escribimos el nombre de la función
>> [media, desviacion]= estadistica([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
MATLAB dispone de dos funciones que calculan la media
>> 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
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:
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.
Comparamos la definición de una función
function y=func(x) y=cos(x)-x; end
Llamada a la función
>> z=func(0.5) z = 0.3776
Su equivalente anónima se escribe en la ventana de comandos sin necesidad de guardarla en un fichero y se llama del mismo modo que cualquier otra función
>> f=@(x) cos(x)-x; >> z=f(0.5) z = 0.3776
En la ventana Workspace, vemos que aparece una variable
Sea una función anónima
>> a=4; >> f=@(x) a*x; >> f(3) ans = 12
Si cambiamos el valor de la variable
>> a=5; >> f(3) ans = 12
Teorema del coseno
Calculamos el lado c del triángulo si conocemos los lados a y b y el ángulo comprendido γ, mediante el teorema del coseno
>> c=@(a,b,gamma) sqrt(a^2+b^2-2*a*b*cosd(gamma)); >> lado=c(3,4,30) lado = 2.0531
Nota: MATLAB captura el valor de las variables cuando se define la función anónima. La función anónima
>> a=2; >> f=@(x) cos(a*x); >> f(0.5) ans = 0.5403
Ahora cambiamos el valor de la variable
>> a=3; >> f(0.5) ans = 0.5403
Para que la función
>> a=3; >> f=@(x) cos(a*x); >> f(0.5) ans = 0.0707
Vector de funciones
Aunque no es muy utilizado, definimos un vector de tres funciones y llamamos a cada una de ellas, del siguiente modo
>> f={@(x) x^2+1, @(x) sin(x)+1, @(x) exp(-x)-1}; >> f{2}(pi/6) %llama a la segunda ans = 1.5000 >> f{1}(0.5) %llama a la primera ans = 1.2500 >> f{3}(2) %llama a la tercera ans = -0.8647
Llamada a una función desde otra función
Existen mucha situaciones en las que una función
Ya hemos visto el significado de manejador para una función anónima, un valor que guarda una variable
Si definimos una función de forma explícita en un fichero por ejemplo, la función
La derivada de una función
Vamos ahora, a ver como se le pasa una función a otra función en uno de sus parámetros.
La derivada primera dy/dx, de una función y=f(x) en un punto x0, se puede calcular aproximadamente mediante la fórmula
donde h un un número pequeño en comparación con x0. Escribir una función denominada derivada, cuyos parámetros sean la función f, y la abscisa x0 y devuelva el valor de la derivada de la función f(x) en x0. Tomar h=10-5.
function yp= derivada(f,x0) h=1e-5; yp=(f(x0-2*h)-8*f(x0-h)+8*f(x0+h)-f(x0+2*h))/(12*h); end
En la ventana de comandos, definimos la función y=x3-6x2+3 (anónima) que queremos derivar y llamamos a la función
>> f1=@(x) x^3-6*x^2+3; >> derivada(f1,2) ans = -12.0000
Calculamos también la derivada segunda de una función en un punto del siguiente modo
>> f2=@(x) derivada(f1,x); >> derivada(f2,2) ans = 9.8686e-007
Comparamos con el valor exacto
Para x0=2, dy/dx=-12, d2y/dx2=0
Funciones definidas en el mismo fichero
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.
Las subfunciones permiten organizar tareas grandes en otras más pequeñas.
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.
Ecuación de segundo grado
ax2+bx+c=0
Las raíces son x1 y x2 y tienen las siguientes propiedades:
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 x1 y la segunda la raíz x2.
En el editor de funciones creamos la función
function [r1,r2]=comprobar_raices(a,b,c) x1=calcula_raiz1(a,b,c); x2=calcula_raiz2(a,b,c); r1=x1+x2; r2=x1*x2; end function raiz=calcula_raiz1(a,b,c) raiz=(-b+sqrt(b*b-4*a*c))/(2*a); end function raiz = calcula_raiz2(a,b,c) raiz=(-b-sqrt(b*b-4*a*c))/(2*a); end
Para comprobar las raíces de la ecuación de segundo grado x2-x-6=0, llamamos a la función
>> [b_a,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 función primaria y las anidadas deben obligatoriamente terminar con
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.
En el editor de funciones creamos la función
function [r1,r2]=comprobar_raices1(a,b,c) dis=sqrt(b*b-4*a*c); calcula_raiz1; calcula_raiz2; r1=x1+x2; r2=x1*x2; function calcula_raiz1 x1=(-b+dis)/(2*a); end function calcula_raiz2 x1=(-b-dis)/(2*a); end end
Vemos que las funciones anidadas
Estas funciones anidadas no precisan de variables de entrada y no devuelven nada.
Para comprobar las raíces de la ecuación de segundo grado x2-x-6=0, llamamos a la función
>> [b_a,c_a]=comprobar_raices(1,-1,-6) b_a = 1 c_a = -6
Como ejercicio se porpone al lector crear la función
En primer lugar, creamos la función
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 function res=desviacion(x,m,num) xd=x-m; xd_suma=sum(xd.^2); res=sqrt(xd_suma)/(num-1); end
Ahora trasladamos las funciones
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
En la ventana de comandos probamos las dos versiones de la función
>> [med,des]= estadistica_1([1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77]) med = 1.7690 des = 0.0713