Supongamos que tengo una función f()y quiero usarla my_file.m, que es un script.
- ¿Es posible tener la función definida en my_file.m?
- Si no es así, suponga que lo tengo definido en f.m. ¿Cómo lo llamomy_file.m?
Leí la documentación en línea, pero no estaba claro cuál es la mejor manera de hacerlo.

Respuestas:
A partir de la versión R2016b, puede tener funciones locales en scripts , así:
data = 1:10; % A vector of data squaredData = f(data); % Invoke the local function function y = f(x) y = x.^2; endAntes del lanzamiento de R2016b, el único tipo de función que podía definirse dentro de un script MATLAB era una función anónima . Por ejemplo:
data = 1:10; % A vector of data f = @(x) x.^2; % An anonymous function squaredData = f(data); % Invoke the anonymous functionTenga en cuenta que las funciones anónimas se adaptan mejor a operaciones simples, ya que deben definirse en una sola expresión. Para funciones más complicadas, tendrá que definirlas en sus propios archivos, colocarlas en algún lugar de la ruta de MATLAB para que sean accesibles a su script y luego llamarlas desde su script como lo haría con cualquier otra función.
fuente
La forma en que evito esta limitación es convertir mis scripts en funciones que no toman argumentos (si necesito variables del espacio de nombres global, las paso explícitamente en la función o uso "evalin" para tomarlas).
Luego, puede definir todas las funciones adicionales que necesita en el "script". Es un truco, pero lo he encontrado bastante poderoso en aquellos casos en los que necesito varias funciones no triviales.
EDITAR: Aquí hay un ejemplo simplista. Todo esto puede residir en un solo archivo.
function [] = myScriptAsAFunction() img = randn(200); img = smooth(img); figure(1); imagesc(img); axis image; colorbar; end function simg = smooth(img) simg = img / 5; endfuente
assignin. ¡Esa es una función genial que podría estar usando más!Puede hacer algo como esto (asumiendo que su archivo tiene un nombre
my_file.m):function my_file %script here end function out = f(in) %function here endSi hace clic en el botón Ejecutar, la función
my_filese ejecutará por defecto.fuente
1) No puede anidar una función dentro de un script.
2) Asegúrese de que fm esté en su ruta o en el directorio actual, y puede llamarlo como cualquier otra función.
fuente
fen su ejemplo) desde su script (my_fileen su ejemplo).A partir de R2016b , puede definir funciones locales dentro de un script.
x = 1; y = add1(x); function z = add1(x) z = x + 1; endfuente
Implementé la solución de John y la encontré útil. Pero hay un par de advertencias (en Octave; Matlab posiblemente se comporte de manera similar):
Si el código dentro de su función principal contiene
clear allantes de usar la función auxiliar, no funcionará. En el archivotest3.m, comentar / descomentarclear allhace que el código funcione o no.function [] = test3() %clear all a = myfunc( 1 ); a endfunction; %--------------------------------- % Auxiliary functions function retval = myfunc( a ) retval = 2 * a; endfunction;Desde Parece que al ejecutar un script, hay una primera pasada donde se ejecuta el código fuera de las funciones (en este caso, no existe tal código), y las funciones definidas (en este caso,
test3ymyfunc) se agregan al espacio de trabajo. Una segunda pasada ejecutaría la función principal, que no encontraríamyfuncsiclear allestá activa.Como lo señaló chessofnerd, las variables en su función principal no van al espacio de trabajo.
fuente
Puede tener muchas funciones en un archivo de muestra. Pero solo el primero puede actuar como función principal, cuando ejecuta el archivo. Otros se pueden utilizar simplemente en este archivo. Para alguna situación, desea definir una función grande. Puede separarlo en funciones más pequeñas y definirlo debajo.
Sin embargo, la forma más sencilla de encontrar la respuesta es intentarlo ~
fuente