当我在攻读EE本科学位时,MATLAB要求每个函数都在自己的文件中定义,即使它是一行程序。

我现在正在攻读研究生学位,我必须用MATLAB写一个项目。这仍然是新版本MATLAB的要求吗?

如果可以在一个文件中放入多个函数,有什么限制吗?例如,可以从文件外部访问文件中的所有函数,还是只能访问与文件名称相同的函数?

注:我使用的是MATLAB版本R2007b。


当前回答

沿着与SCFrench的答案相同的路线,但带有更多c#风格的旋转..

我将(并且经常)创建一个包含多个静态方法的类。例如:

classdef Statistics

    methods(Static)
        function val = MyMean(data)
            val = mean(data);
        end

        function val = MyStd(data)
            val = std(data);
        end
    end

end

因为方法是静态的,所以不需要实例化类。你可以这样调用函数:

data = 1:10;

mean = Statistics.MyMean(data);
std = Statistics.MyStd(data);     

其他回答

我试过SCFRench和Ru Hasha的八度音。

最后它成功了,但我做了一些修改

function message = makefuns
    assignin('base','fun1', @fun1);   % Ru Hasha
    assignin('base', 'fun2', @fun2);  % Ru Hasha
    message.fun1=@fun1;               % SCFrench
    message.fun2=@fun2;               % SCFrench
end

function y=fun1(x)
    y=x;
end

function z=fun2
    z=1;
end

可以在其他'm'文件中调用:

printf("%d\n", makefuns.fun1(123));
printf("%d\n", makefuns.fun2());

更新:

我添加了一个答案,因为+72和+20都不适合我。 我写的那个很好(上周五我在写这篇文章的时候测试了一下)。

你也可以把一个main文件中的函数和main函数组合在一起,就像这样:

function [varargout] = main( subfun, varargin )
[varargout{1:nargout}] = feval( subfun, varargin{:} ); 

% paste your subfunctions below ....
function str=subfun1
str='hello'

然后调用subfun1就像这样: str =主(“subfun1”)

从R2017b开始,这是不可能的。有关文件指出:

程序文件可以包含多个函数。如果文件只包含函数定义,则第一个函数是主函数,也是MATLAB与文件名关联的函数。在主函数或脚本代码之后的函数称为局部函数。本地函数仅在文件中可用。

但是,其他答案中建议的变通方法也可以达到类似的效果。

沿着与SCFrench的答案相同的路线,但带有更多c#风格的旋转..

我将(并且经常)创建一个包含多个静态方法的类。例如:

classdef Statistics

    methods(Static)
        function val = MyMean(data)
            val = mean(data);
        end

        function val = MyStd(data)
            val = std(data);
        end
    end

end

因为方法是静态的,所以不需要实例化类。你可以这样调用函数:

data = 1:10;

mean = Statistics.MyMean(data);
std = Statistics.MyStd(data);     

我真的很喜欢SCFrench的答案——我想指出,它可以很容易地修改,使用assignin函数直接将函数导入到工作区。(这样做让我想起了Python“import x from y”的做事方式)

function message = makefuns
  assignin('base','fun1',@fun1);
  assignin('base','fun2',@fun2);
  message='Done importing functions to workspace';
end

function y=fun1(x)
  y=x;
end

function z=fun2
  z=1;
end

然后这样使用:

>> makefuns
ans =
Done importing functions to workspace

>> fun1(123)
ans =
   123

>> fun2()
ans =
     1