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

Vik*_*tor 78 matlab file function

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

  1. 是否可以定义函数my_file.m
  2. 如果没有,假设我已经定义了它f.m.我怎么称呼它my_file.m

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

gno*_*ice 48

从版本R2016b开始,您可以在脚本中使用本地函数,如下所示:

data = 1:10;            % A vector of data
squaredData = f(data);  % Invoke the local function

function y = f(x)
  y = x.^2;
end
Run Code Online (Sandbox Code Playgroud)

在发布R2016b之前,可以在MATLAB脚本中定义的唯一函数类型匿名函数.例如:

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

请注意,匿名函数更适合于简单操作,因为它们必须在单个表达式中定义.对于更复杂的函数,您必须在它们自己的文件中定义它们,将它们放在MATLAB路径上的某个位置以使它们可以被脚本访问,然后像使用任何其他函数一样从脚本中调用它们.


Joh*_*ohn 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
Run Code Online (Sandbox Code Playgroud)

  • +1,当我看清楚时,它真的很烦我; 关闭所有; 在matlab脚本的顶部.如果你有很多变量和图表浮动你无法跟踪它们你没有使用足够的功能. (6认同)

One*_*ros 19

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

function my_file
   %script here
end

function out = f(in)
   %function here
end
Run Code Online (Sandbox Code Playgroud)

如果单击运行按钮,该功能my_file将默认执行.

  • 这与约翰的回答有什么不同? (2认同)

Ric*_*h C 7

1)您不能在脚本中嵌套函数.

2)确保fm在您的路径或当前目录中,您可以像任何其他功能一样调用它.


Sue*_*ver 6

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

x = 1;
y = add1(x);

function z = add1(x)
    z = x + 1;
end
Run Code Online (Sandbox Code Playgroud)