-
Notifications
You must be signed in to change notification settings - Fork 438
Improve markov function, add mimo support, change api to TimeResponseData #1022
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should end in a period.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Parenthesis are not needed here. The more standard style convention would be
if len(args) < 1:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK to remove parens (here and below).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Markov should be capitalized.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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?).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
fd87d92
to
e61ac53
Compare
This PR adds
This breaks old user code!Does not break old user code!