EE611

Solution to Homework #27


1.a) Verify that the following system is deadbeat by finding xk in terms of x0 for k=1, 2, 3, and 4

 

b)


2.

» O = [C' A'*C' A'*A'*C' A'*A'*A'*C' A'*A'*A'*A'*C']

O =

1.0 1.0 1.0 -2.0 -2.0 0.25 4.0 4.0 0.06 -8.0 -8.0 0.015 16.0 16.0 0.004

1.0 2.0 0 -2.0 -1.75 0 4.0 4.06 0.00 -8.0 -7.98 0.0 16.0 16.04 0.00

0 1.0 1.0 0 0.25 0.25 0 0.06 0.06 0 0.015 0.015 0 0.004 0.004

1.0 1.0 0 -2.0 -2.0 0 4.0 4.0 0.00 -8.0 -8.0 0.0 16.0 16.0 0.00

1.0 1.0 1.0 -2.0 -2.0 0.25 4.0 4.0 0.06 -8.0 -8.0 0.015 16.0 16.0 0.004

» rank(O)

ans =

3

» Tocf = [O(:,1:3) [0;0;0;1;0] [0;0;0;0;1]]

Tocf =

1

1

1

0

0

1

2

0

0

0

0

1

1

0

0

1

1

0

1

0

1

1

1

0

1

» rank(Tocf)

ans =

5

» Aocf = inv(Tocf)*A'*Tocf

Aocf =

-2.0000

-2.2500

0

-0.4500

-0.4500

0

0.2500

0

0

0

0

0

0.2500

0

0

0

0.0000

0.0000

0.2500

0

0

0

0

0

0.2500

a) Observable eigenvalues:

» eig(Aocf(1:3,1:3))

ans =

-2.0000

0.2500

0.2500

» %These are the observable eigenvalues!!

b) Detectable?

» eig(Aocf(4:5,4:5))

ans =

0.2500

0.2500

» %All unobservable eigenvalues {0.25, 0.25} are stable!!

» %Therefore, system is detectable!!

c) For full-order observer, solve the dual controller problem to set eigenvalues of Ao-BoKo':

» Aocf = inv(Tocf)*A'*Tocf

Aocf =

-2.0000

-2.2500

0

-0.4500

-0.4500

0

0.2500

0

0

0

0

0

0.2500

0

0

0

0.0000

0.0000

0.2500

0

0

0

0

0

0.2500

» Bocf = inv(Tocf)*C'

Bocf =

1

0

0

   

0

1

0

   

0

0

1

   

0

0

0

   

0

0

0

   

» Ac = Aocf(1:3,1:3)

Ac =

-2.0000

-2.2500

0

   

0

0.2500

0

   

0

0

0.2500

   

» Bc = Bocf(1:3,:)

Bc =

1

0

0

   

0

1

0

   

0

0

1

   

» %set eigenvalues of Ac-BcKc to {0,0,0}:

» Kc = [-2 0 0;0 .25 0;0 0 .25]

Kc =

-2.0000

0

0

   

0

0.2500

0

   

0

0

0.2500

   

» eig(Ac-Bc*Kc)

ans =

0

0

0

» K = [Kc [0 0;0 0;0 0]]*inv(Tocf)

K =

-2.0000

0

2.0000

0

0

-0.1250

0.1250

0.1250

0

0

0.1250

-0.1250

0.1250

0

0

» Ko = K'

Ko =

-2.0000

-0.1250

0.1250

   

0

0.1250

-0.1250

   

2.0000

0.1250

0.1250

   

0

0

0

   

0

0

0

   

» eig(A-Ko*C)

ans =

0

0.0000

0.0000

0.2500

0.2500

d) Full-Order Observer/Controller Block Diagram

e) Design the Reduced-Order Observer:

» R = [0 0 0 1 0;0 0 0 0 1];

» Tro = inv([C;R])

Tro =

1.0000

-0.5000

0.5000

-0.5000

-1.0000

0

0.5000

-0.5000

-0.5000

0

-1.0000

0.5000

0.5000

0.5000

0

0

0

0

1.0000

0

0

0

0

0

1.0000

» inv(Tro)*A*Tro

ans =

-2.0000

0

0

0

0

-2.2500

0.2500

0

0

0

0.0000

0.0000

0.2500

0.0000

0.0000

-0.4500

0

0

0.2500

0

-0.4500

0

0

0

0.2500

» A11=ans(1:3,1:3)

A11 =

-2.0000

0

0

   

-2.2500

0.2500

0

   

0.0000

0.0000

0.2500

   

» A12=ans(1:3,4:5)

A12 = 1.0e-016 *

0

0

     

0

0

     

0.2776

0.5551

     

» A21=ans(4:5,1:3)

A21 =

-0.4500

0

0

   

-0.4500

0

0

   

» A22=ans(4:5,4:5)

A22 =

0.2500

0

0

0.2500

» inv(Tro)*B

ans =

1.0000

0.0000

2.0000

1.0000

0 0

0 -0.2000

0 -0.2000

» B1=ans(1:3,:)

B1 =

1.0000

0.0000

2.0000

1.0000

0

0

» B2=ans(4:5,:)

B2 =

0

-0.2000

0

-0.2000

» %set observable eigenvalues of A22-KroA12 to zero!!

» %let Ao = A22', Bo = A12', and solve the regulator problem!!

» Ao = A22'

Ao =

0.2500

0

0

0.2500

» Bo = A12'

Bo = 1.0e-016 *

0

0

0.2776

0

0

0.5551

» M=[1e16*Bo Ao*(1e16)*Bo]

M =

0

0

0.2776

0

0

0.0694

0

0

0.5551

0

0

0.1388

» rank(M)

ans =

1

» M=[Bo Ao*Bo]

M =

1.0e-016 *

0 0 only one eigenvalue is observable!!

» %Take 1 column of M, and pick another column

» %pick a number on the order of 1e-16, since

» %matlab will have a problem with round-off!!

» Tccf = [M(:,3) [1e-16;0]]

Tccf =

1.0e-016 *

0.2776

1.0000

       

0.5551

0

       

» rank(Tccf)

ans =

2

» Accf = inv(Tccf)*Ao*Tccf

Accf =

0.2500

0

0

0.2500

» Bccf = inv(Tccf)*Bo

Bccf =

0

0

1

0

0

0

» Ac = Accf(1,1)

Ac =

0.2500

» Bc = Bccf(1,:)

Bc =

0

0

1

» Kc = [0;0;.25]

Kc =

0

0

0.2500

» eig(Ac-Bc*Kc)

ans =

0

» K = [Kc [0;0;0]]*inv(Tccf)

K =

1.0e+015 *

0

0

 

0

0

 

0

4.5036

 

» Kro = K'

Kro =

1.0e+015 *

0

0

0

0

0

4.5036

» %check:

» eig(A22-Kro*A12)

ans =

0

0.2500

» Aro = A22-Kro*A12

Aro =

0.2500

0

 

-0.1250

0

 

» Bro = B2-Kro*B1

Bro =

0

-0.2000

 

0

-0.2000

 

» Cro = Aro*Kro-Kro*A11+A21

Cro =

1.0e+015 *

0.0000

0

0

0.0000

0.0000

-1.1259

» Q1 = Tro(:,1:3)

Q1 =

1.0000

-0.5000

0.5000

0

0.5000

-0.5000

-1.0000

0.5000

0.5000

0

0

0

0

0

0

» Q2 = Tro(:,4:5)

Q2 =

-0.5000

-1.0000

 

-0.5000

0

 

0.5000

0

 

1.0000

0

 

0

1.0000

 

Block Diagram: