- Notifications
You must be signed in to change notification settings - Fork441
Description
State space representations should, in my opinion, not be reduced automatically with StateSpace._remove_useless_states(), similar to the fact that we don't call minreal() automatically.
Unlike transfer functions, state space models can model non-observable or non-controllable behaviour, and cannot always be considered equivalent to their minimized form. Additionally, it is rather confusing to havess(A,B,C,D).A !== A
and e.g.ss(A,B,C,D).sample(T).A !== expm(A*T)
. For a more object-oriented interface, it would also be great to have member functions like stateSpace.isControllable(), which do not make sense if the system has already been minimized.
To give an example: The autonomous system x'=0, y=x is a signal model for the constant output y=x(0). It is not equivalent to the system y=0 if you consider the initial response for x(0) !== 0.
import controlprint(control.__version__)print(control.ss(0,0,1,0)) # expected: A,B,C,D unchanged from inputprint(control.ss(0,0,1,0).sample(1)) # expected: ss(1,0,1,0, dt=1)
output:
0.8.0A = []B = []C = []D = [[0]]A = []B = []C = []D = [[0]]dt = 1
Is there a reason for the current behavior, or would it be okay to change it?