Si entiendo su situación correctamente, tienen algo como esto:
Un archivo (`a.m '):
function results = A(parameters)
% some code
Un archivo (` B.m'):
function results = B(parameters)
% some code
usted desea utilizar la función A
dentro B
, sólo puede llamar a esa función desde el interior de la función B:
function results = B(parameters)
% some code
otherResults = A(otherParameters)
Si su situación es algo parecido a lo que se describe nimrodm, su archivo A.m
es algo así como:
function results = A(paramters)
% some code
function results = C(parameters)
% code of function C
end
end
function results = D(parameters)
% code of function D
end
No hay manera de acceder directamente a C
y D
desde fuera A
. Si es necesario utilizar subfunctionD
fuera del A
, simplemente hacer un archivo que contiene D.m
function results = D(parameters)
% code of function D
end
y preferiblemente, eliminado el mismo código de función A
.
Para un nested functionC
, lo mismo se puede hacer en algunos casos (pero no en todos), ya que las funciones anidadas también tienen acceso a las variables de la función A
. En las versiones recientes de MATLAB (creo que R2010b o R2011a), el editor resalta las variables que se comparten entre una función y las funciones anidadas en el trullo.Si no utiliza las variables de la función A
dentro de la función C
, haga lo mismo que para la función D
. Si lo hace, pase estas variables como parámetros y/o valores de retorno y ajuste el resto de su código para reflejar esto. Pruebe su código y luego, haga lo mismo que para D
.
Lo más probable es que no tenga el estuche C
, ya que esta es una característica avanzada en MATLAB.
Sin embargo, hay otro caso, si no está utilizando funciones de MATLAB, sino scripts de MATLAB en diferentes archivos. Puede llamar a un script (ambos de línea de comandos y otra función o script, simplemente por su nombre (archivo)
contenido del archivo E.m
:.
% code for script E
contenido del archivo F.m
:
% some code
E;
Usando ese código, ejecuta todos los comandos en E
desde la secuencia de comandos interna F
. Tenga en cuenta que E
y F
compartirán todas sus variables, por lo que si comienza su scri pts por algo como clear all; close all; clc;
, no puede pasar ninguna variable de F
a E
(y perderá todos los resultados de F
calculados antes de llamar al E
.
En la mayoría de los casos, es mejor usar funciones en lugar de secuencias de comandos, así que esa es también la manera de resolver una situación como esa: hacer que todo funcione con parámetros decentes y valores de retorno.
editar: Después de 'cambiar' su pregunta, es bastante fácil.
Consideremos que tiene la función, voy a utilizar diferentes nombres, ya que es más intuitivo de entender. Tiene la función ackermann
dentro del archivo ackermann.m
al que desea llamar desde el script bigScript.m
.
El archivo ackermann.m
contiene la función Ackermann-Péter (como ejemplo):
function result = ackermann(m,n)
if m == 0
result = n + 1;
elseif m > 0
if n == 0
result = ackermann(m-1,1);
elseif n > 0
result = ackermann(m-1,ackermann(m,n-1));
else
error('n has to be positive');
end
else
error('m has to be positive');
end
end
Desde el interior de su gran guión, puede llamar a la función ackermann
de la siguiente manera (si desea que m = 1 yn = 1) :
A = ackermann(1,1)
Es así de simple, no hay necesidad de cargar nada. Pero debe recordar tener la función 'disponible en su camino', la manera más fácil de hacerlo es simplemente mantener los archivos de script y función en el mismo directorio.
De todos modos, tengo la sensación de que usted es un usuario de MATLAB inicial: si no sabe lo que hace una función, simplemente escriba help functionname
(sustituyendo functionname of course) en la ventana de comandos. Notará que la función load
está ahí para cargar archivos de datos, no para m-files (ya que los m-files en su ruta se usan automáticamente).
Muy relacionado: [¿Es posible definir más de una función por archivo en MATLAB?] (Http://stackoverflow.com/q/3569933/52738) – gnovice
@gnovice - gracias, pero desafortunadamente no deseo aún para definir más de una función en un archivo. Lamento que la pregunta no fuera lo suficientemente clara. – wrongusername