Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Scripts y funciones

Descripción general

MATLAB® ofrece un potente lenguaje de programación, así como un entorno computacional interactivo. Es posible introducir comandos del lenguaje uno por uno en la línea de comandos de MATLAB, o en su lugar, escribir una serie de comandos en un archivo y luego ejecutarlo como cualquier función de MATLAB. Use el editor de MATLAB o cualquier otro editor de texto para crear sus propios archivos de funciones. Llame a estas funciones como lo haría con cualquier otra función o comando de MATLAB.

Existen dos tipos de archivos de programa:

  • Scripts, que no aceptan argumentos de entrada ni devuelven argumentos de salida. Operan sobre datos en el área de trabajo.

  • Funciones, que aceptan argumentos de entrada y devuelven argumentos de salida. Las variables internas son locales para la función.

Si usted es un programador nuevo de MATLAB, basta con que cree en la carpeta actual los archivos de programa que desee probar. A medida que desarrolle más archivos propios, querrá organizarlos en otras carpetas y toolboxes personales que pueda agregar a su ruta de búsqueda de MATLAB.

Si duplica nombres de funciones, MATLAB ejecuta aquella que aparece primero en la ruta de búsqueda.

Para ver el contenido de un archivo de programa, por ejemplo, myfunction.m, use

type myfunction

Scripts

Cuando invoca un script, MATLAB simplemente ejecuta los comandos que se encuentran en el archivo. Los scripts pueden operar en datos existentes en el área de trabajo, o pueden crear datos nuevos en los cuales operar. Aunque los scripts no devuelven argumentos de salida, cualquier variable creada por ellos permanece en el área de trabajo para ser utilizada en cálculos posteriores. Además, los scripts pueden producir gráficas mediante el uso de funciones como plot.

Por ejemplo, cree un archivo llamado magicrank.m que contenga estos comandos de MATLAB:

% Investigate the rank of magic squares
r = zeros(1,32);
for n = 3:32
   r(n) = rank(magic(n));
end
bar(r)

Si escribe la instrucción

magicrank

MATLAB puede ejecutar los comandos, calcular el rango de los primeros 30 cuadrados mágicos y producir un gráfico de barras del resultado. Una vez concluida la ejecución del archivo, las variables n y r se conservan en el área de trabajo.

Funciones

Las funciones son archivos que pueden aceptar argumentos de entrada y devolver argumentos de salida. Los nombres del archivo y de la función deben ser iguales. Las funciones operan en variables dentro de su propia área de trabajo, en un espacio separado del área de trabajo a la que se accede desde la línea de comandos de MATLAB.

La función rank es un buen ejemplo. El archivo rank.m está disponible en la carpeta

toolbox/matlab/matfun

Puede ver el archivo con

type rank

Este es el archivo:

function r = rank(A,tol)
%   RANK Matrix rank.
%   RANK(A) provides an estimate of the number of linearly
%   independent rows or columns of a matrix A.
%   RANK(A,tol) is the number of singular values of A
%   that are larger than tol.
%   RANK(A) uses the default tol = max(size(A)) * norm(A) * eps.

