08.11.2014 Views

Aprenda Matlab 6.1 - Universidad Politécnica de Madrid

Aprenda Matlab 6.1 - Universidad Politécnica de Madrid

Aprenda Matlab 6.1 - Universidad Politécnica de Madrid

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Aprenda</strong> <strong>Matlab</strong> <strong>6.1</strong> como si estuviera en Primero página 70<br />

llamada a feval. Por ejemplo, si <strong>de</strong>spués <strong>de</strong> crear la referencia fh se cambia <strong>de</strong> directorio la<br />

función correspondiente, en el momento <strong>de</strong> la ejecución no será posible encontrarla; si <strong>de</strong>spués<br />

<strong>de</strong> crear fh se crea una nueva función con el mismo nombre, esta función no podrá nunca ser<br />

ejecutada por medio <strong>de</strong> la referencia creada previamente.<br />

El siguiente ejemplo muestra cómo se pue<strong>de</strong> ejecutar una sub-función <strong>de</strong>s<strong>de</strong> otra función<br />

<strong>de</strong>finida en un fichero *.m diferente. Recuér<strong>de</strong>se que, en principio, las sub-funciones sólo son<br />

accesibles <strong>de</strong>s<strong>de</strong> otras funciones <strong>de</strong>finidas en el mismo fichero *.m. Supóngase que se crea un<br />

fichero llamado pruebafh.m que contiene las siguientes líneas (se <strong>de</strong>fine una función principal<br />

pruebafh que se llama como el fichero y una sub-función subf):<br />

% fichero pruebafh.m<br />

function mifh=pruebafh<br />

mifh=@subf;<br />

function A=subf(B, C)<br />

A=B+C;<br />

Obsérvese que la función principal pruebafh <strong>de</strong>vuelve una referencia a la sub-función subf.<br />

En principio sólo pruebafh tiene acceso a subf y gracias a ese acceso pue<strong>de</strong> crear la referencia<br />

mifh. Sin embargo, una vez que la referencia a subf ha sido creada y <strong>de</strong>vuelta como valor <strong>de</strong><br />

retorno, cualquier función con acceso a pruebafh podrá también acce<strong>de</strong>r a la sub-función subf. El<br />

siguiente programa principal, <strong>de</strong>finido en un fichero pruebafhMain.m, pue<strong>de</strong> acce<strong>de</strong>r a la subfunción<br />

gracias a la referencia <strong>de</strong> función (si se intenta acce<strong>de</strong>r directamente se obtiene un error).<br />

% fichero pruebafhMain.m<br />

fh=pruebafh<br />

A=rand(3);<br />

B=eye(3)*10;<br />

C=feval(fh,A,B)<br />

% D=subf(A,B) % ERROR<br />

disp('Ya he terminado')<br />

Este ejemplo sencillo es bastante significativo respecto a los beneficios que se pue<strong>de</strong>n obtener<br />

<strong>de</strong> las referencias <strong>de</strong> función.<br />

6.4.3. INFORMACIÓN CONTENIDA POR UNA REFERENCIA DE FUNCIÓN. FUNCIONES SOBRECARGADAS<br />

Una referencia <strong>de</strong> función pue<strong>de</strong> contener información <strong>de</strong> varias funciones, en concreto <strong>de</strong> todas<br />

aquellas funciones que fueran "visibles" en el momento en el que dicha referencia fue creada.<br />

Recuér<strong>de</strong>se que funciones visibles, a<strong>de</strong>más <strong>de</strong> las funciones intrínsecas <strong>de</strong> MATLAB (built-in<br />

functions) son las funciones que están <strong>de</strong>finidas en el directorio actual y en los directorios <strong>de</strong>finidos<br />

en el path <strong>de</strong> MATLAB.<br />

La función functions permite obtener toda la información disponible <strong>de</strong> una referencia <strong>de</strong><br />

función. Obsérvese la estructura salida <strong>de</strong>l siguiente ejemplo (el campo methods es a su vez una<br />

estructura que pue<strong>de</strong> mostrarse por separado):<br />

>> info=functions(@disp)<br />

info =<br />

function: 'disp'<br />

type: 'overloa<strong>de</strong>d'<br />

file: 'MATLAB built-in function'<br />

methods: [1x1 struct]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!