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
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Capítulo 6: Programación <strong>de</strong> MATLAB página 67<br />
correctamente hace falta que ese directorio esté en el search path <strong>de</strong> MATLAB o que sea el<br />
directorio actual.<br />
6.3.7. SUB-FUNCIONES<br />
Tradicionalmente MATLAB obligaba a crear un fichero *.m diferente por cada función. El nombre<br />
<strong>de</strong> la función <strong>de</strong>bía coincidir con el nombre <strong>de</strong>l fichero. A partir <strong>de</strong> la versión 5.0 se introdujeron las<br />
sub-funciones, que son funciones adicionales <strong>de</strong>finidas en un mismo fichero *.m, con nombres<br />
diferentes <strong>de</strong>l nombre <strong>de</strong>l fichero (y <strong>de</strong>l nombre <strong>de</strong> la función principal) y que las sub-funciones<br />
sólo pue<strong>de</strong>n ser llamadas por las funciones contenidas en ese fichero, resultando “invisibles” para<br />
otras funciones externas.<br />
A continuación se muestra un ejemplo contenido en un fichero llamado mi_fun.m:<br />
function y=mi_fun(a,b)<br />
y=subfun1(a,b);<br />
function x=subfun1(y,z)<br />
x=subfun2(y,z);<br />
function x=subfun2(y,z)<br />
x=y+z+2;<br />
6.3.8. FUNCIONES PRIVADAS<br />
Las funciones privadas (private) son funciones que no se pue<strong>de</strong>n llamar <strong>de</strong>s<strong>de</strong> cualquier otra<br />
función, aunque se encuentren en el path o en el directorio actual. Sólo ciertas funciones están<br />
autorizadas a utilizarlas. Las funciones privadas se <strong>de</strong>finen en sub-directorios que se llaman private<br />
y sólo pue<strong>de</strong>n ser llamadas por funciones <strong>de</strong>finidas en el directorio padre <strong>de</strong>l sub-directorio private.<br />
En la búsqueda <strong>de</strong> nombres que hace MATLAB cuando encuentra un nombre en una<br />
expresión, las funciones privadas se buscan inmediatamente <strong>de</strong>spués <strong>de</strong> las sub-funciones, y antes<br />
que las funciones <strong>de</strong> tipo general.<br />
6.3.9. FUNCIONES *.P<br />
Las funciones *.p son funciones *.m pre-compiladas con la función pco<strong>de</strong>. Por <strong>de</strong>fecto el resultado<br />
<strong>de</strong>l comando pco<strong>de</strong> func.m es un fichero func.p en el directorio actual (el fichero func.m pue<strong>de</strong><br />
estar en cualquier directorio <strong>de</strong>l search path). El comando pco<strong>de</strong> -inplace func.m crea el fichero<br />
func.p en el mismo directorio don<strong>de</strong> encuentra el fichero func.m. Pue<strong>de</strong>n pasarse varios ficheros<br />
*.m al comando pco<strong>de</strong> <strong>de</strong> una sola vez.<br />
Los ficheros *.p se ejecutan algo más rápidamente que los *.m y permiten ocultar el código <strong>de</strong><br />
los ficheros ASCII correspondientes a las funciones *.m <strong>de</strong> MATLAB.<br />
6.3.10. VARIABLES PERSISTENTES<br />
Las variables persistentes son variables locales <strong>de</strong> las funciones (pertenecen al espacio <strong>de</strong> trabajo<br />
<strong>de</strong> la función y sólo son visibles en dicho espacio <strong>de</strong> trabajo), que conservan su valor entre distintas<br />
llamadas a la función. Por <strong>de</strong>fecto, las variables locales <strong>de</strong> una función se crean y <strong>de</strong>struyen cada<br />
vez que se ejecuta la función. Las variables persistentes se pue<strong>de</strong>n <strong>de</strong>finir en funciones, pero no en<br />
ficheros <strong>de</strong> comandos. Es habitual utilizar para ellas letras mayúsculas. Las variables se <strong>de</strong>claran<br />
como persistentes utilizando la palabra persistent seguida <strong>de</strong> los nombres separados por blancos,<br />
como por ejemplo: