如何重复而不使用“for”或“while”或“repeat”函数?

时间:2013-01-06 17:41:13

标签: matlab

是否有一个函数可以重复一段代码一段时间?

例如:

t= 0; 
while (t< 10) 
  if x==2 
    x=1 
  else 
    x=3; 
  end 
end

如何使用其他功能重写此功能?

3 个答案:

答案 0 :(得分:4)

递归函数可以为你做这个(假设你不能使用:for,while,repeat)。

http://www.matrixlab-examples.com/recursion.html

答案 1 :(得分:2)

或者,如果在一次迭代中执行的代码对其他迭代的结果独立,则可以使用arrayfuncellfun

例如

 fun = @(x) disp(['hello ' , num2str(x)]);
 arrayfun(fun,1:5);

返回

 hello 1
 hello 2
 hello 3
 hello 4
 hello 5

我个人我喜欢这些结构,因为我发现它们非常表达,就像在C ++中std::for_each一样。

尽管如此,他们已经被证明比他们的天真循环对手慢得多,这些对手通过Matlab得到了 JITed (在SO上有关于这个问题的几个Q / A)。

答案 2 :(得分:1)

如果您将代码放在矢量格式中,Matlab会自动“重复”代码:

x_vector = round(2*rand(10,1)) %Your x input
idx = (x_vector==2)
x_vector(idx) = 1;
x_vector(~idx) = 3;