From 905056c2541453dc06d887b6774acb53f41f2b2c Mon Sep 17 00:00:00 2001 From: David de Jong Date: Sun, 1 Apr 2018 17:55:03 +0200 Subject: [PATCH 1/3] added display of root_loci within matplotlib and added visual feedback for clicked point --- control/rlocus.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/control/rlocus.py b/control/rlocus.py index e22a31c25..dea9f183b 100644 --- a/control/rlocus.py +++ b/control/rlocus.py @@ -112,10 +112,12 @@ def root_locus(sys, kvect=None, xlim=None, ylim=None, plotstr='-', Plot=True, rloc_num += 1 f = pylab.figure(new_figure_name) + ax = pylab.axes() + if PrintGain: + click_point, = ax.plot([0], [0],color='k',markersize = 0,marker='s',zorder=20) f.canvas.mpl_connect( - 'button_release_event', partial(_RLFeedbackClicks, sys=sys)) - ax = pylab.axes() + 'button_release_event', partial(_RLFeedbackClicks, sys=sys,fig=f,point=click_point)) # plot open loop poles poles = array(denp.r) @@ -152,6 +154,7 @@ def _default_gains(num, den, xlim, ylim): kmax = _k_max(num, den, real_break, k_break) kvect = np.hstack((np.linspace(0, kmax, 50), np.real(k_break))) kvect.sort() + mymat = _RLFindRoots(num, den, kvect) mymat = _RLSortRoots(mymat) open_loop_poles = den.roots @@ -341,7 +344,7 @@ def _RLSortRoots(mymat): return sorted -def _RLFeedbackClicks(event, sys): +def _RLFeedbackClicks(event, sys,fig,point): """Print root-locus gain feedback for clicks on the root-locus plot """ s = complex(event.xdata, event.ydata) @@ -349,6 +352,12 @@ def _RLFeedbackClicks(event, sys): if abs(K.real) > 1e-8 and abs(K.imag/K.real) < 0.04: print("Clicked at %10.4g%+10.4gj gain %10.4g damp %10.4g" % (s.real, s.imag, K.real, -1 * s.real / abs(s))) + point.set_ydata(s.imag) + point.set_xdata(s.real) + point.set_markersize(8) + fig.suptitle("Clicked at: %10.4g%+10.4gj gain: %10.4g damp: %10.4g" % + (s.real, s.imag, K.real, -1 * s.real / abs(s))) + fig.canvas.draw() def _sgrid_func(fig=None, zeta=None, wn=None): From 7626161966633cbffea6393e92be9c35322e6c84 Mon Sep 17 00:00:00 2001 From: David de Jong Date: Wed, 16 May 2018 10:01:27 +0200 Subject: [PATCH 2/3] added better res --- control/rlocus.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control/rlocus.py b/control/rlocus.py index dea9f183b..061b8bd36 100644 --- a/control/rlocus.py +++ b/control/rlocus.py @@ -152,7 +152,7 @@ def _default_gains(num, den, xlim, ylim): k_break, real_break = _break_points(num, den) kmax = _k_max(num, den, real_break, k_break) - kvect = np.hstack((np.linspace(0, kmax, 50), np.real(k_break))) + kvect = np.hstack((np.linspace(0, kmax, 10000), np.real(k_break))) kvect.sort() mymat = _RLFindRoots(num, den, kvect) From c65c100d5cc080e63b1b17305cb3a3532c1a61fa Mon Sep 17 00:00:00 2001 From: David de Jong Date: Thu, 17 May 2018 09:46:53 +0200 Subject: [PATCH 3/3] reverted back --- control/rlocus.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control/rlocus.py b/control/rlocus.py index 061b8bd36..dea9f183b 100644 --- a/control/rlocus.py +++ b/control/rlocus.py @@ -152,7 +152,7 @@ def _default_gains(num, den, xlim, ylim): k_break, real_break = _break_points(num, den) kmax = _k_max(num, den, real_break, k_break) - kvect = np.hstack((np.linspace(0, kmax, 10000), np.real(k_break))) + kvect = np.hstack((np.linspace(0, kmax, 50), np.real(k_break))) kvect.sort() mymat = _RLFindRoots(num, den, kvect)