如何在不创建多个文件的情况下将我的Matlab代码分解为函数?

dan*_*007 3 matlab function

我尝试在Matlab .m文件中编写一个函数:

function returnValue = someFunction(x, y)
returnValue = x * y + 3
end
Run Code Online (Sandbox Code Playgroud)

但是,Matlab指出我不允许在脚本中间简单地声明一个函数.我尝试将函数移动到文件的顶部,但是Matlab强迫我将函数重命名为文件名.

我很快就意识到Matlab函数必须与它们的文件名相匹配.如何在单个文件中模块化我的Matlab代码?有没有办法在脚本中间定义一个函数?

s.b*_*ara 6

匿名功能

对于非常小的函数,例如你的例子中的函数,你可以简单地定义一个这样的匿名函数:f = @(x, y) x * y + 3.您甚至可以在工作区的提示符或任何脚本文件中定义此类函数.

嵌套函数

如果将MATLAB脚本转换为函数,它将允许您定义嵌套函数:

function a = my_script(x)
  y = 3; 
  function r = some_function(b)
    r = b * y + 3;
  end
  a = some_function(x)
end
Run Code Online (Sandbox Code Playgroud)

请注意,嵌套函数可以看到值y.例如,当您优化ODE的参数并且您使用的求解器不提供修改参数值的方法时,这可能很方便.

子功能

您还可以在一个文件中定义具有多个本地子功能的函数.子功能在"公共"功能下定义.在你的例子中some_function可以是一个子函数my_script.m.

function a = my_script(x)
  y = 3;
  p = 42;
  a = some_function(x, y) + p;
end

function r = some_function(x, y)
  r = x * y + 3;
end
Run Code Online (Sandbox Code Playgroud)

end关键字是可选的在这里.与嵌套函数相比,子函数对于封装算法的各个部分非常有用,因为它们some_function看不到它的值p.