Лучший способ выйти из цикла for ploting for в MATLAB

У меня есть следующий код в Matlab:

a = linspace(0,1);
t = linspace(0,10);
x = cos(2*t);

for i = 1:10
    z = a(i) *x
    plot(z)
    pause(0.1)
end

Это просто для того, чтобы увидеть, как изменение переменной «а» изменит график. Это создало анимированный сюжет. Вопрос: если у меня есть большой набор данных и мне нужно построить более сложные вещи, чем то, что указано выше, как лучше всего завершить цикл? Другими словами, если я сейчас закрою фигуру графика, она будет продолжать работать до тех пор, пока i = 10. Сработает ли оператор «перерыв»? Или сделать клавиатурный ввод с "клавиатуры"?

Спасибо за вашу помощь


person mle0312    schedule 26.05.2017    source источник


Ответы (2)


Вы можете проверить наличие дескриптора фигуры в каждом цикле. Если фигура закрыта (и, таким образом, ручка фигуры удалена), вы автоматически завершаете цикл.

a = linspace(0,1);
t = linspace(0,10);
x = cos(2*t);

h.fig = figure;
for i = 1:100
    z = a(i) *x
    plot(z)
    pause(0.1)
    if ~isvalid(h.fig)
        break
    end
end
person Poelie    schedule 26.05.2017

Вы хотите, чтобы пользователи могли закончить анимацию, когда захотят? Или вы хотите завершить анимацию программно из-за условия, которое проверяется на каждой итерации?

Если вы просто хотите завершить цикл изнутри кода (то есть второй вариант выше), то да, оператора break будет достаточно. (Вы можете установить логический флаг непосредственно перед break и проверить этот флаг после завершения цикла, чтобы вы могли close построить график, если хотите.)

Теперь, если вы хотите дать пользователю возможность остановить анимацию, нажав кнопку или что-то в этом роде, вы можете (1) просто сказать пользователю нажать Ctrl+C; или (2) найти более структурированное решение для создания анимации в Matlab (вы можете проверить это).

person fonini    schedule 26.05.2017
comment
CTRL+ не такой уж хороший вариант. Если цикл построения большой (то есть имеет много функций), очень вероятно, что он либо а) сломает какую-то функцию на основе Java и продолжит цикл, б) создаст исключение Java и приведет к сбою всего MATLAB. Иногда это работает, но иногда нет - person Ander Biguri; 26.05.2017