MATLAB:嵌套for循环每次连续迭代都需要更长的时间

时间:2013-02-25 22:47:19

标签: matlab loops for-loop

/ edit:循环不会变慢。我没有正确地抽出时间。请参阅Rasman的回答。

我循环使用3个参数来完成一个有点长而复杂的功能,我注意到了两件我不理解的事情:

  1. 每次连续迭代执行都会变慢,尽管该函数只返回一个结构(我只需要一个字段),我会在每次迭代时覆盖它。
  2. 分析器显示最里面end的{​​{1}}语句需要很长时间。
  3. 考虑以下示例(我知道这很容易被矢量化,但据我所知,我调用的函数不能):

    for

    以及我如何执行该功能

    function stuff = doSomething( x, y, z )
        stuff.one = x+y+z;
        stuff.two = x-y-z;
    end
    

    我怎样才能加快速度?为什么每次迭代都比以前更长?我很确定这是一个糟糕的编程,对不起。

3 个答案:

答案 0 :(得分:2)

当我使用doSomething替换output(i,4)=toc;的来电时,我绘制了diff(output(:,4)),我发现这是对fprintf的调用,每次调用时间越来越长,显然。

删除if-clause返回每次迭代大约相同的时间。

答案 1 :(得分:1)

如果doSomething返回多个输出变量而不是结构

,那么速度会快得多
function [out1,out2] = doSomething( x, y, z )
    out1 = x+y+z;
    out2 = x-y-z;
end

在每次后续迭代中它变慢的事实很奇怪,我没有解释它,但希望至少可以让你加速。

答案 2 :(得分:1)

因此,当我用if:

替换if语句时,问题基本上消失了
if mod(i,1e4) == 0 % only for demonstration, not in final script
    fprintf(1,'time for last 10000 iterations: %f \n',toc); tic;
end

我认为对toc的操作可能会导致问题

相关问题