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
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]