5. ALGORITMOS Y PROGRAMAS

 

SCRIPTS Y FUNCIONES

 

Matlab, como cualquier otro lenguaje de programación, permite que los usuarios creemos nuestras propios scripts y funciones, los compilemos y los ejecutemos. Para ello disponemos de los ficheros con extensión *.m, ficheros sin formato usados por Matlab y que se pueden crear y modificar con un editor de textos cualquiera.

Los scripts en Matlab contienen un conjunto de comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero en la línea de comandos de Matlab o se incluye ese fichero en otro *.m. Si el fichero se ha llamado desde la línea de comandos las variables se guardan en el workspace y permanecen después de que se termine la ejecución de ese fichero.

Las funciones permiten definir funciones análogas a las de Matlab, con nombre, argumentos y valores de retorno. Las funciones definidas en ficheros *.m se caracterizan porque la primera línea (que no sea un comentario) comienza por la palabra function, seguida por los valores de retorno (entre corchetes [ ] y separados por comas, si hay más de uno), el signo igual (=) y el nombre de la función, seguido de los argumentos (entre paréntesis y separados por comas).

Los ficheros *.m pueden llamar a otros ficheros .*m o a sí mismos de forma recursiva, y los scripts también pueden llamarse desde funciones.

Scripts:

Los scripts son ficheros con extensión *.m que contienen una sucesión de comandos. Estos comandos se ejecutan de forma sucesiva cuando se teclea el nombre del fichero sin la extensión*.m. Por ejemplo, tenemos un script sencillo que calcula el área de un círculo, al que llamaremos area.m:

A=pi*r^2;
fprintf('El area del circulo con radio %4.2f es: %4.2f \n', r, A);

Si ahora vamos a la ventana de comandos y ejecutamos area (sin poner la extensión .m) tras haber guardado en una variable de nombre r el valor que queremos calcular la salida será la siguiente:

>> r= 13.2;
>> area
El area del circulo con radio 13.20 es: 547.39

Es recomendable poner punto y coma tras cada línea del script, ya que si no por la salida en la ventana de comandos aparecerán los resultados de todas las líneas que se hayan ejecutado. Como ya se ha comentado un script puede llamar a otros o a sí mismo de forma recursiva. Por último, las variables ejecutadas en un script en la ventana de comandos permanecen en el workspace tras su ejecución.

Funciones:

Las funciones que realicemos han de comenzar de la siguiente forma:

function [valores de retorno ] = name (argumentos)

Los valores de retorno deben estar entre corchetes y separados por comas, y como su nombre indica, serán los elementos que se generarán a la salida de nuestra función. Name será el nombre de la función que hemos creado, y nos servirá para llamarla desde la ventana de comandos o en otras funciones. Por último, los argumentos de entrada deberán estar entre paréntesis y separados también por comas en caso de que haya más de uno, y son las variables con las que operará nuestra función. Estas variables deberán estar definidas en nuestro Workspace o de lo contrario no se podrá ejectutar la función.

En el caso de que no haya valores de retorno simplemente se escribe el nombre de la funcion y los parámetros de entrada, y no hubiera tampoco valores de entrada sólo sería necesarío escribir el nombre de la funcion.

Las variables que se declaran dentro de estas funciones son de tipo local, sólo pueden accederse desde esa función y no interfieren con otras variables con el mismo nombre en otras funciones. En MATLAB no es necesario establecer una sentencia return, y el usuario determina los valores de retorno de la función.
 
function m=euclides(a,b)
% Cálculo del máximo común divisor de dos números naturales
% mediante el algoritmo de Euclides

if a    c=b;
   b=a;
   a=c;
end
while b>0
    c=rem(a,b);
    a=b;
    b=c;
end
m=a; 
return

SUB-FUNCIONES

En caso necesario, es posible guardar varias funciones diferentes dentro de un único archivo de extensión *.m. Estas sub-funciones sólo pueden ser llamadas por funciones contenidas en el fichero, y otros ficheros no pueden acceder a ellos.


function m=programa_principal(x,y)
   m=sub-programa1(x,y);
return
 

function x=sub-programa1(a,b)
   x=a^b;

Si ahora utilizamos el ejemplo para calcular un área mediante un script y lo realizamos mediante una función, se realizaría de la siguiente forma.

function m=area(x)
   m=pi*x^2;
fprintf('El area del circulo con radio %4.2f es: %4.2f \n', x, m);

Este fichero se ha guardar con nombre area.m, y su ejecución en la ventana de comandos se hace poniendo el nombre de la función y entre paréntesis el nombre de los argumentos separados por comas, en este caso el único argumento es el radio del círculo:

>> area(13.2);
El area del circulo con radio 13.20 es: 547.39

En este caso las variables no se han guardado en el workspace, con lo que si intentamos ver el contenido de x se obtendria la siguiente salida:

>> x
??? Undefined function or variable 'x'.


Ejercicio 5