MATLABで計算過程を時々刻々とリアルタイムにプロットしたい時

基本は、drawnowを使ってイベントキューをフラッシュする。ただ、下記に示すように3つの方法が考えられる。方法1が速いしシンプルだが、凝ったプロットをしたいときに上手くいかない事もあるので、refreshdataも用いた方法2及び方法3も紹介する。

方法1

%%% Data
num=100;
xmax = 10;
x = linspace(0,xmax,num);
y = sin(x);

%%% PLOT
figure
hold all
xlim([0 xmax]);
ylim([-1 1]);
for i=1:num
    plot(x(i), y(i), 'o');
    drawnow
    pause(1/num)
end

方法2

%%% Data
num=100;
xmax = 10;
x = linspace(0,xmax,num);
y = sin(x);

%%% PLOT
figure;
h=plot(x(1),y(1), 'k-', 'LineWidth', 2);
xlim([0 xmax]);
ylim([-1 1]);
for i=1:num
  set(h,'XData',x(1:i))
  set(h,'YData',y(1:i))
  refreshdata
  drawnow
end

方法3

%%% Data
num=100;
xmax = 10;
x = linspace(0,xmax,num);
y = sin(x);

%%% PLOT
figure;
h=plot(x(1),y(1), 'k-', 'LineWidth', 2);
set(h,'YDataSource','yp')
set(h,'XDataSource','xp')
xlim([0 xmax]);
ylim([-1 1]);
for i=1:num
    xp = x(1:i);
    yp = y(1:i);
    refreshdata
    drawnow
end