clear all; close all; fprintf(1, '[Step 1]\n'); s = tf('s'); P = 10/(s*(s+1)*(s+10)); K = 1; bode(P, 'b', K*P, 'r--'); legend('P', 'Lhat'); grid on; hold on; % グラフの表示範囲を変更する h = get(1); % fig.1のプロパティを取得 axis(h.Children(4), [0.01, 10, -40, 40]); % ゲイン特性の範囲を変更 axis(h.Children(2), [0.01, 10, -190, -90]); % 位相特性の範囲を変更 %ctrlpref; % %グラフの横軸、縦軸のデフォルト値を変更するためにはこれを実行する。一度設定すると、次に設定を変更しないかぎり、MATLABを再起動してもそのまま。 fprintf(1, '[Step 2]\n'); alpha = 10; fprintf(1, '[Step 3]\n'); T = 10; fprintf(1, '[Step 4]\n'); Ks = K*alpha*(T*s+1)/(alpha*T*s+1) bode(P*Ks, 'g'); legend('P', 'Lhat', 'L'); fprintf(1, '[Check]\n'); cl1 = feedback(P*K, 1); % 比例補償のみ cl2 = feedback(P*Ks, 1); % 比例補償+位相進み figure(2); step(cl1, 'r', cl2, 'g'); legend('比例補償', '比例補償+位相遅れ補償'); % ランプ応答を計算する関数は無いらしいので、インパルス応答を計算する関数impulseを流用する Rs = 1/(s*s); % ランプ関数 cl1_ramp = cl1*Rs; cl2_ramp = cl2*Rs; figure(3); impulse(cl1_ramp, 'r', cl2_ramp, 'g'); % 位相遅れ補償の方が、定常偏差が小さい。 legend('比例補償', '比例補償+位相遅れ補償'); hold on; % ステップ応答を計算する関数stepを流用してもできる step(cl1/s, 'k--', cl2/s, 'b--'); % 黒破線は、赤線に重なる(impulse, stepの結果が一致)。緑と青破線も同様。 legend('比例補償', '比例補償+位相遅れ補償', '比例補償(step使用)', '比例+位相遅れ補償(step使用)');