4.4.3 状態フィードバック制御のシミュレーション


 Simulink を利用したシミュレーションを行うためのファイル

 (1) 制御対象の状態空間表現の定義と極配置法によるコントローラ設計
    ...... M ファイル poleplace_acker.m (p.89)
clear
format compact

A = [ -3  1
       2 -2 ];
B = [ 2
      0 ];

p = [ -8+4j
      -8-4j ];
K = - place(A,B,p)

eig(A + B*K)
 (2) 状態フィードバック制御のシミュレーション ...... Simulink モデル (p.90)
simulink_sfbk_R2010b.mdl(R2010b 以降のバージョン用)
simulink_sfbk_R2007b.mdl(R2007b 以降のバージョン用)
simulink_sfbk_R13SP1.mdl(R13SP1 以降のバージョン用)
 (3) シミュレーション結果の表示 ...... M ファイル plot_data_sfbk.m (p.91)
figure(1);
plot(t,x(:,1)); grid;
xlabel('t [s]');
ylabel('x1 [V]');

figure(2);
plot(t,x(:,2)); grid;
xlabel('t [s]');
ylabel('x2 [V]');

 (3') シミュレーション結果の表示(グラフのカスタマイズ) ...... M ファイル plot_data_sfbk2.m (本には記載していない)
% =======================================================
figure(1);
plot(t,x(:,1),'r','linewidth',2); 
grid;

% --- グラフのカスタマイズ --------------------------------
xlim([0 1]);
ylim([-2 1]);

set(gca,'xtick',[0:0.2:1]);
set(gca,'ytick',[-2:0.5:1]);

set(gca,'fontname','times','fontsize',20);

xlabel('{\it{t}} [s]','fontname','times','fontsize',22);
ylabel('{\it{x}}_{1}({\it{t}}) [V]','fontname','times','fontsize',22);


% =======================================================
figure(2);
plot(t,x(:,2),'r','linewidth',2); 
grid;

% --- グラフのカスタマイズ --------------------------------
xlim([0 1]);
ylim([-0.5 1]);

set(gca,'xtick',[0:0.2:1]);
set(gca,'ytick',[-0.5:0.25:1]);

set(gca,'fontname','times','fontsize',20);

xlabel('{\it{t}} [s]','fontname','times','fontsize',22);
ylabel('{\it{x}}_{2}({\it{t}}) [V]','fontname','times','fontsize',22);


 実行結果

 (1) 制御対象の状態空間表現の定義,極配置法によるコントローラ設計と初期状態 x(0) = 0 の設定
>> poleplace_acker
K =
   -5.5000  -13.5000
ans =
  -8.0000 + 4.0000i
  -8.0000 - 4.0000i
>> x0 = [ 0  1 ]';
 (2) シミュレーション開始

    もしくは
    もしくは
>> sim('simulink_sfbk_R2010b')
 (3) シミュレーション結果の表示
>> plot_data_sfbk

 (3') シミュレーション結果の表示(グラフのカスタマイズ)
>> plot_data_sfbk2


 関数 "initial" を利用した状態フィードバック制御のシミュレーション ...... M ファイル sim_sfbk.m (p.91)
poleplace_acker
x0 = [0 1]';

sys = ss(A+B*K,zeros(2,1),eye(2),zeros(2,1));

t = linspace(0,1,1001);
x = initial(sys,x0,t);
plot_data_sfbk
>> sim_sfbk
K =
   -5.5000  -13.5000
ans =
  -8.0000 + 4.0000i
  -8.0000 - 4.0000i