【本章のねらい】 ・状態空間表現を導き,その構造をブロック線図で表す。 ・状態空間表現に対する操作として座標変換と直列結合を行う。 |
1.1 状態空間表現の導出とブロック線図
古典制御では,主に1入力1出力をもつ線形ダイナミカルシステム(線形系)の入出力特性に注目し,これを伝達関数で表した。一方,現代制御では,多入出力をもつ線形系において,「まず入力が状態に影響を及ぼし,つぎに状態の一部が出力として現れる」と考え,前者を状態方程式で,後者を出力方程式で表す。すなわち,状態方程式と出力方程式をペアにした状態空間表現
を求めることが出発点となる。ここで,実ベクトル 以下では,(1.1)式の状態空間表現で表される ここで,(1)は直達項 ここでは,制御対象のダイナミクスは連立された線形常微分方程式で表されるとし,これから連立1階線形微分方程式の行列表現を導いて状態方程式を得る。 例題1.1 つぎの運動方程式を考える。 ここで, これを行列表現して, 演習1.1 つぎの運動方程式から2次自由系の状態方程式を導出せよ。 演習1.2 つぎの連成した運動方程式から, 例題1.2 つぎの運動方程式を考える。 ここで, これを行列表現すると, (1) (2) 演習1.3 例題1.2の(2)を考える。角速度を 演習1.4 つぎの2階線形常微分方程式から, MATLABを用いて状態空間表現 sys を定義するには,たとえば例題1.2の(1)で, %state_space.m ここで, sys.a,sys.b,sys.c,sys.d を用いる。たとえば sys.a(2,2)=-0.1 また, %state_space_cont.m もし状態方程式だけを指定する場合は,C=[]; D=[]; または C=eye(size(A)); D=0; とする。 |
SCILABを用いて状態空間表現 sys を定義するには,たとえば例題1.2の(1)で,の場合,つぎのコマンドを与えればよい。
//state_space.m
A=[0 1;0 -0.01]; B=[0;1]; C=[1 0]; D=0;
sys=syslin(A,B,C,D)
ここで,行列,
行列,
行列,
行列を参照するには,それぞれ
sys.a,sys.b,sys.c,sys.d
を用いる。たとえば行列の
要素を-0.1に変更するには,つぎのコマンドを与えればよい。
A(2,2)=-0.1; sys.a=A
また,行列,
行列が存在しない自由系 sys0 を定義するには,つぎのコマンドを与えればよい。
//state_space_cont.m
A=[0 1;0 -0.01]; B=[]; C=[1 0]; D=[];
sys0=syslin(A,B,C,D)
もし状態方程式だけを指定する場合は,C=[]; D=[]; または C=eye(size(A)); D=zeros(size(A,1),size(B,2)); とする。
さて,状態空間表現のブロック線図を作成することにより,どのように入力変数から状態変数を経て出力変数につながるかを表すことができる。これは,Simulinkなどを用いた時間応答シミュレーションに役に立つ。
例題1.3 つぎの1次系の状態空間表現をブロック線図で表せ。 解答 積分器の出力を 演習1.5 つぎの1次系の状態空間表現をブロック線図で表せ。 例題1.4 つぎの2次系の状態空間表現をブロック線図で表せ。 解答 演習1.6 つぎの2次系の状態空間表現をブロック線図で表せ。 演習1.7 演習1.2 で得られた状態空間表現について,ブロック線図を描け。 |
1.2 状態空間表現の座標変換と直列結合
![]() に対して,座標変換 を行うと,つぎの状態空間表現を得る。 ただし,変換後の係数行列は次式で与えられる。 例題1.5 2次系の状態空間表現 に対して,つぎの座標変換を行え。 解答 状態空間表現に を代入して この状態方程式の左から をかけて,つぎの状態空間表現を得る。 演習1.8 2次系の状態空間表現 に対して,つぎの座標変換を行え。 演習1.9 2次系の状態空間表現 に対して,どのような座標変換 を行なえば,出力方程式をつぎの形にできるか。 さて,つぎの2つの状態空間表現を考える。
例題1.6 1次系の状態空間表現 の入力に,むだ時間を1次系として近似したときの状態空間表現 の出力を結合して得られるシステムの状態空間表現を求めよ。 に と合わせて のように得られる。また,出力方程式は のように得られる。 演習1.10 2次系 の入力に,むだ時間を2次系として近似したときの状態空間表現 の出力を結合して得られるシステムの状態空間表現を求めよ。 MATLABを用いて座標変換を行うために,たとえば演習1.8で, %coordinate_transformation.m |
SCILABを用いて座標変換を行うために,たとえば演習1.8で,の場合,つぎのコマンドを与えればよい。
//coordinate_transformation.m
om=1; zeta=0.01;
A=[0 1;-om^2 -2*zeta*om]; B=[0;om^2]; C=[1 0]; D=0;
sys1=syslin(‘c’,A,B,C,D);
T=[1 0;-zeta*om om*sqrt(1-zeta^2)];
sys2=ss2ss(sys1,T)
つぎに,MATLABを用いて直列結合を行うためには,たとえば演習1.10で![]() %serial_connection.m ここで, sys1 と sys2 の順番に注意する。 最後に,状態空間表現から伝達関数行列表現(8章の(8.2)式を参照。)を求めるには,コマンド tf を用いる。たとえば,上のむだ時間を2次系として近似したときの状態空間表現 sys2 の伝達関数を求めるには,コマンド tf(sys2) を与えればよい。 |
つぎに,SCILABを用いて直列結合を行うためには,たとえば演習1.10での場合,つぎのコマンドを与えればよい。
//serial_connection.m
A1=[0 1;0 0]; B1=[0;1]; C1=[1 0]; D1=0;
sys1=syslin(‘c’,A1,B1,C1,D1);
L=1;
A2=[0 1;-12/L^2 -6/L]; B2=[0;1]; C2=[0 -12/L]; D2=1;
sys2=syslin(‘c’,A2,B2,C2,D2);
sys=sys1*sys2
ここで, sys1 と sys2 の順番に注意する。
最後に,状態空間表現から伝達関数行列表現(8章の(8.2)式を参照。)を求めるには,コマンド ss2tf を用いる。たとえば,上のむだ時間を2次系として近似したときの状態空間表現 sys2 の伝達関数を求めるには,コマンド ss2tf(sys2) を与えればよい。
演習問題の解答
演習1.1 ![]() ![]() 演習1.2 または 演習1.3 一定のトルク 演習1.4 または 演習1.5 演習1.6 演習1.7 演習1.8 状態空間表現に を代入して この状態方程式の左から をかけて,つぎの状態空間表現を得る。 演習1.9 を満足させればよいので,たとえば 演習1.10 |