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

标签 matlab loops anonymous-function

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

while val<tolerance
     .....
end

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

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

最佳答案

Functional Programming Mathworks 文件交换上的构造正是您所需要的。这些函数中的每一个都被设计为在匿名函数中使用。在 Loren on the Art of MATLAB 博客的 3 部分系列中详细讨论了它们:Part 1 , Part 2Part 3 .

特别是Part 3讨论将循环实现为一个函数。为了完整起见,我将从Functional Programming FEX submission中借用一些代码。演示如何在 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

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

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

上述想法的各种扩展都是可能的。参见 Tucker McClure 的 Functional Programming FEX submission了解更多详情。

关于matlab - 在 Matlab 的匿名函数中使用 for/while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739538/

相关文章:

java - 日期检查循环?

java - 尝试测试输入有效性

javascript - JavaScript 中的代码顺序

perl - 使用匿名 subs 最小化 Perl 中的子范围是一种好习惯吗?

algorithm - 在连续渗透中处理大量数据

c++ - 将 (ASCII) 字符字符串转换为 float - C/C++ 和 Matlab

PHP 卡住 : how to loop connected to 2 MySQL databases

r - 您可以在匿名函数中将动态列名与 tidyeval 一起使用吗?

matlab - 从 ASCII 文件中将文本值读入 matlab 变量

matlab - 从噪声信号/电压测量中提取神经元尖峰时间的最佳方法