Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

Scripts y funciones

Visió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 unscript, MATLAB simplemente ejecuta洛杉矶第一,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 comoplot.

Por ejemplo, cree un archivo llamadomagicrank.mque 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 una gráfica de barras del resultado. Una vez concluida la ejecución del archivo, las variablesnyrse 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ónrankes un buen ejemplo. El archivorank.mestá 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 clavefunction. 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 comandolookforo se solicitahelpen una carpeta.

El resto del archivo está conformado por el código ejecutable de MATLAB que define la función. La variablesintroducida en el cuerpo de la función, así como las variables de la primera línea,r,Aytol, sonlocalesde 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ónrankse 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 enans. 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 llamadasnarginynargoutque indican la cantidad de argumentos de entrada y salida implicados en cada uso particular de la función. La funciónrankutilizanargin, pero no necesita usarnargout.

Tipos de funciones

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

Funciones anónimas

Unafunción anónimaes una形式如果mple 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 variablex, y luego usaxen la ecuaciónx.^2:

sqr = @(x) x.^2;

Para ejecutar la funciónsqr, 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 unafunción principalobligatoria que aparece primero, y cualquier número defunciones localesque 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ónrankque aparece en la secciónFuncioneses un ejemplo de una función principal.

Funciones privadas

Unafunción privadaes 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 especialprivate. Son visibles solo para las funciones de la carpeta principal. Por ejemplo, suponga que la carpetanewmathestá en la ruta de búsqueda de MATLAB. Una subcarpeta denewmathllamadaprivatepuede contener funciones que solo pueden ser llamadas por las funciones denewmath.

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 llamadatest.mantes que un archivo no privado llamadotest.m.

Funciones anidadas

Es posible definir funciones dentro del cuerpo de otra función. Se dice que estas se encuentrananidadasdentro 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ónBestá anidada en la funciónA:

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 comoglobalen 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 llamadofalling.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 aGRAVITYen la línea de comandos también esté disponible dentro de la función. Luego, puede modificarGRAVITYde manera interactiva y obtener nueva solucionessin 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 usandoapplesyorangescomo etiquetas. Si desea que el comandolegenddevuelva 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ónint2str, 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