From ca6f3dafd20c4ba83c69d96bcfacb2f3cca51ea6 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Wed, 16 Apr 2025 22:29:56 -0400 Subject: [PATCH 1/6] Update Nyquist rescaling + other improvements --- control/freqplot.py | 44 ++++++++++++++++++++------- control/tests/nyquist_test.py | 57 +++++++++++++++++++++++++++++++++-- 2 files changed, 87 insertions(+), 14 deletions(-) diff --git a/control/freqplot.py b/control/freqplot.py index cba975e77..186dedd65 100644 --- a/control/freqplot.py +++ b/control/freqplot.py @@ -1100,13 +1100,14 @@ def gen_zero_centered_series(val_min, val_max, period): _nyquist_defaults = { 'nyquist.primary_style': ['-', '-.'], # style for primary curve 'nyquist.mirror_style': ['--', ':'], # style for mirror curve - 'nyquist.arrows': 2, # number of arrows around curve + 'nyquist.arrows': 3, # number of arrows around curve 'nyquist.arrow_size': 8, # pixel size for arrows 'nyquist.encirclement_threshold': 0.05, # warning threshold 'nyquist.indent_radius': 1e-4, # indentation radius 'nyquist.indent_direction': 'right', # indentation direction - 'nyquist.indent_points': 50, # number of points to insert - 'nyquist.max_curve_magnitude': 20, # clip large values + 'nyquist.indent_points': 200, # number of points to insert + 'nyquist.max_curve_magnitude': 15, # rescale large values + 'nyquist.blend_fraction': 0.15, # when to start scaling 'nyquist.max_curve_offset': 0.02, # offset of primary/mirror 'nyquist.start_marker': 'o', # marker at start of curve 'nyquist.start_marker_size': 4, # size of the marker @@ -1638,6 +1639,10 @@ def nyquist_plot( The matplotlib axes to draw the figure on. If not specified and the current figure has a single axes, that axes is used. Otherwise, a new figure is created. + blend_fraction : float, optional + For portions of the Nyquist curve that are scaled to have a maximum + magnitude of `max_curve_magnitude`, begin a smooth rescaling at + this fraction of `max_curve_magnitude`. Default value is 0.15. encirclement_threshold : float, optional Define the threshold for generating a warning if the number of net encirclements is a non-integer value. Default value is 0.05 and can @@ -1784,6 +1789,8 @@ def nyquist_plot( ax_user = ax max_curve_magnitude = config._get_param( 'nyquist', 'max_curve_magnitude', kwargs, _nyquist_defaults, pop=True) + blend_fraction = config._get_param( + 'nyquist', 'blend_fraction', kwargs, _nyquist_defaults, pop=True) max_curve_offset = config._get_param( 'nyquist', 'max_curve_offset', kwargs, _nyquist_defaults, pop=True) rcParams = config._get_param('ctrlplot', 'rcParams', kwargs, pop=True) @@ -1891,21 +1898,36 @@ def _parse_linestyle(style_name, allow_false=False): splane_contour = np.log(response.contour) / response.dt # Find the different portions of the curve (with scaled pts marked) + if blend_fraction < 0 or blend_fraction > 1: + raise ValueError("blend_fraction must be between 0 and 1") + blend_curve_start = (1 - blend_fraction) * max_curve_magnitude reg_mask = np.logical_or( - np.abs(resp) > max_curve_magnitude, - splane_contour.real != 0) - # reg_mask = np.logical_or( - # np.abs(resp.real) > max_curve_magnitude, - # np.abs(resp.imag) > max_curve_magnitude) + np.abs(resp) > blend_curve_start, + np.logical_not(np.isclose(splane_contour.real, 0))) scale_mask = ~reg_mask \ & np.concatenate((~reg_mask[1:], ~reg_mask[-1:])) \ & np.concatenate((~reg_mask[0:1], ~reg_mask[:-1])) # Rescale the points with large magnitude - rescale = np.logical_and( - reg_mask, abs(resp) > max_curve_magnitude) - resp[rescale] *= max_curve_magnitude / abs(resp[rescale]) + rescale_idx = (np.abs(resp) > blend_curve_start) + + if np.any(rescale_idx): # Only process if rescaling is needed + subset = resp[rescale_idx] + abs_subset = np.abs(subset) + unit_vectors = subset / abs_subset # Preserve phase/direction + + if blend_curve_start is None or \ + blend_curve_start == max_curve_magnitude: + # Clip at max_curve_magnitude + resp[rescale_idx] = max_curve_magnitude * unit_vectors + else: + # Logistic scaling + newmag = blend_curve_start + \ + (max_curve_magnitude - blend_curve_start) * \ + (abs_subset - blend_curve_start) / \ + (abs_subset + max_curve_magnitude - 2 * blend_curve_start) + resp[rescale_idx] = newmag * unit_vectors # Get the label to use for the line label = response.sysname if line_labels is None else line_labels[idx] diff --git a/control/tests/nyquist_test.py b/control/tests/nyquist_test.py index 42bb210c4..98ddc60d3 100644 --- a/control/tests/nyquist_test.py +++ b/control/tests/nyquist_test.py @@ -291,7 +291,7 @@ def test_nyquist_indent_default(indentsys): def test_nyquist_indent_dont(indentsys): # first value of default omega vector was 0.1, replaced by 0. for contour - # indent_radius is larger than 0.1 -> no extra quater circle around origin + # indent_radius is larger than 0.1 -> no extra quarter circle around origin with pytest.warns() as record: count, contour = ct.nyquist_response( indentsys, omega=[0, 0.2, 0.3, 0.4], indent_radius=.1007, @@ -428,6 +428,7 @@ def test_linestyle_checks(): ct.nyquist_plot(sys, primary_style=':', mirror_style='-.') @pytest.mark.usefixtures("editsdefaults") +@pytest.mark.xfail(reason="updated code avoids warning") def test_nyquist_legacy(): ct.use_legacy_defaults('0.9.1') @@ -526,6 +527,34 @@ def test_no_indent_pole(): sys, warn_encirclements=False, indent_direction='none') +def test_nyquist_rescale(): + sys = 2 * ct.tf([1], [1, 1]) * ct.tf([1], [1, 0])**2 + sys.name = 'How example' + + # Default case + cplt = ct.nyquist_plot(sys, indent_direction='left', label='default [0.15]') + + # Sharper corner + cplt = ct.nyquist_plot( + sys*4, indent_direction='left', + max_curve_magnitude=17, blend_fraction=0.05, label='fraction=0.05') + + # More gradual corner + cplt = ct.nyquist_plot( + sys*0.25, indent_direction='left', + max_curve_magnitude=13, blend_fraction=0.25, label='fraction=0.25') + + # No corner + cplt = ct.nyquist_plot( + sys*12, indent_direction='left', + max_curve_magnitude=19, blend_fraction=0, label='fraction=0') + + # Bad value + with pytest.raises(ValueError, match="blend_fraction must be between"): + cplt = ct.nyquist_plot( + sys, indent_direction='left', blend_fraction=1.2) + + if __name__ == "__main__": # # Interactive mode: generate plots for manual viewing @@ -566,8 +595,8 @@ def test_no_indent_pole(): sys = 3 * (s+6)**2 / (s * (s**2 + 1e-4 * s + 1)) plt.figure() ct.nyquist_plot(sys) - ct.nyquist_plot(sys, max_curve_magnitude=15) - ct.nyquist_plot(sys, indent_radius=1e-6, max_curve_magnitude=25) + ct.nyquist_plot(sys, max_curve_magnitude=10) + ct.nyquist_plot(sys, indent_radius=1e-6, max_curve_magnitude=20) print("Unusual Nyquist plot") sys = ct.tf([1], [1, 3, 2]) * ct.tf([1], [1, 0, 1]) @@ -595,3 +624,25 @@ def test_no_indent_pole(): plt.figure() cplt = ct.nyquist_plot([sys, sys1, sys2]) cplt.set_plot_title("Mixed FRD, tf data") + + plt.figure() + print("Jon How example") + test_nyquist_rescale() + + # + # Save the figures in a PDF file for later comparisons + # + import subprocess + from matplotlib.backends.backend_pdf import PdfPages + from datetime import date + + # Create the file to store figures + git_info = subprocess.check_output(['git', 'describe'], text=True).strip() + pdf = PdfPages( + f'nyquist_gallery-{git_info}-{date.today().isoformat()}.pdf') + + # Go through each figure and save it + for fignum in plt.get_fignums(): + pdf.savefig(plt.figure(fignum)) + + pdf.close() From 5aca44ac25da5d65bfbc4de34b0c9b88055a6222 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Sat, 21 Jun 2025 01:42:49 -0400 Subject: [PATCH 2/6] ruff check fixes --- control/tests/nyquist_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/control/tests/nyquist_test.py b/control/tests/nyquist_test.py index 98ddc60d3..4fa6e6d67 100644 --- a/control/tests/nyquist_test.py +++ b/control/tests/nyquist_test.py @@ -551,8 +551,7 @@ def test_nyquist_rescale(): # Bad value with pytest.raises(ValueError, match="blend_fraction must be between"): - cplt = ct.nyquist_plot( - sys, indent_direction='left', blend_fraction=1.2) + ct.nyquist_plot(sys, indent_direction='left', blend_fraction=1.2) if __name__ == "__main__": From f37656b4efb63004c32e58c006a37273dee80765 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Sat, 21 Jun 2025 01:57:15 -0400 Subject: [PATCH 3/6] updated documentation (user guide figures + docstrings) --- control/freqplot.py | 4 ++-- doc/figures/freqplot-nyquist-custom.png | Bin 43943 -> 44654 bytes doc/figures/freqplot-nyquist-default.png | Bin 41643 -> 42044 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/control/freqplot.py b/control/freqplot.py index 186dedd65..74a0759a3 100644 --- a/control/freqplot.py +++ b/control/freqplot.py @@ -1756,8 +1756,8 @@ def nyquist_plot( to avoid poles, resulting in a scaling of the Nyquist plot, the line styles are according to the settings of the `primary_style` and `mirror_style` keywords. By default the scaled portions of the primary - curve use a dotted line style and the scaled portion of the mirror - image use a dashdot line style. + curve use a dashdot line style and the scaled portions of the mirror + image use a dotted line style. Examples -------- diff --git a/doc/figures/freqplot-nyquist-custom.png b/doc/figures/freqplot-nyquist-custom.png index 5cd2c19d0fe4e0cd01d995a4e4c9ef9eb9845399..8054c115bacec26f8bb3eab3ce09166ebb5a6042 100644 GIT binary patch literal 44654 zcmd43bySq$*ER|UUDAyR(%ndRHv*E<-Q6G{(gGqK0!nua2$CY*-7$2-(0up!d(U~# zd)D{Qx7PXNtOY(JGf(Y%$F;A0Jrkj-EQ5|hi~uz(`i7O& z{{Q|2i=&Gr>lYUt7jP70C)szdaB!H$uwVE>kpgQtxUxApNij{YjQvGVFHQ5y_LHO9 z0qWFqL*&=NBfc_{l~Iwljx)ZF&HHoilLr069~a+Fm)kmidWC`_dlamSJ?1<7MX{+( zgocQNTJ)v4MZ%dkIXQ>t;R3%mXJ3YQzxUh7TskDmP%QCJ!V(7uaNq?JrQ~qJGga6h zbK~OwKX`E$E&qM3pS5j&6moYlZKPJDIWaMDzI}#5`7@k4Nc@vBJw5&ER=T4_dl3Bg zg^#+rdWwK2i^5l?orFEe)>f{1(M+SWX|n#2RkjEZ&)1t9pSWA;IP$>|OyQYzc02+C z*V8^)&ux82>L}*1u`#d9SE_~yw+ouFe(%#r>D;*G*r9=(BRhA*GKm*mM|ocR(q-8am7jNNE{mBljOU1CrkKm z_iOt8{CPi9X}sXvOIE5|hho)+Sn=Zr0(ifo?Eyv9-JP4j!0iP)JNq*PgoLcDAw9>| z=c11f_waVPeuUFhu$uHiciGL0q>|Eq@L>R!r}=XZ1|A`Y0(WEx3&< zQBzaDXCstVP*^|drSLRDeZSP=U8u3jo2(} zSjuf|oS~|}T=0i3E_g#S?Pe;2i!=&cZgvVZ-o2YWY}%VDTL%}kd3QE!+5eSU@MGyM{ch#ZR<3He?Hj}h}CVrIwu_$=bg)@*TkUa0$mKppM z(Ptq$BV!D7p3e{Q^S3pqww*v zyzRk9_-305mH~vI3!Ra8j2PYl1_oqOQc{Q1<=wT`}zZ*^q@!1G~bJOVoi4 zBH5JC2<*Pjcg7dxhJ(w0-Pj1<9ZN9bqw=K3K$iov8Os}=1kKIqMn*-Ya+pWn`ju(z zDf`4t0T=1%i6J2p^kQpRa6yeCU=`lAts|HZKA3&Q$XK#?xm;&UfDyi4Xo@9%j`q*< zUkeEVOSq3b`xd5qaKkyC!1iRujwjAlS@_!Q@?gH#zF|>XP3=XE@c`5F4;ED#su)Ye3NPKnF7g2wDw?35@)H^Dg^^Oxn0Z3*Eoy zmR(vgTFo1l#gGYn&B!1n_uhChV8IE=@@28i_P=}~1o=kF^xLtb3^Q5}X|?%ZPD=vz zRTeyv#Anf$H8nL&zt!9Au0xZk&w4s#D3=WUi=}y=W6AeOD9iuyouTgmH{6paPv8W7 zlEft>

=j7lRvEmBav!rbe7QdoNeM%R~XT#chj;&Fk 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