MATLAB - Funciones
Una función es un grupo de declaraciones que juntas realizan una tarea. En MATLAB, las funciones se definen en archivos separados. El nombre del archivo y de la función debe ser el mismo.
Las funciones operan en variables dentro de su propio espacio de trabajo, que también se llama local workspace, separado del espacio de trabajo al que accede en el símbolo del sistema de MATLAB, que se denomina base workspace.
Las funciones pueden aceptar más de un argumento de entrada y pueden devolver más de un argumento de salida.
La sintaxis de una declaración de función es:
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
Ejemplo
La siguiente función llamada mymax debe escribirse en un archivo llamado mymax.m . Toma cinco números como argumento y devuelve el máximo de números.
Cree un archivo de función, llamado mymax.m y escriba el siguiente código en él:
function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end
La primera línea de una función comienza con la palabra clave function. Da el nombre de la función y el orden de los argumentos. En nuestro ejemplo, la función mymax tiene cinco argumentos de entrada y un argumento de salida.
Las líneas de comentarios que vienen inmediatamente después de la declaración de función proporcionan el texto de ayuda. Estas líneas se imprimen cuando escribe:
help mymax
MATLAB ejecutará la declaración anterior y devolverá el siguiente resultado:
This function calculates the maximum of the
five numbers given as input
Puede llamar a la función como -
mymax(34, 78, 89, 23, 11)
MATLAB ejecutará la declaración anterior y devolverá el siguiente resultado:
ans = 89
Funciones anónimas
Una función anónima es como una función en línea en los lenguajes de programación tradicionales, definida dentro de una sola declaración de MATLAB. Consiste en una sola expresión MATLAB y cualquier número de argumentos de entrada y salida.
Puede definir una función anónima directamente en la línea de comandos de MATLAB o dentro de una función o script.
De esta manera puede crear funciones simples sin tener que crear un archivo para ellas.
La sintaxis para crear una función anónima a partir de una expresión es
f = @(arglist)expression
Ejemplo
En este ejemplo, escribiremos una función anónima llamada potencia, que tomará dos números como entrada y devolverá el primer número elevado a la potencia del segundo número.
Cree un archivo de script y escriba el siguiente código en él:
power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)
Cuando ejecuta el archivo, muestra:
result1 = 343
result2 = 7
result3 = 1.0000e-10
result4 = 9.5459
Funciones primarias y secundarias
Cualquier función que no sea una función anónima debe definirse dentro de un archivo. Cada archivo de función contiene una función primaria requerida que aparece primero y cualquier número de subfunciones opcionales que vienen después de la función primaria y son utilizadas por esta.
Las funciones primarias se pueden llamar desde fuera del archivo que las define, ya sea desde la línea de comandos o desde otras funciones, pero las subfunciones no se pueden llamar desde la línea de comandos u otras funciones fuera del archivo de funciones.
Las subfunciones son visibles solo para la función principal y otras subfunciones dentro del archivo de función que las define.
Ejemplo
Escribamos una función llamada cuadrática que calcularía las raíces de una ecuación cuadrática. La función tomaría tres entradas, el coeficiente cuadrático, el coeficiente lineal y el término constante. Devolvería las raíces.
El archivo de función quadratic.m contendrá la función principal cuadrática y el disco de subfunción , que calcula el discriminante.
Cree un archivo de función quadratic.m y escriba el siguiente código en él:
function [x1,x2] = quadratic(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
Puede llamar a la función anterior desde el símbolo del sistema como:
quadratic(2,4,-4)
MATLAB ejecutará la declaración anterior y devolverá el siguiente resultado:
ans = 0.7321
Funciones anidadas
Puede definir funciones dentro del cuerpo de otra función. Se denominan funciones anidadas. Una función anidada contiene alguno o todos los componentes de cualquier otra función.
Las funciones anidadas se definen dentro del alcance de otra función y comparten el acceso al espacio de trabajo de la función que las contiene.
Una función anidada sigue la siguiente sintaxis:
function x = A(p1, p2)
...
B(p2)
function y = B(p3)
...
end
...
end
Ejemplo
Reescribamos la función cuadrática , del ejemplo anterior, sin embargo, esta vez la función de disco será una función anidada.
Cree un archivo de función quadratic2.m y escriba el siguiente código en él:
function [x1,x2] = quadratic2(a,b,c)
function disc % nested function
d = sqrt(b^2 - 4*a*c);
end % end of function disc
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of function quadratic2
Puede llamar a la función anterior desde el símbolo del sistema como:
quadratic2(2,4,-4)
MATLAB ejecutará la declaración anterior y devolverá el siguiente resultado:
ans = 0.73205
Funciones privadas
Una función privada es una función principal que solo es visible para un grupo limitado de otras funciones. Si no desea exponer la implementación de una (s) función (es), puede crearlas como funciones privadas.
Las funciones privadas residen en subfolders con el nombre especial private.
Solo son visibles para las funciones de la carpeta principal.
Ejemplo
Reescribamos la función cuadrática . Esta vez, sin embargo, la función de disco que calcula el discriminante será una función privada.
Cree una subcarpeta denominada privada en el directorio de trabajo. Almacene el siguiente archivo de función disc.m en él:
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
Cree una función quadratic3.m en su directorio de trabajo y escriba el siguiente código en ella:
function [x1,x2] = quadratic3(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic3
Puede llamar a la función anterior desde el símbolo del sistema como:
quadratic3(2,4,-4)
MATLAB ejecutará la declaración anterior y devolverá el siguiente resultado:
ans = 0.73205
Variables globales
Las variables globales pueden ser compartidas por más de una función. Para ello, debe declarar la variable como global en todas las funciones.
Si desea acceder a esa variable desde el espacio de trabajo base, declare la variable en la línea de comando.
La declaración global debe ocurrir antes de que la variable se use realmente en una función. Es una buena práctica utilizar letras mayúsculas para los nombres de las variables globales para distinguirlas de otras variables.
Ejemplo
Creemos un archivo de función llamado average.m y escriba el siguiente código en él:
function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end
Cree un archivo de script y escriba el siguiente código en él:
global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)
Cuando ejecute el archivo, mostrará el siguiente resultado:
av = 35.500