假设我有一个函数,f()
并且想在my_file.m
脚本中使用它。
- 是否可以在中定义功能
my_file.m
? - 如果没有,假设我在中定义了它
f.m
。我怎么称呼它my_file.m
?
我阅读了在线文档,但尚不清楚什么是最好的方法。
假设我有一个函数,f()
并且想在my_file.m
脚本中使用它。
my_file.m
?f.m
。我怎么称呼它my_file.m
?我阅读了在线文档,但尚不清楚什么是最好的方法。
Answers:
从R2016b版本开始,您可以在脚本中具有本地功能,如下所示:
data = 1:10; % A vector of data
squaredData = f(data); % Invoke the local function
function y = f(x)
y = x.^2;
end
在R2016b发行版之前,可以在MATLAB脚本中定义的唯一函数类型是匿名函数。例如:
data = 1:10; % A vector of data
f = @(x) x.^2; % An anonymous function
squaredData = f(data); % Invoke the anonymous function
请注意,匿名函数更适合简单操作,因为它们必须在单个表达式中定义。对于更复杂的功能,您将必须在它们自己的文件中定义它们,将它们放置在MATLAB路径中的某个位置以使它们可被脚本访问,然后像在任何其他函数中一样从脚本中调用它们。
克服此限制的方法是将脚本转换为不带参数的函数(如果需要全局名称空间中的变量,则可以在函数中显式传递它们,也可以使用“ evalin”来获取它们)。
然后,您可以在“脚本”中定义所需的所有其他功能。这是一个hack,但是我发现在需要几个非平凡功能的情况下,它非常强大。
编辑:这是一个简单的例子。所有这些都可以驻留在单个文件中。
function [] = myScriptAsAFunction()
img = randn(200);
img = smooth(img);
figure(1);
imagesc(img);
axis image;
colorbar;
end
function simg = smooth(img)
simg = img / 5;
end
assignin
。这是一个整洁的功能,我可能会使用更多!
您可以执行以下操作(假设您的文件名为my_file.m
):
function my_file
%script here
end
function out = f(in)
%function here
end
如果单击运行按钮,该功能my_file
将默认执行。
1)您不能在脚本内嵌套函数。
2)确保fm在您的路径或当前目录中,并且您可以像其他任何函数一样调用它。
f
从脚本(my_file
在他的示例中)调用函数(在他的示例中)。
我已经实施了John的解决方案,并且发现它很有用。但是有一些警告(在Octave中; Matlab的行为可能与此类似):
如果主函数中的代码在clear all
使用辅助函数之前包含在其中,则它将不起作用。在file中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
和时myfunc
)添加到工作区中。第二次通过将执行main函数,该函数不会找到myfunc
是否clear all
处于活动状态。
正如Chessofnerd所指出的,现成的主函数中的变量不会进入工作区。