Improve markov function, add mimo support, change api to TimeResponseData#1022
Conversation
|
Rather than breaking old code, it would be nice to do this in a way that preserved prior functionality. So use It also seems a bit odd (to me) to have the return type be a |
I will update this one.
I do not have strong feelings about that. The idea was to simplify the joint use of markov and era: impulse_response = ct.markov(response, m=10)
sysd = ct.era(impulse_response, r=4)Direct access of Markov parameters: _, H = ct.markov(response, m=10)I can change the return value to an array. I think it is also better for the old API. H = ct.markov(Y, U, m=10)
sysd = ct.era(H, r=4) |
cee59d1 to
a3276b7
Compare
murrayrm
left a comment
There was a problem hiding this comment.
Overall this looks OK. It would be good to add unit tests to cover some of the lines that are not currently covered.
control/modelsimp.py
Outdated
| """markov(Y, U, [, m]) | ||
|
|
||
| Calculate the first `m` Markov parameters [D CB CAB ...] | ||
| from data |
control/modelsimp.py
Outdated
| if Umat.shape[0] != 1 or Ymat.shape[0] != 1: | ||
| raise ControlMIMONotImplemented | ||
| # Get the system description | ||
| if (len(args) < 1): |
There was a problem hiding this comment.
Parenthesis are not needed here. The more standard style convention would be
if len(args) < 1:
control/modelsimp.py
Outdated
| elif (len(args) > 2): | ||
| raise ControlArgument("too many positional arguments") | ||
| else: | ||
| if (len(args) < 2): |
There was a problem hiding this comment.
OK to remove parens (here and below).
control/modelsimp.py
Outdated
| dt : True of float, optional | ||
| True indicates discrete time with unspecified sampling time, | ||
| positive number is discrete time with specified sampling time.It | ||
| can be used to scale the markov parameters in order to match the |
control/modelsimp.py
Outdated
| dt : True of float, optional | ||
| True indicates discrete time with unspecified sampling time, | ||
| positive number is discrete time with specified sampling time.It | ||
| can be used to scale the markov parameters in order to match the |
There was a problem hiding this comment.
In the case that a TimeResponseData object is given, should dt default to the value coming from the time array? You could set the default value of dt to None and then if the input is Y, U then you default to dt=1 and the input is data, you default to data.time[1] - data.time[0] (perhaps with a check to make sure that time points are equally spaced?).
fd87d92 to
e61ac53
Compare
This PR adds
This breaks old user code!Does not break old user code!