Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Step info improve jpp#567

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged

Conversation

juanodecc
Copy link
Contributor

This modification improve step_info results:

Solve the issue Any plan for step_info to support negative step responses?#337
solve the issue step_info problem with non stationary systems response#564
solve the issue step_info undershoot must be "Undershoot: Percentage of undershoot"#565

I try to fullfill pep 8
Add some aditional tests to check the results

joaoantoniocardoso reacted with thumbs up emoji
1) System Type 1 - Step response not stationary:  G(s)=1/s(s+1)2) SISO system with under shoot response and positive final value G(s)=(-s+1)/(s²+s+1)3) Same system that 2) with k=-14) example from matlab online helphttps://www.mathworks.com/help/control/ref/stepinfo.html G(s)=(s²+5s+5)/(s^4+1.65s^3+6.5s+2)with stepinfo output:        RiseTime: 3.8456    SettlingTime: 27.9762     SettlingMin: 2.0689     SettlingMax: 2.6873       Overshoot: 7.4915      Undershoot: 0            Peak: 2.6873        PeakTime: 8.05305) example from matlab online helphttps://www.mathworks.com/help/control/ref/stepinfo.htmlA = [0.68 -0.34; 0.34 0.68];B = [0.18 -0.05; 0.04 0.11];C = [0 -1.53; -1.12 -1.10];D = [0 0; 0.06 -0.37];sys = StateSpace(A,B,C,D,0.2);examine the response characteristics for the response from the first input to the second output of sys.with stepinfo output:        RiseTime: 0.4000    SettlingTime: 2.8000     SettlingMin: -0.6724     SettlingMax: -0.5188       Overshoot: 24.6476      Undershoot: 11.1224            Peak: 0.6724        PeakTime: 1
@coveralls
Copy link

coveralls commentedMar 12, 2021
edited
Loading

Coverage Status

Coverage decreased (-0.03%) to 88.832% when pulling81ae64f on juanodecc:step_info_improve_jpp into92de12d on python-control:master.

Comment on lines +798 to +805
rise_time: float = np.NaN
settling_time: float = np.NaN
settling_min: float = np.NaN
settling_max: float = np.NaN
peak_value: float = np.Inf
peak_time: float = np.Inf
undershoot: float = np.NaN
overshoot: float = np.NaN
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

The first use of typing in python-control?

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

yes, is wrong?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Not at all! Good thing we already ditched Python 2.

Comment on lines 816 to 838
if InfValue < 0.0:
# RiseTime
tr_lower_index = (np.where(yout <= RiseTimeLimits[0] * InfValue)[0])[0]
tr_upper_index = (np.where(yout <= RiseTimeLimits[1] * InfValue)[0])[0]
# SettlingTime
for i in reversed(range(T.size - 1)):
if (-yout[i] <= np.abs(inf_margin)) | (-yout[i] >= np.abs(sup_margin)):
settling_time = T[i + 1]
break
# Overshoot and Undershoot
overshoot = np.abs(100. * ((-yout).max() - np.abs(InfValue)) / np.abs(InfValue))
undershoot = np.abs(100. * (-yout).min() / np.abs(InfValue))
else:
tr_lower_index = (np.where(yout >= RiseTimeLimits[0] * InfValue)[0])[0]
tr_upper_index = (np.where(yout >= RiseTimeLimits[1] * InfValue)[0])[0]
# SettlingTime
for i in reversed(range(T.size - 1)):
if (yout[i] <= inf_margin) | (yout[i] >= sup_margin):
settling_time = T[i + 1]
break
# Overshoot and Undershoot
overshoot = np.abs(100. * (yout.max() - InfValue) / InfValue)
undershoot = np.abs(100. * yout.min() / InfValue)
Copy link
Contributor

@bnavigatorbnavigatorMar 12, 2021
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Hmm, this has a lot of duplicate code. Have you considered using asign variable and theabs() function instead of two completely separate blocks? I think It won't turn out much more convoluted than the current InfValue < 0 part.

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

ok

juanodeccand others added2 commitsMarch 16, 2021 11:16
systems converting to SISO systems from input=0 to output =0solve problems with non stationary systems doingSteadyStateValue= nan when  y_final is inf
@bnavigator
Copy link
Contributor

Other than the MIMO handling (#574), this looks good to me. I'll merge this. Future PRs can improve it further.

joaoantoniocardoso reacted with thumbs up emoji

@bnavigatorbnavigator merged commit258c9c2 intopython-control:masterMar 17, 2021
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@bnavigatorbnavigatorbnavigator left review comments

Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
0.9.0
4 participants
@juanodecc@coveralls@bnavigator@murrayrm

[8]ページ先頭

©2009-2025 Movatter.jp