Affine Non Autonomous State Space system

controlcontrol systemmathMATLAB

Normally We all know the state space model of the the form

der(x) = F*x(t)+G*u(t)
y = H*x(t)+J*u(t).

However I came across a state space model which has the following form

der(x) = F*x(t)+G*u(t) + c
y = H*x(t)+J*u(t).

Vector c is a constant matrix with same dimensions as Vector G. Actually this constant matrix was introduced in my Plant as due to the model of a gravity component which is always present and not associated with any of the input. We CANNOT assume c is a disturbance as we precisely know c.

One way i tackled it using the following form

der(x) = A*x(t)+[G c]*[u(t) 1]'
y = C*x(t)+D*u(t).

This made my system look like a two input system with second input as constant 1 and changed my G matrix from G to [G c].

However this technique is a serious problem in my full state feedback control and reference tracking as it does not behave normal. I haven't come across this type of SS models. i have searched a lot and just identified them as Affine Non Autonomous Systems Page 11. However I am unable to find some good resource on the web which deals with these types of systems. Every paper I have read is so much mathematically rigorous that it is beyond my understanding.

is there some control theory established for such systems which deals with control-ability, observe-ability, full state feedback and reference tracking? Has someone come across these types of systems?

I am using Matlab for my simulations and using lsim command.

Thanks

Best Answer

For starters, can you tell the dimensions of each matrix ? It will make it easier to think further.

Assuming that u(t) and c are both of same dimensions. If they are, you can just make it : der(x) = F*x(t)+G*[u(t) + c] , because u(t) is an input ( usually the one we control ) and c is also an input, only it's an external one. u(t) suggests it's time varying input, but that's just a general case, it doesn't have to be.

Edit after your comment:

Now that you have explained that u(t) is a 1x1 scalar, I see a solution, that may be too simple to work. You said you are using lsim command in Matlab, so I suppose you pass state space (ss) system model to it. In that case, since according to your comment u(t) is a scalar, G*u(t) is a constant 6x1 vector. Therefore, you can make a substition and say [G*u + c] is your new G matrix. For now I assume you are familiar with this part of using Matlab, but just in case you need a kickstart:

Matlab documentation on this website: LINK Says you can pass systems to lsim in this fashion :

[y,t] = lsim(sys,u,t)
[y,t,x] = lsim(sys,u,t) % for state-space models only
[y,t,x] = lsim(sys,u,t,x0) % with initial state