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

时间:2011-03-19 16:48:05

标签: file matlab function

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

  1. 是否可以在my_file.m
  2. 中定义功能
  3. 如果没有,假设我在f.m中定义了它。如何在my_file.m
  4. 中调用它

    我阅读了在线文档,但目前尚不清楚最佳方法是什么。

7 个答案:

答案 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 functionanonymous 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可能表现相似):

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

  2. 正如chessofnerd所指出的那样,开箱即用的主要功能中的变量不会转到工作区。

答案 6 :(得分:2)

您可以在示例文件中包含许多功能。但是,当您运行该文件时,只有第一个可以充当主要功能。其他只能在此文件中使用。在某些情况下,您想要定义一个大函数。您可以将它分成更小的函数并在其下面定义。

然而,找到答案的最简单方法是尝试〜