Para crear una función reutilizable en MATLAB, define sus entradas y salidas con la palabra clave function, guarda la función principal en un archivo .m con el mismo nombre y asegúrate de que MATLAB pueda encontrar ese archivo. Por ejemplo, guarda el siguiente código como duplicar.m y ejecútalo con duplicar(7):
function y = duplicar(x)
y = 2 .* x;
end
La función devuelve 14. A continuación se explica cómo crearla, documentarla, validar sus datos, elegir el tipo adecuado y resolver los errores habituales.
Qué es una función y cuándo conviene usarla
Una función encapsula una tarea: recibe cero o más entradas, ejecuta instrucciones en su propio espacio de trabajo y puede devolver cero o más resultados. Sirve para reutilizar código, evitar duplicaciones y mantener separadas las partes de un programa.
| Aspecto | Script | Función |
|---|---|---|
| Datos de entrada y salida | No los declara formalmente; suele trabajar con variables disponibles en el espacio de trabajo base. | Declara entradas y salidas en su firma. |
| Espacio de trabajo | Usa el espacio de trabajo base cuando se ejecuta desde la ventana de comandos. | Tiene un espacio de trabajo local; las variables externas no están disponibles automáticamente. |
| Uso habitual | Ejecutar una secuencia de instrucciones. | Crear una unidad reutilizable y fácil de probar. |
Por ejemplo, una función para calcular el área de un rectángulo puede recibir la base y la altura y devolver el área:
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware match#1 Best Overall
function A = areaRectangulo(base, altura)
A = base .* altura;
end
Al llamarla como A = areaRectangulo(4, 3), el resultado es 12. La documentación de MathWorks explica los fundamentos de las funciones en Functions.
Crear y ejecutar una función en un archivo .m
- En MATLAB, selecciona Home > New Script o crea un archivo de texto con extensión
.m. - Escribe la definición, por ejemplo:
function y = duplicar(x) y = 2 .* x; end - Guarda el archivo como
duplicar.m. Para la función principal de un archivo, usa como nombre del archivo el mismo nombre que la función. - Coloca el archivo en la carpeta actual de MATLAB o en una carpeta incluida en el MATLAB path.
- En la ventana de comandos, ejecuta
resultado = duplicar(7). La variableresultadocontiene14.
La carpeta actual y el path determinan dónde busca MATLAB los archivos de función. La guía de MathWorks sobre funciones en archivos describe la sintaxis, los nombres y la organización de estos archivos.
Entender la sintaxis de function
La forma general es function [salida1, salida2] = nombreFuncion(entrada1, entrada2). La palabra clave function inicia la definición; el nombre identifica la función; los paréntesis declaran entradas; y los corchetes contienen las salidas, si hay más de una.
Una entrada y una salida
function resultado = cuadrado(x)
resultado = x.^2;
end
Varias entradas y salidas
function [suma, producto] = operaciones(a, b)
suma = a + b;
producto = a .* b;
end
Se llama con [s, p] = operaciones(3, 4). Si solo necesitas una de las salidas, puedes ignorar la otra con el operador ~: [~, p] = operaciones(3, 4).
Free tools Windows power users keep installed
One-click scans. No signup required.
Sin entradas o sin salidas
function fecha = obtenerFecha()
fecha = datetime("today");
end
function mostrarMensaje()
disp("Hola")
end
La salida vacía también puede escribirse como function [] = mostrarMensaje(), aunque normalmente se omiten los corchetes. Los nombres de funciones comienzan con una letra y pueden contener letras, números y guiones bajos; no deben tener espacios ni comenzar con un número. Cerrar las funciones con end hace más legibles los archivos con varias definiciones y evita ambigüedades en estructuras anidadas o locales.
Hacer que la función acepte escalares y vectores
En MATLAB, *, / y ^ representan operaciones matriciales; sus equivalentes elemento a elemento son .*, ./ y .^. Si quieres que una expresión opere elemento a elemento sobre un vector, usa los operadores con punto:
function y = polinomio(x)
y = 3 .* x.^2 + 2 .* x + 1;
end
x = [1 2 3];
y = x.^2
El resultado es [1 4 9]. En cambio, x^2 intenta elevar una matriz al cuadrado mediante multiplicación matricial, lo que no es una operación válida para cualquier vector fila.
Documentar la función para que otros puedan usarla
Coloca comentarios descriptivos inmediatamente después de la línea de definición. La primera línea de comentario suele ser la línea de ayuda principal, que puede consultarse con help.
Rank #2
function area = areaCirculo(radio)
% AREACIRCULO Calcula el área de un círculo.
% AREA = AREACIRCULO(RADIO) devuelve el área para RADIO.
% RADIO debe expresarse en las unidades de longitud elegidas.
area = pi .* radio.^2;
end
Prueba help areaCirculo para ver la ayuda en la ventana de comandos o doc areaCirculo para abrir la documentación disponible. Explica el propósito de la función, las entradas esperadas, las unidades, las salidas y las restricciones: así se puede usar sin tener que inspeccionar cada instrucción.
Validar las entradas
En versiones modernas de MATLAB, un bloque arguments expresa restricciones de tipo, tamaño y valor que MATLAB comprueba antes de ejecutar el cuerpo de la función. Ajusta esas restricciones al contrato real: si declaras un escalar positivo, por ejemplo, un vector o cero no serán entradas válidas.
function area = areaCirculo(radio)
arguments
radio (1,1) double {mustBePositive}
end
area = pi * radio^2;
end
Para aceptar un vector numérico, la validación puede ser distinta. También es posible emitir errores explícitos para condiciones que no cubra la declaración:
function y = normalizarVector(x)
arguments
x double
end
if isempty(x)
error("La entrada x no puede estar vacía.")
end
y = x ./ norm(x);
end
Elige validadores como mustBePositive, mustBeNumeric o mustBeMember según los datos admitidos; una restricción innecesaria puede rechazar usos legítimos. nargin cuenta cuántos argumentos posicionales recibió la función, pero no valida por sí solo su tipo, tamaño o contenido. Consulta la referencia de nargin para sus detalles.
Opciones y cantidades variables de argumentos
Un argumento opcional con valor predeterminado
Para una opción sencilla, puedes comprobar cuántas entradas se proporcionaron y asignar un valor si falta la segunda:
function y = elevar(x, exponente)
if nargin < 2
exponente = 2;
end
y = x .^ exponente;
end
elevar(4) calcula el cuadrado; elevar(4, 3) calcula el cubo.
Un número variable de entradas o salidas
varargin recoge entradas adicionales en una celda; varargout permite construir salidas variables. Son variables especiales, no funciones ordinarias.
function total = sumarTodos(varargin)
total = 0;
for k = 1:numel(varargin)
total = total + varargin{k};
end
end
La llamada sumarTodos(1, 2, 3, 4) devuelve 10. Una función con salidas variables puede asignarlas a varargout, por ejemplo, los extremos de un vector:
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Rank #3
function varargout = separarExtremos(x)
varargout{1} = min(x);
varargout{2} = max(x);
end
En funciones anidadas, varargin y varargout tienen particularidades de alcance; revisa la documentación de MathWorks sobre comprobación de argumentos en funciones anidadas si combinas esas características.
Funciones anónimas y handles
Cuándo usar una función anónima
Una función anónima es adecuada para una expresión corta que no necesita un archivo propio ni varias instrucciones. Se define con @ seguido de los argumentos:
cuadrado = @(x) x.^2;
resultado = cuadrado(5);
distancia = @(x, y) sqrt(x.^2 + y.^2);
También se puede pasar a otra función, por ejemplo f = @(x) x.^2 + 3*x + 1 y luego integral(f, 0, 2). Los handles anónimos suelen devolver una salida y pueden capturar los valores presentes al crearlos:
a = 3;
b = 2;
f = @(x) a*x + b;
clear a b
f(4)
La llamada sigue usando los valores capturados. Para lógica extensa, validación o documentación, una función normal resulta más clara. La guía oficial cubre las funciones anónimas.
Recommended Free Tools
Referirse a una función existente con @
@sin crea un handle a la función; sin(pi) la ejecuta. Se puede pasar ese handle como entrada a otra función:
function y = aplicarFuncion(f, x)
y = f(x);
end
resultado = aplicarFuncion(@cos, 0);
otroResultado = aplicarFuncion(@(x) x.^3, 2);
La sintaxis distingue el handle f = @sin de la llamada y = sin(pi). Para inspeccionar metadatos de un handle durante la depuración, puedes usar functions(f); MathWorks indica que esa información está orientada principalmente a inspección. Más información: crear un handle y la función functions.
Funciones locales en archivos, scripts y Live Scripts
Un archivo puede incluir una función principal y otras funciones locales que solo sirven como ayudantes internos. La primera función es la que se llama desde fuera usando el nombre del archivo; las definiciones posteriores no se pueden invocar desde la ventana de comandos ni desde otro archivo.
function [promedio, mediana] = resumen(x)
promedio = calcularPromedio(x);
mediana = median(x);
end
function resultado = calcularPromedio(x)
resultado = sum(x) / numel(x);
end
La función calcularPromedio solo está visible dentro de ese archivo. Si necesitas reutilizarla desde otros archivos, guárdala como una función principal en su propio archivo .m.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Rank #4
Los scripts y Live Scripts también pueden incluir funciones locales, pero estas mantienen un espacio de trabajo propio y no reciben automáticamente las variables del script: pásales los datos como argumentos. En scripts, la posición permitida de las funciones locales depende de la versión: desde R2024a pueden definirse en cualquier lugar permitido del archivo; en versiones anteriores debían ir después del código ejecutable. Colocarlas al final es una opción prudente si necesitas compatibilidad con versiones anteriores. El script debe contener código ejecutable fuera de las definiciones. Consulta la guía sobre funciones locales y funciones locales en scripts.
Funciones anidadas y alcance de variables
Una función anidada está definida dentro de otra función. A diferencia de una función local independiente, puede acceder a variables del ámbito exterior sin recibirlas de nuevo como argumentos. Esto es útil para crear un handle que conserva parámetros:
function f = crearSumador(a)
f = @sumar;
function resultado = sumar(x)
resultado = x + a;
end
end
sumarCinco = crearSumador(5);
valor = sumarCinco(3);
valor es 8. Esta característica puede ser útil para cierres y callbacks, pero añade complejidad al seguimiento de dependencias. Cuando no necesites compartir el ámbito exterior, pasar los datos de forma explícita suele ser más fácil de mantener. MathWorks describe las diferencias en los tipos de funciones.
Por la misma razón, una función como esta no debería depender de una variable creada en el espacio de trabajo base:
function y = usarVariable()
y = x + 1;
end
Si x solo existe fuera de la función, no se verá automáticamente. Declárala como entrada: function y = usarVariable(x). El uso de variables globales puede ocultar dependencias y causar efectos secundarios; no es una forma recomendable de compartir datos en código ordinario.
Estado persistente: cuándo usar persistent
Una variable persistent conserva su valor entre llamadas de una misma función:
function contador = incrementarContador()
persistent n
if isempty(n)
n = 0;
end
n = n + 1;
contador = n;
end
Cada llamada consecutiva devuelve el siguiente entero. Ese estado puede hacer que el resultado dependa de llamadas previas, lo cual complica las pruebas reproducibles. Para reiniciar la función y su variable persistente, normalmente puedes ejecutar clear incrementarContador.
Encontrar y corregir errores comunes
MATLAB no reconoce la función
El mensaje Unrecognized function or variable suele indicar un nombre mal escrito, un archivo guardado con otro nombre, una carpeta que no está en el path o un conflicto con otra función. Comprueba dónde estás y qué archivo encuentra MATLAB:
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemspwd
dir
which miFuncion -all
exist("miFuncion", "file")
Para cambiar a la carpeta que contiene el archivo o agregar una carpeta al path:
cd("C:UsersNombreDocumentsMATLAB")
addpath("C:UsersNombreDocumentsMATLABmisFunciones")
savepath
savepath intenta guardar el cambio para futuras sesiones. Si sospechas que MATLAB está resolviendo otro archivo con el mismo nombre, usa which nombreFuncion -all y evita nombres excesivamente genéricos.
Se pasan demasiadas entradas o se piden demasiadas salidas
El error de demasiados argumentos de entrada aparece cuando llamas a una función con más entradas de las declaradas. Por ejemplo, sumar(2, 3) no corresponde a function y = sumar(a); cambia la llamada o declara ambas entradas. El error de demasiados argumentos de salida ocurre si la función devuelve una salida y la llamas como [a, b] = cuadrado(3). Ajusta la llamada a la firma real o modifica la función para devolver las salidas necesarias.
La operación falla con vectores
Si una función que debería trabajar elemento a elemento contiene x^2, x*y o x/y, revisa si en realidad necesitas x.^2, x.*y o x./y. Para investigar los datos, inspecciona size(x), class(x) y isnumeric(x).
Una función local no se puede llamar desde la consola
Es el comportamiento esperado: una función local solo es visible dentro de su archivo. Si debe ser accesible desde otros lugares, conviértela en función principal de un archivo propio.
Probar y depurar una función
Verificar resultados esperados
Para resultados exactos sencillos, usa assert:
assert(areaRectangulo(4, 3) == 12)
assert(duplicar(4) == 8)
En resultados de punto flotante, compara con una tolerancia en vez de exigir igualdad exacta:
assert(abs(resultado - esperado) < 1e-10)
Detener la ejecución e inspeccionar variables
En el editor, haz clic en el margen junto a una línea para poner un punto de interrupción y ejecuta la función. Cuando se detenga, inspecciona las variables y avanza con las opciones de depuración del editor. Para detenerte automáticamente al producirse un error, usa dbstop if error; para quitar esa pausa, dbclear if error; y para salir del modo de depuración, dbquit.
Medir tiempo sin inventar resultados
tic y toc sirven para una medición rápida. Para comparar tiempos con más rigor, utiliza timeit(@() miFuncion(x)). El valor observado depende de la máquina, los datos y las condiciones de ejecución; no es una propiedad fija de la función.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Elegir entre archivo independiente, función local, anónima o anidada
| Tipo | Conviene cuando | Alcance y consideración |
|---|---|---|
| Función en archivo independiente | La tarea se reutiliza, se prueba por separado o constituye una parte pública del programa. | Se puede llamar desde otros archivos si MATLAB encuentra el archivo en la carpeta actual o en el path. |
| Función local | Es una ayuda interna que pertenece a un archivo o script. | Solo está disponible dentro de su archivo; recibe dependencias mediante argumentos. |
| Función anónima | La operación cabe en una expresión corta, como un callback o argumento a otra función. | Se crea con @(x); no es el mejor lugar para lógica extensa o validación compleja. |
| Función anidada | Una función interna necesita acceder al ámbito de la función exterior, por ejemplo para un cierre. | Puede capturar variables externas; esa relación de alcance puede hacer más difícil seguir dependencias. |
Ejemplo completo: estadísticas básicas
Guarda este código en estadisticasBasicas.m. Calcula tres resultados, documenta el contrato y rechaza una entrada vacía:
function [promedio, mediana, desviacion] = estadisticasBasicas(datos)
% ESTADISTICASBASICAS Calcula estadísticas básicas de un vector.
%
% [PROMEDIO, MEDIANA, DESVIACION] = ESTADISTICASBASICAS(DATOS)
% devuelve la media, la mediana y la desviación estándar de DATOS.
%
% DATOS debe ser un vector numérico no vacío.
arguments
datos (1,:) double
end
if isempty(datos)
error("estadisticasBasicas:DatosVacios", ...
"El vector datos no puede estar vacío.")
end
promedio = mean(datos);
mediana = median(datos);
desviacion = std(datos);
end
Para ejecutarla, llama a la función con las tres salidas:
x = [10 12 15 18 20];
[media, mediana, desviacion] = estadisticasBasicas(x);
Si solo necesitas la mediana, puedes ignorar las demás salidas con [~, mediana, ~] = estadisticasBasicas(x). La declaración de argumentos restringe datos a un vector fila de tipo double; la prueba de vacío aporta un mensaje de error explícito. Si quieres admitir otros tipos o vectores columna, ajusta el contrato y la validación en consecuencia.
Quick Recap
Buenas prácticas para funciones mantenibles
- Da a cada función un nombre descriptivo que indique la tarea.
- Declara como entradas los datos que la función necesita y usa las salidas para devolver resultados.
- Elige operadores elemento a elemento cuando la función deba aceptar vectores o arreglos de forma independiente por elemento.
- Documenta unidades, tamaños, tipos y restricciones importantes.
- Valida los datos según el uso previsto, sin imponer límites innecesarios.
- Evita variables globales como mecanismo normal para compartir estado.
- Prueba casos normales y límites, incluidos datos vacíos si el contrato los permite.
- Comprueba el nombre del archivo, la carpeta actual y el path cuando MATLAB no encuentra una función.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →




