我发现匿名函数非常有用,但很多时候我需要使用循环才能使函数正常工作。例如:
while val<tolerance
.....
end
我知道我可以将函数保存在一个单独的文件中,有时我可以将代码矢量化,然后匿名函数就可以工作了,但在某些情况下,很难找到 for 循环的替代方法。
Matlab 文档没有讨论它或说这是不可能的。有任何想法吗?
最佳答案
Functional Programming Mathworks 文件交换上的构造正是您所需要的。这些函数中的每一个都被设计为在匿名函数中使用。在 Loren on the Art of MATLAB 博客的 3 部分系列中详细讨论了它们:Part 1 , Part 2和 Part 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/