Менять циклы while на основе интервалов, определенных вектором - PullRequest
0 голосов
/ 28 ноября 2018

Внутри моего кода у меня есть 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, не очень тонкий, но он становится экспоненциально хуже по мере того, какчисло (последовательность) увеличивается.

Есть ли способ сделать это более элегантно и работать с переменной длиной последовательности?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018
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
0 голосов
/ 28 ноября 2018

Для переменной длины последовательности массива вы можете использовать один большой цикл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...