October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
funciones MATLAB

Cómo crear funciones en MATLAB: sintaxis, ejemplos y errores comunes

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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

  1. En MATLAB, selecciona Home > New Script o crea un archivo de texto con extensión .m.
  2. Escribe la definición, por ejemplo:
    function y = duplicar(x)
        y = 2 .* x;
    end
  3. 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.
  4. Coloca el archivo en la carpeta actual de MATLAB o en una carpeta incluida en el MATLAB path.
  5. En la ventana de comandos, ejecuta resultado = duplicar(7). La variable resultado contiene 14.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
pwd
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).

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read next

Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.