在MATLAB中,我可以在同一个文件中有脚本和函数定义吗?

假设我有一个函数f() ,我想在my_file.m使用它,这是一个脚本。

  1. 是否有可能在my_file.m定义函数?
  2. 如果没有,假设我已经在fm定义了它。 我如何在my_file.m调用它?

我阅读在线文档,但不清楚什么是最好的方式来做到这一点。

从版本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脚本中定义的唯一函数types是匿名函数 。 例如:

 data = 1:10; %# A vector of data f = @(x) x.^2; %# An anonymous function squaredData = f(data); %# Invoke the anonymous function 

请注意,匿名函数更适合简单的操作,因为它们必须在单个expression式中定义。 对于更复杂的函数,你必须在他们自己的文件中定义它们, 把它们放在MATLABpath的某个地方 ,让它们可以被你的脚本访问,然后像脚本一样调用它们。

我解决这个限制的方法是把我的脚本变成没有参数的函数(如果我需要全局名称空间的variables,我可以在函数中明确地传递它们,或者使用“evalin”来抓取它们。)

然后,您可以在“脚本”中定义所需的所有附加function。 这是一个黑客,但我发现它是相当强大的,在那些我需要几个不平凡的function的情况下。

编辑:这是一个简单的例子。 所有这些都可以驻留在单个文件中。

 function [] = myScriptAsAFunction() img = randn(200); img = smooth(img); figure(1); imagesc(img); axis image; colorbar; end function simg = smooth(img) simg = img / 5; end 

你可以做这样的事情(假设你的文件名为my_file.m ):

 function my_file %script here end function out = f(in) %function here end 

如果你点击运行button,函数my_file将被默认执行。

1)你不能在一个脚本中嵌套一个函数。

2)确保fm在您的path或当前目录中,您可以像调用其他函数一样调用它。

从R2016b开始 ,您可以在脚本中定义本地函数。

 x = 1; y = add1(x); function z = add1(x) z = x + 1; end 

我已经实施了约翰的解决scheme ,我发现它很有用。 但是有一些注意事项(在Octave中,Matlab的行为可能相似):

  1. 如果主函数中的代码在使用辅助函数之前clear all包含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; 

    从运行脚本看来,第一次执行的是函数之外的代码(在这种情况下,没有这样的代码),定义的函数(本例中为test3myfunc )被添加到工作空间中。 第二遍将执行主函数,如果clear all活动,则不会findmyfunc

  2. 正如chessofnerd所指出的那样,主函数中的variables不会进入工作空间。

示例文件中可以有许多function。 但只有第一个可以作为主要function,当你运行的文件。 其他人只能在这个文件中使用。 对于某些情况你想定义一个大function。 你可以把它分成更小的函数并在其下定义。

但是,find答案最简单的方法就是尝试〜