% ===== ロジスティックマップのアニメーション ======

a = 4;              % ロジスティックマップのパラメータ
x(1) = rand(1,1);   % 初期値をランダムで決定

figure;             % アニメーションをするfigureを開く
plot(0:1,0:1,'-','LineWidth',2);hold on      % 真ん中の45°の青い線

% ======= アニメーションのための値を計算 =======
y = []; xp = [];
for t = 1:100
    x(t+1) = a * x(t)*(1-x(t));             % ロジスティックマップの計算
    if t == 1
        xp = [xp; x(t) 0; x(t) x(t+1)];     % xp : アニメーションの黒い線
    else
        xp = [xp; x(t) x(t); x(t) x(t+1)];  % xp : アニメーションの黒い線
    end
    y = [y; x(t) x(t+1)];                   % マップの値
end

% ロジスティックマップを1つの線で描く
y = sortrows(y,1);          % 順番に並び替える
plot(y(:,1),y(:,2),'r-','LineWidth',2)


% ======= アニメーションの開始 =======
maxtt = 4;
for t = 1:100
    if t == 1;plot(xp(t:t+1,1),xp(t:t+1,2),'k-');       % 黒い線をアニメーションで描く
    else;plot(xp(t-1:t+1,1),xp(t-1:t+1,2),'k-');end
    title(sprintf('%d/%d training steps',t,100))        % タイトルに学習回数を表示
    xlabel('x(t)'); ylabel('x(t+1)');
    drawnow             % drawnowを入れるとアニメーションになる
    pause(0.2)          % ゆっくりにするためにpauseで少し停止
    for tt = 1:maxtt
        movmov((t-1)*maxtt+tt) = getframe;           % アニメーションのフレームをゲットする
    end
end

% movie.aviというファイルが、同じフォルダにできる。
movie2avi(movmov,'movie.avi');
