根据向量定义的间隔更改while循环

时间:2018-11-28 13:54:10

标签: matlab logic

在我的代码中,我目前有2个while循环,如下所示:

sequence = [15 35 50];

startStamp = GetSecs %GetSecs is a psychtoolbox function that returns the current time in seconds

while GetSecs - startStamp < sequence(1) || (GetSecs - startStamp >= sequence(2) && GetSecs - startStamp <= sequence(3))
cond1 %display stimulus 1
end

while GetSecs - startStamp >= sequence(1) && GetSecs - startStamp < sequence(2)
cond2 %display stimulus 2
end

每当计时器(GetSecs-startStamp)到达序列中的一个元素时,我都希望从一个while循环转到另一个元素,然后执行它,直到到达序列的下一个元素,切换循环等等。

我构造进入while循环的条件语句的方式不是很苗条,但是随着numel(序列)的增加,它成指数地恶化。

有没有一种方法可以更优雅地做到这一点并以可变长度的序列工作?

2 个答案:

答案 0 :(得分:1)

对于可变长度的数组序列,您可以使用一个大的while循环在序列数组的各个元素之间循环,然后在循环内放置标志,以告诉您要使用哪种条件。

翻译成代码:

counter = 1; flag = true;
while(counter <= length(sequence))
    while(GetSecs - startStamp < sequence(counter))
        if flag
            cond1;
        else
            cond2;
        end
    end

    flag = ~flag;
    counter = counter + 1 ;
end

答案 1 :(得分:0)

sequence = [15 35 50];

startStamp = GetSecs %GetSecs is a psychtoolbox function that returns the current time in seconds

while (Getsecs - startStamp) < sequence(end)

    for i=1:length(sequence)
        if (Getsecs-startStamp) < sequence(i)
            break
        end
    end

    if mod(i,2) == 1
        cond1       

    else
        cond2 
    end

end