質問: 状態フィードバックを用いた安定化 今、教科書を使ってmatlabを独学しているのですがわからないことがでてきたので質問させていただきたいです。 a=[-1 1 -1; 1 0 3; 1 0.1 -1]; b=[1; 2; 1]; c=[1 -1 0]; d=0; この離散時間システムを状態フィードバックを用いて安定化させるという問題なのですが k=place(a,b,[0,0,0]) を使っても rank(b) より大きい重複度をもつ極を置けません。 というエラーが出てきて安定化出来ません。どう対処すればよいでしょうか また、初期値に対して、閉ループ系の状態変数の時間応答を示すグラフを作成するにはどのようにすればよいでしょうか。
回答: 通常、極配置法で複数の極を移動させる場合、移動先の極は重複しない値を指定する必要があります.これは以下のドキュメントの注意の箇所にも記載があります. https://jp.mathworks.com/help/control/getstart/pole-placement.html よって下記のように3つの極を異なる場所として指定することで解決するかと思われます. k=place(a,b,[-1,-2,-3]) また、初期値に対する閉ループ系の状態変数の時間応答を示すグラフは下記のような方法で作成できます. %シミュレーションの準備 sys = ss((a-b*k),b,c,d); %状態空間モデルの作成(閉ループ) t = 0:0.1:10; %時間の作成 x0 = [1 1 -1]; %初期値の作成 u = zeros(length(t),1); %入力データの作成 %動的システムのシミュレーション [y,tout,x] = lsim(sys,u,t,x0); %結果のプロット plot(tout,x) legend('x1','x2','x3') xlabel('time') ylabel('state') 以上、ご参考になれば幸いです.