s = svd(A);
if nargin==1
   tol = max(size(A)') * max(s) * eps;
end
r = sum(s > tol);

La primera línea de una función comienza con la palabra clave function. En ella se proporciona el nombre de la función y el orden de los argumentos. En este caso, hay hasta dos argumentos de entrada y un argumento de salida.

Las siguientes líneas, hasta la primera línea en blanco o ejecutable, son líneas de comentarios que contienen el texto de ayuda. Estas líneas se imprimen cuando se escribe

help rank

La primera línea del texto de ayuda es la línea H1. MATLAB muestra esta línea cada vez que se usa el comando lookfor o se solicita help en una carpeta.

El resto del archivo está conformado por el código ejecutable de MATLAB que define la función. La variable s introducida en el cuerpo de la función, así como las variables de la primera línea, r, A y tol, son locales de la función; están separadas de cualquier otra variable del área de trabajo de MATLAB.

En este ejemplo se ilustra un aspecto de las funciones de MATLAB que no se encuentra comúnmente en otros lenguajes de programación: el número variable de argumentos. La función rank se puede usar de varias formas diferentes:

rank(A)
r = rank(A)
r = rank(A,1.e-6)

Muchas funciones operan de esta forma. Si no se proporciona un argumento de salida, el resultado se almacena en ans. Si no se proporciona el segundo argumento de entrada, la función calcula un valor predeterminado. Dentro del cuerpo de una función, hay dos cantidades llamadas nargin y nargout que indican la cantidad de argumentos de entrada y salida implicados en cada uso particular de la función. La función rank utiliza nargin, pero no necesita usar nargout.

Tipos de funciones

MATLAB ofrece varios tipos diferentes de funciones para usar en la programación.

Funciones anónimas

Una función anónima es una forma simple de la función de MATLAB que se define dentro de una sola instrucción de MATLAB. Está formada por una sola expresión de MATLAB y con cualquier cantidad de argumentos de entrada y salida. Es posible definir una función anónima en la línea de comandos de MATLAB o dentro de una función o script. Esta alternativa ofrece una forma rápida de crear funciones simples sin tener que volver a crear un archivo nuevo para ellas cada vez.

La sintaxis para la creación de una función anónima a partir de una expresión es

f = @(arglist)expression

La siguiente instrucción crea una función anónima que busca el cuadrado de un número. Cuando se llama a esta función, MATLAB asigna el valor del argumento de entrada a la variable x, y luego usa x en la ecuación x.^2:

sqr = @(x) x.^2;

Para ejecutar la función sqr, escriba

a = sqr(5)
a =
   25

Funciones principales y locales

Cualquier función que no sea anónima debe definirse dentro de un archivo. Cada archivo de función contiene una función principal obligatoria que aparece primero, y cualquier número de funciones locales que pueden seguir a la principal. Las funciones principales tienen un alcance más amplio que las funciones locales. Es decir, las funciones principales pueden ser llamadas desde fuera del archivo que las define (por ejemplo, desde la línea de comandos de MATLAB o desde funciones en otros archivos), mientras que las funciones locales no. Las funciones locales solo son visibles para la función principal y otras funciones locales dentro de su propio archivo.

La función rank que aparece en la sección Funciones es un ejemplo de una función principal.

Funciones privadas

Una función privada es un tipo de función principal. La característica que la distingue es que es visible solo para un grupo limitado de otras funciones. Este tipo de función puede ser útil si se desea limitar el acceso a una función, o cuando se escoge no exponer la implementación de una función.

Las funciones privadas se encuentran en subcarpetas con el nombre especial private. Son visibles solo para las funciones de la carpeta principal. Por ejemplo, suponga que la carpeta newmath está en la ruta de búsqueda de MATLAB. Una subcarpeta de newmath llamada private puede contener funciones que solo pueden ser llamadas por las funciones de newmath.

Como las funciones privadas son invisibles fuera de la carpeta principal, pueden usar los mismos nombres que funciones de otras carpetas. Esto es útil si desea crear su propia versión de una función en particular y, a la vez, conservar la original en otra carpeta. Debido a que MATLAB busca las funciones privadas antes que las funciones estándar, encontrará una función privada llamada test.m antes que un archivo no privado llamado test.m.

Funciones anidadas

Es posible definir funciones dentro del cuerpo de otra función. Se dice que estas se encuentran anidadas dentro de la función exterior. Una función anidada contiene algunos o todos los componentes de cualquier otra función. En este ejemplo, la función B está anidada en la función A:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

Al igual que otras funciones, una función anidada tiene su propia área de trabajo, que contiene las variables que utiliza la función. Sin embargo, también tiene acceso a las áreas de trabajo de todas las funciones en las cuales está anidada. Así, por ejemplo, una función anidada en cualquier nivel dentro de la función principal puede leer o sobrescribir una variable que tenga un valor asignado por esa función principal. De manera similar, una variable asignada en una función anidada puede ser leída o sobrescrita por cualquiera de las funciones que contengan dicha función.

Variables globales

Si desea que más de una función comparta una copia única de una variable, simplemente declare la variable como global en todas las funciones. Haga lo mismo en la línea de comandos si desea que el área de trabajo base tenga acceso a la variable. La declaración global debe producirse antes de que la variable se utilice por primera vez en una función. Aunque no es obligatorio, el uso de mayúsculas para los nombres de las variables globales ayuda a distinguirlas de otras variables. Por ejemplo, cree una nueva función en un archivo llamado falling.m:

function h = falling(t)
global GRAVITY
h = 1/2*GRAVITY*t.^2;

Luego, introduzca de forma interactiva las instrucciones

global GRAVITY
GRAVITY = 32;
y = falling((0:.1:5)');

Las dos instrucciones globales hacen que el valor asignado a GRAVITY en la línea de comandos también esté disponible dentro de la función. Luego, puede modificar GRAVITY de manera interactiva y obtener nuevas soluciones sin editar ningún archivo.

Sintaxis de comandos y sintaxis de funciones

Es posible escribir funciones de MATLAB que acepten argumentos de caracteres sin paréntesis ni comillas. Es decir, MATLAB interpreta

foo a b c

como

foo('a','b','c')

Sin embargo, cuando usa la forma de comando sin comillas, MATLAB no puede devolver argumentos de salida. Por ejemplo:

legend apples oranges

crea una leyenda en una gráfica usando apples y oranges como etiquetas. Si desea que el comando legend devuelva sus argumentos de salida, entonces debe usar la forma con comillas:

[legh,objh] = legend('apples','oranges');

Además, debe usar la forma con comillas si cualquiera de los argumentos no es un vector de caracteres.

Precaución

Aunque la sintaxis de comandos sin comillas es conveniente, en algunos casos puede usarse de forma incorrecta sin provocar la generación de un error de MATLAB.

Construcción de argumentos de caracteres en código

La forma funcional con comillas permite construir argumentos de caracteres dentro del código. El siguiente ejemplo procesa varios archivos de datos, August1.dat, August2.dat, etc. Utiliza la función int2str, que convierte un entero en un carácter, para construir el nombre del archivo:

for d = 1:31
   s = ['August' int2str(d) '.dat'];
   load(s) 
   % Code to process the contents of the d-th file
end