假设我有一个函数f()
,我想在my_file.m
中使用它,这是一个脚本。
my_file.m
?f.m
中定义了它。如何在my_file.m
?我阅读了在线文档,但目前尚不清楚最佳方法是什么。
答案 0 :(得分:47)
从版本R2016b开始,你可以拥有local functions in scripts,如下所示:
data = 1:10; % A vector of data
squaredData = f(data); % Invoke the local function
function y = f(x)
y = x.^2;
end
在发布R2016b之前,可以在MATLAB脚本中定义的唯一type of function是anonymous function。例如:
data = 1:10; % A vector of data
f = @(x) x.^2; % An anonymous function
squaredData = f(data); % Invoke the anonymous function
请注意,匿名函数更适合于简单操作,因为它们必须在单个表达式中定义。对于更复杂的函数,您必须在自己的文件place them somewhere on the MATLAB path中定义它们,以使它们可以被脚本访问,然后像编写任何其他函数一样从脚本中调用它们。
答案 1 :(得分:37)
我解决这个限制的方法是将我的脚本变成不带参数的函数(如果我需要来自全局命名空间的变量,我要么在函数中显式传递它们,要么使用“evalin”来获取它们。 )
然后,您可以在“脚本”中定义所需的所有其他功能。这是一个黑客,但我发现它在我需要几个非平凡函数的情况下非常强大。
编辑:这是一个简单的例子。所有这些都可以驻留在一个文件中。
function [] = myScriptAsAFunction()
img = randn(200);
img = smooth(img);
figure(1);
imagesc(img);
axis image;
colorbar;
end
function simg = smooth(img)
simg = img / 5;
end
答案 2 :(得分:19)
您可以执行以下操作(假设您的文件名为my_file.m
):
function my_file
%script here
end
function out = f(in)
%function here
end
如果单击运行按钮,函数my_file
将默认执行。
答案 3 :(得分:7)
1)您无法在脚本中嵌套函数。
2)确保f.m在您的路径或当前目录中,您可以像任何其他功能一样调用它。
答案 4 :(得分:6)
this answer,您可以在脚本中定义本地函数。
x = 1;
y = add1(x);
function z = add1(x)
z = x + 1;
end
答案 5 :(得分:3)
我已经实施了the solution by John,我发现它很有用。但有一些警告(在Octave; Matlab可能表现相似):
如果主函数中的代码在使用辅助函数之前包含clear all
,则它将不起作用。在文件test3.m
中,注释/取消注释clear all
会使代码无法正常工作。
function [] = test3()
%clear all
a = myfunc( 1 );
a
endfunction;
%---------------------------------
% Auxiliary functions
function retval = myfunc( a )
retval = 2 * a;
endfunction;
From看起来在运行脚本时,第一次执行函数外部的代码(在这种情况下,没有这样的代码)和定义的函数(在这种情况下,test3
和{ {1}})被添加到工作区。第二遍将执行main函数,如果myfunc
处于活动状态,则无法找到myfunc
。
正如chessofnerd所指出的那样,开箱即用的主要功能中的变量不会转到工作区。
答案 6 :(得分:2)
您可以在示例文件中包含许多功能。但是,当您运行该文件时,只有第一个可以充当主要功能。其他只能在此文件中使用。在某些情况下,您想要定义一个大函数。您可以将它分成更小的函数并在其下面定义。
然而,找到答案的最简单方法是尝试〜