在Matlab中的匿名函数中使用for/while循环

7 matlab loops anonymous-function

我发现匿名函数非常有用,但很多时候我需要使用循环才能使函数正常工作.例如:

while val<tolerance
     .....
end
Run Code Online (Sandbox Code Playgroud)

我知道我可以将函数保存在一个单独的文件中,有时我可以对代码进行矢量化,然后匿名函数可以工作,但在某些情况下很难找到for循环的替代方法.

Matlab文档没有讨论它或说它是不可能的.有任何想法吗?

Mat*_*Lab 7

函数式编程的Mathworks公司的文件交换结构正是你所需要的.这些功能中的每一个都设计用于匿名功能.它们将在关于MATLAB博客艺术Loren的第3部分系列中详细讨论:第1 部分, 第2 部分第3部分.

特别是第3部分讨论了将循环实现为函数.为了完整起见,我将借用函数式编程FEX提交中的一些代码来演示如何在m代码中使用匿名函数中的while循环.首先,定义一个loop函数:

   function x = loop(x, continueFcn, f)
   % Inputs:
   % x           - Initial state (can be cell array of arguments to f)
   % continueFcn - Continue function, returns true iff the loop should go on
   % f           - Function of the state (x) to run every iteration
       while ~continueFcn(x{:})
           x = f(x{:});
       end
   end
Run Code Online (Sandbox Code Playgroud)

例如,提供valwile有一些初始值,val0比方说.此外,假设这StuffDoneEachWhileLoop是一个定义变量val应如何在每个while循环中更新的函数.然后:

myFunc = @(n) loop(val0, ...                    % Initialize state
                  @(val) val < tolerance, ...   % OP condition
                  @(val) StuffDoneEachWhileLoop(val));    %  
Run Code Online (Sandbox Code Playgroud)

可以对上述想法进行各种扩展.有关详细信息,请参阅Tucker McClure的功能编程FEX提交.