Не уверен, что я точно понял вашу проблему, но будет ли это решением?
Num_Oscillators = 5;
for t = 1:tlen
figure(1);clf;
for iOscillator = 1:Num_Oscillators
plot3(1:t,iOscillator*ones(1,t),sin(y(iOscillator,1:t)),'k-.' );
hold on;
end
drawnow;
end
Для этого необходимо записать y так, чтобы он мог взять целый вектор отсчетов времени и вернуть вектор осциллятора позиции (если это не может быть записано таким образом, вам нужно кэшировать ваши старые значения).
Если эта версия заставляет экран мерцать (это будет на более старых версиях Matlab), попробуйте вместо этого (это также может быть немного быстрее):
figure(1);clf;
Num_Oscillators = 5;
plot_handles = cell(1,Num_Oscillators);
for iOscillator = 1:Num_Oscillators
plot_handles{iOscillator} = plot3(inf,inf,inf,'k.-');hold on;
end
for t = 1:tlen
for iOscillator = 1:Num_Oscillators
set(plot_handles{iOscillator},'XData',1:t,'YData',iOscillator*ones(1,t),'ZData',sin(y(iOscillator,1:t)));
end
drawnow;
end
С этим простым примером макета data
tlen = 100;
y = @(osc,t) 2*pi/tlen*osc*t;
генерирует эти выходные данные (анимируя их как они go):