2009年2月19日木曜日

MATLABで可観測正準形/可制御正準形

制御の教科書では必ず出てくる可観測正準形/可制御正準形ですが,数値計算上は大変扱いづらく,実際に数値的にこの形式にあえて変換することなんて試験かレポート以外ではあまりないと思います.
そのあたりの事情を反映してかMATLABにはこれらの形式に変換する関数というのは存在していないようです.
ctrbf/obsvfという関数があります.

しかしまぁ研究の都合上これらの正準形を計算したい場合もあるわけで,そんな場合に使うルーチンを作りました.1入力1出力の場合にしか使えません.1入力1出力の場合だと伝達関数形式に変換した時点でこれらの形式は単純に決まるわけですが,復習をかねて教科書的な方法で計算しています.

可観測正準形
function [ csys ] = obsvcanon(sys)
%OBSVCANON Compute observability canonical form

[n,d]=tfdata(tf(sys),'v');
W=hankel(fliplr(d(1:numel(d)-1)));
G=ss(sys);
U0=obsv(G);
S=W*U0;
csys=ss(S*G.a*inv(S),S*G.b,G.c*inv(S),G.d);

end


可制御正準形
function [ csys ] = ctrbcanon(sys)
%CTRBCANON Compute controllability canonical form

[n,d]=tfdata(tf(sys),'v');
W=hankel(fliplr(d(1:numel(d)-1)));
G=ss(sys);
UC=ctrb(G);
S=UC*W;
csys=ss(inv(S)*G.a*S,inv(S)*G.b,G.c*S,G.d);

end

ダウンロード

0 件のコメント: