フィルターのクリア

Problem in observibility and controlibility function ctrbf,obsvf

3 ビュー (過去 30 日間)
Ashikur
Ashikur 2011 年 3 月 27 日
After doing similarity transform, transfer function of a system taking controllable modes should be same as original. But it is not showing same results.
>> clear >> A = [-.5 1 0;-1 -.5 0; 0 1 0]
A =
-0.5000 1.0000 0
-1.0000 -0.5000 0
0 1.0000 0
>> b=[1;2;0]
b =
1
2
0
>> c =[0 0 1]
c =
0 0 1
>> [Abar,Bbar,Cbar,T,k]=ctrbf(A,b,c)
Abar =
0 0 0
0.4472 -0.5000 1.3416
0.6667 -0.7454 -0.5000
Bbar =
0
0.0000
2.2361
Cbar =
0.7454 0.6667 0
T =
-0.5963 0.2981 0.7454
0.6667 -0.3333 0.6667
0.4472 0.8944 0
k =
1 1 0
>> c*inv([s 0 0;0 s 0;0 0 s]-A)*b ??? Undefined function or variable 's'.
>> s=sym('s'); >> c*inv([s 0 0;0 s 0;0 0 s]-A)*b
ans =
(2*(4*s + 2))/(s*(4*s^2 + 4*s + 5)) - 4/(s*(4*s^2 + 4*s + 5))
>> Cbar*inv([s 0 0;0 s 0;0 0 s]-Abar)*Bbar
ans =
(4*s + 2)/(13510798882111488*(4*s^2 + 4*s + 5)) + 40/(20*s^2 + 20*s + 25)
>> T*A*T'
ans =
0 0 0
0.4472 -0.5000 1.3416
0.6667 -0.7454 -0.5000
>> Ac=[Abar(2,2) Abar(2,3);Abar(3,2) Abar(3,3)]
Ac =
-0.5000 1.3416
-0.7454 -0.5000
>> Bc=[Bbar(2,1);Bbar(2,3)] ??? Attempted to access Bbar(2,3); index out of bounds because size(Bbar)=[3,1].
>> Bc=[Bbar(2,1);Bbar(3,1)]
Bc =
0.0000
2.2361
>> Cc=[Cbar(1,2);Cbar(1,3)]
Cc =
0.6667
0
>> Cc=[Cbar(1,2) Cbar(1,3)]
Cc =
0.6667 0
>> Cc*inv([s 0 ;0 s]-Ac)*Bc
ans =
(4*s + 2)/(13510798882111488*(4*s^2 + 4*s + 5)) + 8/(4*s^2 + 4*s + 5)
>>
  1 件のコメント
Walter Roberson
Walter Roberson 2011 年 3 月 27 日
It would be easier on readers if you were to cut out the places you know you made mistakes.

サインインしてコメントする。

採用された回答

Teja Muppirala
Teja Muppirala 2011 年 3 月 28 日
This difference is just from round-off errors. Notice the second element in Bbar is 1.1102e-016. That is why you get that very large denominator (13510798882111488) in the symbolic expression
say Bbar(2) = 0, then everything works fine.
A = [-.5 1 0;-1 -.5 0; 0 1 0];
b=[1;2;0];
c =[0 0 1];
[Abar,Bbar,Cbar,T,k]=ctrbf(A,b,c)
syms s
Bbar(2) = 0;
c*( (s*eye(3)-A) \b)
Cbar*( (s*eye(3)-Abar) \Bbar)

その他の回答 (1 件)

Teja Muppirala
Teja Muppirala 2011 年 3 月 28 日
Just a suggestion, but when doing symbolic calculations using 's' as a transfer function variable, you might want to explicitly make s a transfer function instead of just an ordinary symbolic variable.
s = tf('s')
instead of
s = sym('s')
This will allow you to actually treat those expressions like transfer functions.
G1 = c*( (s*eye(3)-A) \b) G2 = Cbar*( (s*eye(3)-Abar) \Bbar)
bode(G1) etc...
There is also a function MINREAL that you can use to cancel out poles and zeros.
minreal(G1,1e-6)

カテゴリ

Help Center および File ExchangeSymbolic Math Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by