Cómo crear funciones en MATLAB: guía completa paso a paso

  • Las funciones en MATLAB permiten encapsular tareas para su reutilización y mantenimiento eficiente.
  • Existen distintos tipos de funciones: normales, anónimas, anidadas y subfunciones.
  • El uso de identificadores de función permite pasar funciones como argumentos dentro de otras funciones.
  • Guardar las funciones en archivos .m con el mismo nombre facilita su gestión y ejecución.

crear funciones en Matlab

MATLAB es uno de los lenguajes de programación más utilizados en ciencia, ingeniería y matemáticas por su potencia para realizar cálculos complejos, modelado y análisis de datos. Uno de sus pilares fundamentales es la posibilidad de crear funciones personalizadas para encapsular tareas específicas y reutilizar código eficientemente.

Si alguna vez te has enfrentado a la necesidad de repetir cálculos o procesos similares dentro de un proyecto en MATLAB, crear funciones propias puede convertirse en tu mejor solución. En este artículo vamos a explorar en profundidad cómo definir, utilizar y organizar funciones en MATLAB, desde lo más básico hasta técnicas más avanzadas como funciones anónimas, identificadores de función, subfunciones y llamadas entre funciones.

¿Qué es una función en MATLAB?

Una función en MATLAB es un bloque de código que recibe como entrada uno o varios valores, realiza una operación con ellos y devuelve una o varias salidas. Estas funciones están diseñadas para ejecutarse dentro de scripts, otras funciones o desde la ventana de comandos.

Las funciones nos permiten seguir una programación estructurada, descomponiendo un programa en partes más pequeñas, cada una encargada de una tarea concreta. Esto favorece la modularidad, facilita el mantenimiento del código y ayuda a reutilizar funciones en diferentes programas. Si quieres conocer más sobre la estructura de programación modular, puedes consultarlo aquí:

Integrando AutoCAD Electrical con otros software de ingeniería

Sintaxis básica y estructura de una función

Las funciones se escriben en archivos con extensión .m, y el nombre del archivo debe coincidir con el nombre de la función principal que contiene. La estructura básica es la siguiente:

function [salida1, salida2, ...] = nombreFuncion(entrada1, entrada2, ...)
    % Comentarios descriptivos
    % Cuerpo de la función
end

Por ejemplo, una función que calcula el valor mínimo y máximo de un vector podría escribirse así:

function y = rango(x)
    % Calcula el mínimo y el máximo de un vector x
    y = [min(x) max(x)];
end

Las variables de entrada se indican entre paréntesis tras el nombre de la función. Las salidas se indican entre corchetes si hay más de una. Dentro de la función se pueden incluir comentarios con el símbolo %, que además se mostrarán en la ayuda si el usuario escribe help nombreFuncion.

Ejemplo práctico: función para obtener el mínimo y máximo

Imagina que tienes un vector v = rand(1,6) con valores aleatorios. Si aplicas la función anterior:

>> v = rand(1,6);
>> rango(v)
ans = 0.031225  0.991870

Matlab te devolverá el mínimo y el máximo del vector. También podríamos definir esta función para que retorne explícitamente los dos valores por separado:

function [minx, maxx] = minmax(x)
    maxx = max(x);
    minx = min(x);
end

Al llamar a [minV, maxV] = minmax(v), obtendrás las dos salidas separadas. Es importante destacar que si no asignas ambas salidas explícitamente, por defecto solo se mostrará la primera (en este caso, minx). Si deseas profundizar sobre variables y resultados, te invito a ver otra fuente útil que explica mucho sobre el tema:

Errores comunes al definir funciones

Un error frecuente es olvidar calcular una de las variables de salida dentro del cuerpo de la función. Esto puede generar salidas vacías o incluso advertencias. Por ejemplo, si defines:

function [minx, maxx] = minmax2(x)
    maxx = max(x);
    minimo = min(x); % 'minimo' no es 'minx'
end

La variable minx no se ha calculado y, por tanto, estará vacía, lo que puede llevar a mensajes de advertencia.

Crear funciones en la ventana de comandos

También se pueden escribir funciones directamente en la ventana de comandos, aunque esta opción se reserva para funciones muy simples o pruebas rápidas. No es recomendable para funciones complejas, ya que no se pueden editar fácilmente ni guardar de forma permanente.

Guardar funciones en archivos .m

Para usar una función de forma permanente, debes crear un archivo con el mismo nombre que la función y extensión .m. Debe guardarse en una ruta que MATLAB reconozca. Puedes verificar los directorios incluidos con el comando path, y añadir nuevos directorios con addpath('ruta').

Ejemplo completo: resolver ecuaciones de segundo grado

Vamos a construir una función que resuelva ecuaciones del tipo:

ax^2 + bx + c = 0

La función podría ser algo así:

function x = resuelveEc2G(a,b,c)
    discrim = b^2 - 4*a*c;
    x1 = (-b - sqrt(discrim))/(2*a);
    x2 = (-b + sqrt(discrim))/(2*a);
    x = [x1; x2];
end

Al ejecutarla:

>> resuelveEc2G(1, -1, -6)
ans = -2
       3

MATLAB admite números complejos, por lo que si el discriminante es negativo, las raíces de tipo complejo también se calculan correctamente.

Dividir tareas en funciones auxiliares

Una buena práctica de programación es dividir las tareas en bloques pequeños y claros. Supongamos que queremos pedir al usuario coeficientes para una ecuación, resolverla y representar su gráfica. En lugar de tenerlo todo en una sola función, podemos dividirlo así:

  • pideCoeficientesEc2G: solicita al usuario los coeficientes a, b y c
  • resuelveEc2G: resuelve la ecuación con esos coeficientes
  • dibujaParabola: dibuja la parábola resultante y sus puntos de corte

Una función principal llamada ec2G puede llamarlas en el orden adecuado para unirlas:

function ec2G()
    [a,b,c,error] = pideCoeficientesEc2G();
    if ~error
        raices = resuelveEc2G(a,b,c);
        disp('Las raíces de la ecuación son:');
        disp(raices);
        if imag(raices(1)) == 0
            dibujaParabola([a,b,c], raices);
        end
    end
end

Identificadores de función

Un identificador de función (function handle) permite utilizar una función como si fuese un valor, y se asigna con el operador @. Por ejemplo:

f = @cuadrado;

Ahora puedes usar f como si fuera la función cuadrado directamente:

b = f(2); % Devuelve 4

Esto es especialmente útil si quieres pasar funciones como argumento a otras, como por ejemplo:

integral(@cuadrado, 1, 3)

También puedes definir identificadores directamente en la llamada:

integral(@(x) x.^2, 1, 3)

Funciones anónimas: rápidas y poderosas

Una función anónima es una función definida en una sola línea, útil para tareas simples o temporales. Su sintaxis es:

h = @(x) 2*(x.^2)*exp(-x);

Puedes usarla directamente:

g(1)
ans = 0.73576

Una ventaja es que puedes integrarlas en otras funciones sin necesidad de crear archivos separados.

Funciones dentro de funciones

MATLAB permite definir varias funciones en el mismo archivo. La función que coincida con el nombre del archivo es la función principal, y el resto se conocen como subfunciones. Aunque no son visibles desde fuera del archivo, sí pueden llamarse entre sí dentro del mismo.

También existen funciones anidadas, que están definidas dentro del cuerpo de otra función. A diferencia de las subfunciones, las anidadas pueden acceder a las variables de la función externa.

Ejercicio de ejemplo con funciones anidadas

Supón que tienes una función para calcular la media y desviación estándar de un conjunto de datos. Puedes definir funciones anidadas así:

function [med,des] = estadistica_1(x)
    n = length(x);
    media();
    desviacion();

    function media()
        med = sum(x)/n;
    end

    function desviacion()
        xd = x - med;
        des = sqrt(sum(xd.^2)/(n-1));
    end
end

Esto hace que las funciones internas accedan a variables del entorno externo, evitando tener que pasarlas como argumentos.

Funciones como argumentos: derivadas numéricas

Una aplicación muy interesante es definir una función que reciba otra como argumento. Veamos cómo calcular una derivada en un punto:

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

Definimos una función anónima:

f1 = @(x) x^3 - 6*x^2 + 3;

Y luego calculamos su derivada:

derivada(f1, 2)
ans = -12.0000

Incluso podrías calcular una segunda derivada como:

f2 = @(x) derivada(f1, x);

Casos prácticos: más ejemplos de funciones

    • Conversión de temperatura:
function F = C2F(C)
    F = (9/5)*C + 32;
end
    • Distancia euclídea entre dos vectores:
function d = distancia(u,v)
    d = sqrt(sum((u - v).^2));
end
    • Suma de resultados al lanzar dados:
function [valores, total] = lanzarDados(n)
    valores = randi(6, 1, n);
    total = sum(valores);
end
    • Media por columnas en una matriz:
function medias = mediaColumnas(A)
    medias = mean(A);
end

La creación y uso de funciones en MATLAB es una herramienta imprescindible para organizar mejor nuestros programas, reducir errores y mejorar la eficiencia del código. A través de este recorrido completo, ahora sabes cómo definir funciones básicas, anónimas, anidadas, cómo usarlas como argumentos y estructurar programas completos reutilizando tareas. Dominar estas técnicas te permitirá abordar proyectos más ambiciosos con mayor confianza y claridad.

Deja un comentario