From 3ca12ff7c12c210dbbcdafdcdc851e354e0e3953 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Wed, 20 Mar 2024 20:16:45 -0700 Subject: [PATCH 1/4] initial reimplementation of phase plots --- control/__init__.py | 5 + control/config.py | 3 + control/flatsys/__init__.py | 2 +- control/freqplot.py | 2 +- control/phaseplot.py | 1097 +++++++++++++++-- control/tests/conftest.py | 10 + control/tests/kwargs_test.py | 24 +- control/tests/phaseplot_test.py | 122 +- doc/Makefile | 6 +- doc/conf.py | 1 + doc/examples.rst | 2 +- doc/{phaseplots.rst => phase_plane_plots.rst} | 2 +- doc/phaseplot-dampedosc-default.png | Bin 0 -> 103085 bytes doc/phaseplot-invpend-meshgrid.png | Bin 0 -> 161158 bytes doc/phaseplot-oscillator-helpers.png | Bin 0 -> 76927 bytes doc/plotting.rst | 109 +- examples/phase_plane_plots.py | 215 ++++ examples/phaseplots.py | 166 --- 18 files changed, 1454 insertions(+), 312 deletions(-) rename doc/{phaseplots.rst => phase_plane_plots.rst} (83%) create mode 100644 doc/phaseplot-dampedosc-default.png create mode 100644 doc/phaseplot-invpend-meshgrid.png create mode 100644 doc/phaseplot-oscillator-helpers.png create mode 100644 examples/phase_plane_plots.py delete mode 100644 examples/phaseplots.py diff --git a/control/__init__.py b/control/__init__.py index 5a9e05e95..45f2a56d6 100644 --- a/control/__init__.py +++ b/control/__init__.py @@ -63,6 +63,7 @@ * :mod:`~control.flatsys`: Differentially flat systems * :mod:`~control.matlab`: MATLAB compatibility module * :mod:`~control.optimal`: Optimization-based control +* :mod:`~control.phaseplot`: 2D phase plane diagrams """ @@ -103,6 +104,10 @@ from .passivity import * from .sysnorm import * +# Allow access to phase_plane functions as ct.phaseplot.fcn or ct.pp.fcn +from . import phaseplot +from . import phaseplot as pp + # Exceptions from .exception import * diff --git a/control/config.py b/control/config.py index 0ae883f49..b6d5385d4 100644 --- a/control/config.py +++ b/control/config.py @@ -152,6 +152,9 @@ def reset_defaults(): from .timeplot import _timeplot_defaults defaults.update(_timeplot_defaults) + from .phaseplot import _phaseplot_defaults + defaults.update(_phaseplot_defaults) + def _get_param(module, param, argval=None, defval=None, pop=False, last=False): """Return the default value for a configuration option. diff --git a/control/flatsys/__init__.py b/control/flatsys/__init__.py index cd77dc39a..6a608eecf 100644 --- a/control/flatsys/__init__.py +++ b/control/flatsys/__init__.py @@ -35,7 +35,7 @@ # Author: Richard M. Murray # Date: 1 Jul 2019 -r"""The :mod:`control.flatsys` package contains a set of classes and functions +r"""The :mod:`control.flatsys` module contains a set of classes and functions that can be used to compute trajectories for differentially flat systems. A differentially flat system is defined by creating an object using the diff --git a/control/freqplot.py b/control/freqplot.py index c147c5e67..961f499b3 100644 --- a/control/freqplot.py +++ b/control/freqplot.py @@ -1070,7 +1070,7 @@ 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 arrors around curve + 'nyquist.arrows': 2, # 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 diff --git a/control/phaseplot.py b/control/phaseplot.py index a32383fb8..92465002d 100644 --- a/control/phaseplot.py +++ b/control/phaseplot.py @@ -1,61 +1,912 @@ -#! TODO: add module docstring # phaseplot.py - generate 2D phase portraits # # Author: Richard M. Murray -# Date: 24 July 2011, converted from MATLAB version (2002); based on -# a version by Kristi Morgansen -# -# Copyright (c) 2011 by California Institute of Technology -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: +# Date: 23 Mar 2024 (legacy version information below) # -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. +# TODO +# * Allow multiple timepoints (and change timespec name to T?) +# * Update linestyles (color -> linestyle?) +# * Check for keyword compatibility with other plot routines +# * Set up configuration parameters (nyquist --> phaseplot) -import numpy as np -import matplotlib.pyplot as mpl +"""The :mod:`control.phaseplot` module contains functions for generating 2D +phase plots. +The base function for creating phase plane portraits is +:func:`~control.phase_plane_plot`, which generates a phase plane portrait +for a 2 state I/O system (with no inputs). In addition, several other +functions are available to creat ecustomize phase plane plots: + +* boxgrid: Generate a list of points along the edge of a box +* circlegrid: Generate list of points around a circle +* equilpoints: Plot equilibrium points in the phase plane +* meshgrid: Generate a list of points forming a mesh +* separatrices: Plot separatrices in the phase plane +* streamlines: Plot stream lines in the phase plane +* vectorfield: Plot a vector field in the phase plane + +""" + +import math +import warnings + +import matplotlib as mpl +import matplotlib.pyplot as plt +import numpy as np from scipy.integrate import odeint + +from . import config from .exception import ControlNotImplemented +from .freqplot import _add_arrows_to_line2D +from .nlsys import NonlinearIOSystem, find_eqpt, input_output_response + +__all__ = ['phase_plane_plot', 'phase_plot', 'box_grid'] + +# Default values for module parameter variables +_phaseplot_defaults = { + 'phaseplot.arrows': 2, # number of arrows around curve + 'phaseplot.arrow_size': 8, # pixel size for arrows + 'phaseplot.separatrices_radius': 0.1 # initial radius for separatrices +} + +def phase_plane_plot( + sys, pointdata=None, timedata=None, gridtype=None, gridspec=None, + plot_streamlines=True, plot_vectorfield=False, plot_equilpoints=True, + plot_separatrices=True, ax=None, **kwargs +): + """Plot phase plane diagram. + + This function plots phase plane data, including vector fields, stream + lines, equilibrium points, and contour curves. + + Parameters + ---------- + sys : NonlinearIOSystem or callable(x, t, ...) + Function used to generate phase plane data. + pointdata : list or 2D array + List of the form [xmin, xmax, ymin, ymax] describing the + boundaries of the phase plot or an array of shape (N, 2) + giving points of at which to plot the vector field. + timedata : int or list of int + Time to simulate each streamline. If a list is given, a different + time can be used for each initial condition in `pointdata`. + gridtype : str, optional + The type of grid to use for generating initial conditions: + 'meshgrid' (default) generates a mesh of initial conditions within + the specified boundaries, 'boxgrid' generates initial conditions + along the edges of the boundary, 'circlegrid' generates a circle of + initial conditions around each point in point data. + gridspec : list, optional + If the gridtype is 'meshgrid' and 'boxgrid', `gridspec` gives the + size of the grid in the x and y axes on which to generate points. + If gridtype is 'circlegrid', then `gridspec` is a 2-tuple + specifying the radius and number of points around each point in the + `pointdata` array. + plot_streamlines : bool or dict + If `True` (default) then plot streamlines based on the pointdata + and gridtype. If set to a dict, pass on the key-value pairs in + the dict as keywords to :func:`~control.phaseplot.streamlines`. + plot_vectorfield : bool or dict + If `True` (default) then plot the vector field based on the pointdata + and gridtype. If set to a dict, pass on the key-value pairs in + the dict as keywords to :func:`~control.phaseplot.vectorfield`. + plot_equilpoints : bool or dict + If `True` (default) then plot equilibrium points based in the phase + plot boundary. If set to a dict, pass on the key-value pairs in the + dict as keywords to :func:`~control.phaseplot.equilpoints`. + plot_separatrices : bool or dict + If `True` (default) then plot separatrices starting from each + equilibrium point. If set to a dict, pass on the key-value pairs + in the dict as keywords to :func:`~control.phaseplot.streamlines`. + color : str + Plot all elements in the given color (use `plot_={'color': c}` + to set the color in one element of the phase plot. + ax : Axes + Use the given axes for the plot instead of creating a new figure. + + Returns + ------- + out : list of list of Artists + out[0] = list of Line2D objects (streamlines and separatrices) + out[1] = Quiver object (vector field arrows) + out[2] = list of Line2D objects (equilibrium points) + + """ + # Process arguments + pointdata = [-1, 1, -1, 1] if pointdata is None else pointdata + + # Create axis if needed + if ax is None: + fig, ax = plt.gcf(), plt.gca() + else: + fig = None # don't modify figure + + # Create copy of kwargs for later checking to find unused arguments + initial_kwargs = dict(kwargs) + + # Utility function to create keyword arguments + def _create_kwargs(global_kwargs, local_kwargs, **other_kwargs): + new_kwargs = dict(global_kwargs) + new_kwargs.update(other_kwargs) + if isinstance(local_kwargs, dict): + new_kwargs.update(local_kwargs) + return new_kwargs + + # Create array for storing outputs + out = np.empty(3, dtype=object) + out[0] = [] + + # Plot out the main elements + if plot_streamlines: + kwargs_local = _create_kwargs( + kwargs, plot_streamlines, gridspec=gridspec, gridtype=gridtype, + ax=ax) + out[0] += streamlines( + sys, pointdata, timedata, check_kwargs=False, **kwargs_local) + + # Get rid of keyword arguments handled by streamlines + for kw in ['arrows', 'arrow_size', 'arrow_style', 'color', + 'dir', 'params']: + initial_kwargs.pop(kw, None) + + # Reset the gridspec for the remaining commands, if needed + if gridtype not in [None, 'boxgrid', 'meshgrid']: + gridspec = None + + if plot_separatrices: + kwargs_local = _create_kwargs( + kwargs, plot_separatrices, gridspec=gridspec, ax=ax) + out[0] += separatrices( + sys, pointdata, check_kwargs=False, **kwargs_local) + + # Get rid of keyword arguments handled by separatrices + for kw in ['arrows', 'arrow_size', 'arrow_style', 'params']: + initial_kwargs.pop(kw, None) + + if plot_vectorfield: + kwargs_local = _create_kwargs( + kwargs, plot_vectorfield, gridspec=gridspec, ax=ax) + out[1] = vectorfield( + sys, pointdata, check_kwargs=False, **kwargs_local) + + # Get rid of keyword arguments handled by vectorfield + for kw in ['color', 'params']: + initial_kwargs.pop(kw, None) + + if plot_equilpoints: + kwargs_local = _create_kwargs( + kwargs, plot_equilpoints, gridspec=gridspec, ax=ax) + out[2] = equilpoints( + sys, pointdata, check_kwargs=False, **kwargs_local) + + # Get rid of keyword arguments handled by equilpoints + for kw in ['params']: + initial_kwargs.pop(kw, None) + + # Make sure all keyword arguments were used + if initial_kwargs: + raise TypeError("unrecognized keywords: ", str(initial_kwargs)) + + if fig is not None: + fig.suptitle(f"Phase portrait for {sys.name}") + ax.set_xlabel(sys.state_labels[0]) + ax.set_ylabel(sys.state_labels[1]) + + return out + + +def vectorfield( + sys, pointdata, gridspec=None, ax=None, check_kwargs=True, **kwargs): + """Plot a vector field in the phase plane. + + This function plots a vector field for a two-dimensional state + space system. + + Parameters + ---------- + sys : NonlinearIOSystem or callable(x, t, ...) + Function used to generate phase plane data. + pointdata : list or 2D array + List of the form [xmin, xmax, ymin, ymax] describing the + boundaries of the phase plot or an array of shape (N, 2) + giving points of at which to plot the vector field. + gridtype : str, optional + The type of grid to use for generating initial conditions: + 'meshgrid' (default) generates a mesh of initial conditions within + the specified boundaries, 'boxgrid' generates initial conditions + along the edges of the boundary, 'circlegrid' generates a circle of + initial conditions around each point in point data. + gridspec : list, optional + If the gridtype is 'meshgrid' and 'boxgrid', `gridspec` gives the + size of the grid in the x and y axes on which to generate points. + If gridtype is 'circlegrid', then `gridspec` is a 2-tuple + specifying the radius and number of points around each point in the + `pointdata` array. + color : str + Plot the vector field in the given color. + ax : Axes + Use the given axes for the plot, otherwise use the current axes. + + Returns + ------- + out : Quiver + + """ + # Get system parameters + params = kwargs.pop('params', None) + + # Determine the points on which to generate the vector field + points, _ = _make_points(pointdata, gridspec, 'meshgrid') + + # Create axis if needed + if ax is None: + ax = plt.gca() + + # Set the plotting limits + xlim, ylim, maxlim = _set_axis_limits(ax, pointdata) + + # Figure out the color to use + color = _get_color(kwargs, ax) + + # Make sure all keyword arguments were processed + if check_kwargs and kwargs: + raise TypeError("unrecognized keywords: ", str(kwargs)) + + # Generate phase plane (quiver) data + vfdata = np.zeros((points.shape[0], 4)) + for i, x in enumerate(points): + vfdata[i, :2] = x + vfdata[i, 2:] = sys.dynamics(0, x, 0, params=params) + + out = ax.quiver( + vfdata[:, 0], vfdata[:, 1], vfdata[:, 2], vfdata[:, 3], + angles='xy', color=color) + + return out + + +def streamlines( + sys, pointdata, timedata=1, gridspec=None, gridtype=None, + dir=None, ax=None, check_kwargs=True, **kwargs): + """Plot stream lines in the phase plane. + + This function plots stream lines for a two-dimensional state space + system. + + Parameters + ---------- + sys : NonlinearIOSystem or callable(x, t, ...) + Function used to generate phase plane data. + pointdata : list or 2D array + List of the form [xmin, xmax, ymin, ymax] describing the + boundaries of the phase plot or an array of shape (N, 2) + giving points of at which to plot the vector field. + timedata : int or list of int + Time to simulate each streamline. If a list is given, a different + time can be used for each initial condition in `pointdata`. + gridtype : str, optional + The type of grid to use for generating initial conditions: + 'meshgrid' (default) generates a mesh of initial conditions within + the specified boundaries, 'boxgrid' generates initial conditions + along the edges of the boundary, 'circlegrid' generates a circle of + initial conditions around each point in point data. + gridspec : list, optional + If the gridtype is 'meshgrid' and 'boxgrid', `gridspec` gives the + size of the grid in the x and y axes on which to generate points. + If gridtype is 'circlegrid', then `gridspec` is a 2-tuple + specifying the radius and number of points around each point in the + `pointdata` array. + color : str + Plot the streamlines in the given color. + ax : Axes + Use the given axes for the plot, otherwise use the current axes. + + Returns + ------- + out : list of Line2D objects + + """ + # + # Keyword processing + # + + # Get system parameters + params = kwargs.pop('params', None) + + # Parse the arrows keyword + arrow_pos, arrow_style = _parse_arrow_keywords(kwargs) + + # Determine the points on which to generate the streamlines + points, gridspec = _make_points(pointdata, gridspec, gridtype=gridtype) + if dir is None: + dir = 'both' if gridtype == 'meshgrid' else 'forward' + + # Create axis if needed + if ax is None: + ax = plt.gca() + + # Set the axis limits + xlim, ylim, maxlim = _set_axis_limits(ax, pointdata) + + # Figure out the color to use + color = _get_color(kwargs, ax) + + # Make sure all keyword arguments were processed + if check_kwargs and kwargs: + raise TypeError("unrecognized keywords: ", str(kwargs)) + + # Create reverse time system, if needed + if dir != 'forward': + revsys = NonlinearIOSystem( + lambda t, x, u, params: -np.array(sys.updfcn(t, x, u, params)), + sys.outfcn, states=sys.nstates, inputs=sys.ninputs, + outputs=sys.noutputs, params=sys.params) + else: + revsys = None + + # Generate phase plane (streamline) data + out = [] + for i, X0 in enumerate(points): + # Create the trajectory for this point + timepts = _make_timepts(timedata, i) + traj = _create_trajectory( + sys, revsys, timepts, X0, params, dir, + gridtype=gridtype, gridspec=gridspec, xlim=xlim, ylim=ylim) + + # Plot the trajectory + if traj.shape[1] > 1: + out.append( + ax.plot(traj[0], traj[1], color=color)) + + # Add arrows to the lines at specified intervals + _add_arrows_to_line2D( + ax, out[-1][0], arrow_pos, arrowstyle=arrow_style, dir=1) + + return out + + +def equilpoints( + sys, pointdata, gridspec=None, color='k', ax=None, check_kwargs=True, + **kwargs): + """Plot equilibrium points in the phase plane. + + This function plots the equilibrium points for a planar dynamical system. + + Parameters + ---------- + sys : NonlinearIOSystem or callable(x, t, ...) + Function used to generate phase plane data. + pointdata : list or 2D array + List of the form [xmin, xmax, ymin, ymax] describing the + boundaries of the phase plot or an array of shape (N, 2) + giving points of at which to plot the vector field. + gridtype : str, optional + The type of grid to use for generating initial conditions: + 'meshgrid' (default) generates a mesh of initial conditions within + the specified boundaries, 'boxgrid' generates initial conditions + along the edges of the boundary, 'circlegrid' generates a circle of + initial conditions around each point in point data. + gridspec : list, optional + If the gridtype is 'meshgrid' and 'boxgrid', `gridspec` gives the + size of the grid in the x and y axes on which to generate points. + If gridtype is 'circlegrid', then `gridspec` is a 2-tuple + specifying the radius and number of points around each point in the + `pointdata` array. + color : str + Plot the equilibrium points in the given color. + ax : Axes + Use the given axes for the plot, otherwise use the current axes. + + Returns + ------- + out : list of Line2D objects + + """ + # Get system parameters + params = kwargs.pop('params', None) + + # Create axis if needed + if ax is None: + ax = plt.gca() + + # Set the axis limits + xlim, ylim, maxlim = _set_axis_limits(ax, pointdata) + + # Determine the points on which to generate the vector field + gridspec = [5, 5] if gridspec is None else gridspec + points, _ = _make_points(pointdata, gridspec, 'meshgrid') + + # Make sure all keyword arguments were processed + if check_kwargs and kwargs: + raise TypeError("unrecognized keywords: ", str(kwargs)) + + # Search for equilibrium points + equilpts = _find_equilpts(sys, points, params=params) + + # Plot the equilibrium points + out = [] + for xeq in equilpts: + out.append( + ax.plot(xeq[0], xeq[1], marker='o', color=color)) + + return out + + +def separatrices( + sys, pointdata, timedata=None, gridspec=None, ax=None, + check_kwargs=True, **kwargs): + """Plot separatrices in the phase plane. + + This function plots separatrices for a two-dimensional state space + system. + + Parameters + ---------- + sys : NonlinearIOSystem or callable(x, t, ...) + Function used to generate phase plane data. + pointdata : list or 2D array + List of the form [xmin, xmax, ymin, ymax] describing the + boundaries of the phase plot or an array of shape (N, 2) + giving points of at which to plot the vector field. + timedata : int or list of int + Time to simulate each streamline. If a list is given, a different + time can be used for each initial condition in `pointdata`. + gridtype : str, optional + The type of grid to use for generating initial conditions: + 'meshgrid' (default) generates a mesh of initial conditions within + the specified boundaries, 'boxgrid' generates initial conditions + along the edges of the boundary, 'circlegrid' generates a circle of + initial conditions around each point in point data. + gridspec : list, optional + If the gridtype is 'meshgrid' and 'boxgrid', `gridspec` gives the + size of the grid in the x and y axes on which to generate points. + If gridtype is 'circlegrid', then `gridspec` is a 2-tuple + specifying the radius and number of points around each point in the + `pointdata` array. + color : str + Plot the streamlines in the given color. + ax : Axes + Use the given axes for the plot, otherwise use the current axes. + + Returns + ------- + out : list of Line2D objects + + """ + # + # Keyword processing + # + # TODO: add unit test + radius = config._get_param('phaseplot', 'separatrices_radius') + + # Get system parameters + params = kwargs.pop('params', None) + + # Parse the arrows keyword + arrow_pos, arrow_style = _parse_arrow_keywords(kwargs) + + # Determine the initial states to use in searching for equilibrium points + gridspec = [5, 5] if gridspec is None else gridspec + points, _ = _make_points(pointdata, gridspec, 'meshgrid') + + # Find the for equilibrium points + equilpts = _find_equilpts(sys, points, params=params) + + # Create axis if needed + if ax is None: + ax = plt.gca() + + # Set the axis limits + xlim, ylim, maxlim = _set_axis_limits(ax, pointdata) + + # Figure out the color to use for stable, unstable subspaces + color = _get_color(kwargs) + match color: + case None: + stable_color = 'r' + unstable_color = 'b' + case (stable_color, unstable_color) | [stable_color, unstable_color]: + pass + case single_color: + stable_color = unstable_color = color + + # Make sure all keyword arguments were processed + if check_kwargs and kwargs: + raise TypeError("unrecognized keywords: ", str(kwargs)) -__all__ = ['phase_plot', 'box_grid'] + # Create a "reverse time" system to use for simulation + revsys = NonlinearIOSystem( + lambda t, x, u, params: -np.array(sys.updfcn(t, x, u, params)), + sys.outfcn, states=sys.nstates, inputs=sys.ninputs, + outputs=sys.noutputs, params=sys.params) + # Plot separatrices by flowing backwards in time along eigenspaces + out = [] + for i, xeq in enumerate(equilpts): + # Plot the equilibrium points + out.append( + ax.plot(xeq[0], xeq[1], marker='o', color='k')) + # Figure out the linearization and eigenvectors + evals, evecs = np.linalg.eig(sys.linearize(xeq, 0, params=params).A) + + # See if we have real eigenvalues (=> evecs are meaningful) + if evals[0].imag > 0: + continue + + # Create default list of time points + if timedata is not None: + timepts = _make_timepts(timedata, i) + + # Generate the traces + for j, dir in enumerate(evecs.T): + # Figure out time vector if not yet computed + if timedata is None: + timescale = math.log(maxlim / radius) / abs(evals[j].real) + timepts = np.linspace(0, timescale) + + # Run the trajectory starting in eigenvector directions + for eps in [-radius, radius]: + x0 = xeq + dir * eps + if evals[j].real < 0: + traj = _create_trajectory( + sys, revsys, timepts, x0, params, 'reverse', + gridtype='boxgrid', xlim=xlim, ylim=ylim) + color = stable_color + linestyle = '--' + elif evals[j].real > 0: + traj = _create_trajectory( + sys, revsys, timepts, x0, params, 'forward', + gridtype='boxgrid', xlim=xlim, ylim=ylim) + color = unstable_color + linestyle = '-' + + if traj.shape[1] > 1: + out.append(ax.plot( + traj[0], traj[1], color=color, linestyle=linestyle)) + + # Add arrows to the lines at specified intervals + _add_arrows_to_line2D( + ax, out[-1][0], arrow_pos, arrowstyle=arrow_style, + dir=1) + + return out + + +# +# User accessible utility functions +# +# TODO: document and add unit tests + +# Utility function for generating initial conditions around a box +# TODO: replace with boxgrid? +def box_grid(xlimp, ylimp): + """box_grid generate list of points on edge of box + + list = box_grid([xmin xmax xnum], [ymin ymax ynum]) generates a + list of points that correspond to a uniform grid at the end of the + box defined by the corners [xmin ymin] and [xmax ymax]. + """ + + # Generate a deprecation warning + warnings.warn( + "box_grid is deprecated; use phaseplot.boxgrid instead", + FutureWarning) + + return boxgrid( + np.linspace(xlimp[0], xlimp[1], xlimp[2]), + np.linspace(ylimp[0], ylimp[1], ylimp[2])) + + +# Utility function to generate boxgrid (in the form needed here) +def boxgrid(xvals, yvals): + """Generate list of points along the edge of box. + + points = boxgrid(xvals, yvals) generates a list of points that + corresponds to a grid given by the cross product of the x and y values. + + Parameters + ---------- + xvals, yvals: 1D array-like + Array of points defining the points on the lower and left edges of + the box. + + Returns + ------- + grid: 2D array + Array with shape (p, 2) defining the points along the edges of the + box, where p is the number of points around the edge. + + """ + return np.array( + [(x, yvals[0]) for x in xvals[:-1]] + # lower edge + [(xvals[-1], y) for y in yvals[:-1]] + # right edge + [(x, yvals[-1]) for x in xvals[:0:-1]] + # upper edge + [(xvals[0], y) for y in yvals[:0:-1]] # left edge + ) + + +# Utility function to generate meshgrid (in the form needed here) +# TODO: add examples of using grid functions directly +def meshgrid(xvals, yvals): + """Generate list of points forming a mesh. + + points = meshgrid(xvals, yvals) generates a list of points that + corresponds to a grid given by the cross product of the x and y values. + + Parameters + ---------- + xvals, yvals: 1D array-like + Array of points defining the points on the lower and left edges of + the box. + + Returns + ------- + grid: 2D array + Array of points with shape (n * m, 2) defining the mesh + + """ + xvals, yvals = np.meshgrid(xvals, yvals) + grid = np.zeros((xvals.shape[0] * xvals.shape[1], 2)) + grid[:, 0] = xvals.reshape(-1) + grid[:, 1] = yvals.reshape(-1) + + return grid + + +# Utility function to generate circular grid +def circlegrid(centers, radius, num): + """Generate list of points around a circle. + + points = circlegrid(centers, radius, num) generates a list of points + that form a circle around a list of centers. + + Parameters + ---------- + centers : 2D array-like + Array of points with shape (p, 2) defining centers of the circles. + radius : float + Radius of the points to be generated around each center. + num : int + Number of points to generate around the circle. + + Returns + ------- + grid: 2D array + Array of points with shape (p * num, 2) defining the circles. + + """ + centers = np.atleast_2d(np.array(centers)) + grid = np.zeros((centers.shape[0] * num, 2)) + for i, center in enumerate(centers): + grid[i * num: (i + 1) * num, :] = center + np.array([ + [radius * math.cos(theta), radius * math.sin(theta)] for + theta in np.linspace(0, 2 * math.pi, num, endpoint=False)]) + return grid + +# +# Internal utility functions +# + +# TODO: rename to something more useful (or remove??) def _find(condition): """Returns indices where ravel(a) is true. Private implementation of deprecated matplotlib.mlab.find """ return np.nonzero(np.ravel(condition))[0] +# Set axis limits for the plot +def _set_axis_limits(ax, pointdata): + # Get the current axis limits + if ax.lines: + xlim, ylim = ax.get_xlim(), ax.get_ylim() + else: + # Nothing on the plot => always use new limits + xlim, ylim = [np.inf, -np.inf], [np.inf, -np.inf] + + # Short utility function for updating axis limits + def _update_limits(cur, new): + return [min(cur[0], np.min(new)), max(cur[1], np.max(new))] + + # If we were passed a box, use that to update the limits + if isinstance(pointdata, list) and len(pointdata) == 4: + xlim = _update_limits(xlim, [pointdata[0], pointdata[1]]) + ylim = _update_limits(ylim, [pointdata[2], pointdata[3]]) + + elif isinstance(pointdata, np.ndarray): + pointdata = np.atleast_2d(pointdata) + xlim = _update_limits( + xlim, [np.min(pointdata[:, 0]), np.max(pointdata[:, 0])]) + ylim = _update_limits( + ylim, [np.min(pointdata[:, 1]), np.max(pointdata[:, 1])]) + # Keep track of the largest dimension on the plot + maxlim = max(xlim[1] - xlim[0], ylim[1] - ylim[0]) + + # Set the new limits + ax.autoscale(enable=True, axis='x', tight=True) + ax.autoscale(enable=True, axis='y', tight=True) + ax.set_xlim(xlim) + ax.set_ylim(ylim) + + return xlim, ylim, maxlim + + +# Find equilibrium points +def _find_equilpts(sys, points, params=None): + equilpts = [] + for i, x0 in enumerate(points): + # Look for an equilibrium point near this point + xeq, ueq = find_eqpt(sys, x0, 0, params=params) + + if xeq is None: + continue # didn't find anything + + # See if we have already found this point + seen = False + for x in equilpts: + if np.allclose(np.array(x), xeq): + seen = True + if seen: + continue + + # Save a new point + equilpts += [xeq.tolist()] + + return equilpts + + +def _make_points(pointdata, gridspec, gridtype): + # Check to see what type of data we got + if isinstance(pointdata, np.ndarray) and gridtype is None: + pointdata = np.atleast_2d(pointdata) + if pointdata.shape[1] == 2: + # Given a list of points => no action required + return pointdata, None + + # Utility function to parse (and check) input arguments + def _parse_args(defsize): + # if not isinstance(pointdata, (list, tuple)) or len(pointdata) != 4: + # raise ValueError("invalid grid data specification") + + if gridspec is None: + return defsize + + elif not isinstance(gridspec, (list, tuple)) or \ + len(gridspec) != len(defsize): + raise ValueError("invalid grid size specificiation") + + return gridspec + + # Generate points based on grid type + match gridtype: + case 'boxgrid' | None: + gridspec = _parse_args([6, 4]) + points = boxgrid( + np.linspace(pointdata[0], pointdata[1], gridspec[0]), + np.linspace(pointdata[2], pointdata[3], gridspec[1])) + + case 'meshgrid': + gridspec = _parse_args([9, 6]) + points = meshgrid( + np.linspace(pointdata[0], pointdata[1], gridspec[0]), + np.linspace(pointdata[2], pointdata[3], gridspec[1])) + + case 'circlegrid': + gridspec = _parse_args((0.5, 10)) + if isinstance(pointdata, np.ndarray): + # Create circles around each point + points = circlegrid(pointdata, gridspec[0], gridspec[1]) + else: + # Create circle around center of the plot + points = circlegrid( + np.array( + [(pointdata[0] + pointdata[1]) / 2, + (pointdata[0] + pointdata[1]) / 2]), + gridspec[0], gridspec[1]) + + case _: + raise ValueError(f"unknown grid type '{gridtype}'") + + return points, gridspec + + +def _parse_arrow_keywords(kwargs): + # Get values for params (and pop from list to allow keyword use in plot) + # TODO: turn this into a utility function (shared with nyquist_plot?) + arrows = config._get_param( + 'phaseplot', 'arrows', kwargs, None, pop=True) + arrow_size = config._get_param( + 'phaseplot', 'arrow_size', kwargs, None, pop=True) + arrow_style = config._get_param('phaseplot', 'arrow_style', kwargs, None) + + # Parse the arrows keyword + if not arrows: + arrow_pos = [] + elif isinstance(arrows, int): + N = arrows + # Space arrows out, starting midway along each "region" + arrow_pos = np.linspace(0.5/N, 1 + 0.5/N, N, endpoint=False) + elif isinstance(arrows, (list, np.ndarray)): + arrow_pos = np.sort(np.atleast_1d(arrows)) + else: + raise ValueError("unknown or unsupported arrow location") + + # Set the arrow style + if arrow_style is None: + arrow_style = mpl.patches.ArrowStyle( + 'simple', head_width=int(2 * arrow_size / 3), + head_length=arrow_size) + + return arrow_pos, arrow_style + + +def _get_color(kwargs, ax=None): + if 'color' in kwargs: + return kwargs.pop('color') + + # If we were passed an axis, try to increment color from previous + color_cycle = plt.rcParams['axes.prop_cycle'].by_key()['color'] + if ax is not None: + color_offset = 0 + if len(ax.lines) > 0: + last_color = ax.lines[-1].get_color() + if last_color in color_cycle: + color_offset = color_cycle.index(last_color) + 1 + return color_cycle[color_offset % len(color_cycle)] + else: + return None + + +def _create_trajectory( + sys, revsys, timepts, X0, params, dir, + gridtype=None, gridspec=None, xlim=None, ylim=None): + # Comput ethe forward trajectory + if dir == 'forward' or dir == 'both': + fwdresp = input_output_response(sys, timepts, X0=X0, params=params) + + # Compute the reverse trajectory + if dir == 'reverse' or dir == 'both': + revresp = input_output_response( + revsys, timepts, X0=X0, params=params) + + # Create the trace to plot + if dir == 'forward': + traj = fwdresp.states + elif dir == 'reverse': + traj = revresp.states[:, ::-1] + elif dir == 'both': + traj = np.hstack([revresp.states[:, :1:-1], fwdresp.states]) + + return traj + + +def _make_timepts(timepts, i): + if timepts is None: + return np.linspace(0, 1) + elif isinstance(timepts, (int, float)): + return np.linspace(0, timepts) + elif timepts.ndim == 2: + return timepts[i] + return timepts + + +# +# Legacy phase plot function +# +# Author: Richard Murray +# Date: 24 July 2011, converted from MATLAB version (2002); based on +# a version by Kristi Morgansen +# def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, - lingrid=None, lintime=None, logtime=None, timepts=None, - parms=(), verbose=True): - """Phase plot for 2D dynamical systems. + lingrid=None, lintime=None, logtime=None, timepts=None, + parms=(), params=None, tfirst=False, verbose=True): + + """(legacy) Phase plot for 2D dynamical systems. - Produces a vector field or stream line plot for a planar system. + Produces a vector field or stream line plot for a planar system. This + function has been replaced by the :func:`~control.phase_plane_map` and + :func:`~control.phase_plane_plot` functions. Call signatures: phase_plot(func, X, Y, ...) - display vector field on meshgrid @@ -116,6 +967,10 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, box_grid : construct box-shaped grid of initial conditions """ + # Generate a deprecation warning + warnings.warn( + "phase_plot is deprecated; use phase_plot_plot instead", + FutureWarning) # # Figure out ranges for phase plot (argument processing) @@ -123,72 +978,82 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, #! TODO: need to add error checking to arguments #! TODO: think through proper action if multiple options are given # - autoFlag = False; logtimeFlag = False; timeptsFlag = False; Narrows = 0; + autoFlag = False + logtimeFlag = False + timeptsFlag = False + Narrows = 0 + + # TODO: change parms to params with legacy processing if lingrid is not None: - autoFlag = True; - Narrows = lingrid; + autoFlag = True + Narrows = lingrid if (verbose): print('Using auto arrows\n') elif logtime is not None: - logtimeFlag = True; - Narrows = logtime[0]; - timefactor = logtime[1]; + logtimeFlag = True + Narrows = logtime[0] + timefactor = logtime[1] if (verbose): print('Using logtime arrows\n') elif timepts is not None: - timeptsFlag = True; - Narrows = len(timepts); + timeptsFlag = True + Narrows = len(timepts) # Figure out the set of points for the quiver plot #! TODO: Add sanity checks - elif (X is not None and Y is not None): - (x1, x2) = np.meshgrid( + elif X is not None and Y is not None: + x1, x2 = np.meshgrid( np.linspace(X[0], X[1], X[2]), np.linspace(Y[0], Y[1], Y[2])) Narrows = len(x1) else: # If we weren't given any grid points, don't plot arrows - Narrows = 0; + Narrows = 0 - if ((not autoFlag) and (not logtimeFlag) and (not timeptsFlag) - and (Narrows > 0)): + if not autoFlag and not logtimeFlag and not timeptsFlag and Narrows > 0: # Now calculate the vector field at those points - (nr,nc) = x1.shape; + (nr,nc) = x1.shape dx = np.empty((nr, nc, 2)) for i in range(nr): for j in range(nc): - dx[i, j, :] = np.squeeze(odefun((x1[i,j], x2[i,j]), 0, *parms)) + if tfirst: + dx[i, j, :] = np.squeeze( + odefun(0, [x1[i,j], x2[i,j]], *parms)) + else: + dx[i, j, :] = np.squeeze( + odefun([x1[i,j], x2[i,j]], 0, *parms)) # Plot the quiver plot #! TODO: figure out arguments to make arrows show up correctly if scale is None: - mpl.quiver(x1, x2, dx[:,:,1], dx[:,:,2], angles='xy') + plt.quiver(x1, x2, dx[:,:,1], dx[:,:,2], angles='xy') elif (scale != 0): #! TODO: optimize parameters for arrows #! TODO: figure out arguments to make arrows show up correctly - xy = mpl.quiver(x1, x2, dx[:,:,0]*np.abs(scale), + xy = plt.quiver(x1, x2, dx[:,:,0]*np.abs(scale), dx[:,:,1]*np.abs(scale), angles='xy') - # set(xy, 'LineWidth', PP_arrow_linewidth, 'Color', 'b'); + # set(xy, 'LineWidth', PP_arrow_linewidth, 'Color', 'b') #! TODO: Tweak the shape of the plot - # a=gca; set(a,'DataAspectRatio',[1,1,1]); - # set(a,'XLim',X(1:2)); set(a,'YLim',Y(1:2)); - mpl.xlabel('x1'); mpl.ylabel('x2'); + # a=gca; set(a,'DataAspectRatio',[1,1,1]) + # set(a,'XLim',X(1:2)); set(a,'YLim',Y(1:2)) + plt.xlabel('x1'); plt.ylabel('x2') # See if we should also generate the streamlines if X0 is None or len(X0) == 0: return # Convert initial conditions to a numpy array - X0 = np.array(X0); - (nr, nc) = np.shape(X0); + X0 = np.array(X0) + (nr, nc) = np.shape(X0) # Generate some empty matrices to keep arrow information - x1 = np.empty((nr, Narrows)); x2 = np.empty((nr, Narrows)); + x1 = np.empty((nr, Narrows)) + x2 = np.empty((nr, Narrows)) dx = np.empty((nr, Narrows, 2)) # See if we were passed a simulation time @@ -196,112 +1061,98 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, T = 50 # Parse the time we were passed - TSPAN = T; - if (isinstance(T, (int, float))): - TSPAN = np.linspace(0, T, 100); + TSPAN = T + if isinstance(T, (int, float)): + TSPAN = np.linspace(0, T, 100) # Figure out the limits for the plot if scale is None: # Assume that the current axis are set as we want them - alim = mpl.axis(); - xmin = alim[0]; xmax = alim[1]; - ymin = alim[2]; ymax = alim[3]; + alim = plt.axis() + xmin = alim[0]; xmax = alim[1] + ymin = alim[2]; ymax = alim[3] else: # Use the maximum extent of all trajectories - xmin = np.min(X0[:,0]); xmax = np.max(X0[:,0]); - ymin = np.min(X0[:,1]); ymax = np.max(X0[:,1]); + xmin = np.min(X0[:,0]); xmax = np.max(X0[:,0]) + ymin = np.min(X0[:,1]); ymax = np.max(X0[:,1]) # Generate the streamlines for each initial condition for i in range(nr): - state = odeint(odefun, X0[i], TSPAN, args=parms); + state = odeint(odefun, X0[i], TSPAN, args=parms, tfirst=tfirst) time = TSPAN - mpl.plot(state[:,0], state[:,1]) + plt.plot(state[:,0], state[:,1]) #! TODO: add back in colors for stream lines - # PP_stream_color(np.mod(i-1, len(PP_stream_color))+1)); - # set(h[i], 'LineWidth', PP_stream_linewidth); + # PP_stream_color(np.mod(i-1, len(PP_stream_color))+1)) + # set(h[i], 'LineWidth', PP_stream_linewidth) # Plot arrows if quiver parameters were 'auto' - if (autoFlag or logtimeFlag or timeptsFlag): + if autoFlag or logtimeFlag or timeptsFlag: # Compute the locations of the arrows #! TODO: check this logic to make sure it works in python for j in range(Narrows): # Figure out starting index; headless arrows start at 0 - k = -1 if scale is None else 0; + k = -1 if scale is None else 0 # Figure out what time index to use for the next point - if (autoFlag): + if autoFlag: # Use a linear scaling based on ODE time vector - tind = np.floor((len(time)/Narrows) * (j-k)) + k; - elif (logtimeFlag): + tind = np.floor((len(time)/Narrows) * (j-k)) + k + elif logtimeFlag: # Use an exponential time vector - # MATLAB: tind = find(time < (j-k) / lambda, 1, 'last'); - tarr = _find(time < (j-k) / timefactor); - tind = tarr[-1] if len(tarr) else 0; - elif (timeptsFlag): + # MATLAB: tind = find(time < (j-k) / lambda, 1, 'last') + tarr = _find(time < (j-k) / timefactor) + tind = tarr[-1] if len(tarr) else 0 + elif timeptsFlag: # Use specified time points - # MATLAB: tind = find(time < Y[j], 1, 'last'); - tarr = _find(time < timepts[j]); - tind = tarr[-1] if len(tarr) else 0; + # MATLAB: tind = find(time < Y[j], 1, 'last') + tarr = _find(time < timepts[j]) + tind = tarr[-1] if len(tarr) else 0 # For tailless arrows, skip the first point if tind == 0 and scale is None: - continue; + continue # Figure out the arrow at this point on the curve - x1[i,j] = state[tind, 0]; - x2[i,j] = state[tind, 1]; + x1[i,j] = state[tind, 0] + x2[i,j] = state[tind, 1] # Skip arrows outside of initial condition box if (scale is not None or (x1[i,j] <= xmax and x1[i,j] >= xmin and x2[i,j] <= ymax and x2[i,j] >= ymin)): - v = odefun((x1[i,j], x2[i,j]), 0, *parms) - dx[i, j, 0] = v[0]; dx[i, j, 1] = v[1]; + if tfirst: + pass + v = odefun(0, [x1[i,j], x2[i,j]], *parms) + else: + v = odefun([x1[i,j], x2[i,j]], 0, *parms) + dx[i, j, 0] = v[0]; dx[i, j, 1] = v[1] else: - dx[i, j, 0] = 0; dx[i, j, 1] = 0; + dx[i, j, 0] = 0; dx[i, j, 1] = 0 # Set the plot shape before plotting arrows to avoid warping - # a=gca; + # a=gca # if (scale != None): - # set(a,'DataAspectRatio', [1,1,1]); + # set(a,'DataAspectRatio', [1,1,1]) # if (xmin != xmax and ymin != ymax): - # mpl.axis([xmin, xmax, ymin, ymax]); - # set(a, 'Box', 'on'); + # plt.axis([xmin, xmax, ymin, ymax]) + # set(a, 'Box', 'on') # Plot arrows on the streamlines if scale is None and Narrows > 0: # Use a tailless arrow #! TODO: figure out arguments to make arrows show up correctly - mpl.quiver(x1, x2, dx[:,:,0], dx[:,:,1], angles='xy') - elif (scale != 0 and Narrows > 0): + plt.quiver(x1, x2, dx[:,:,0], dx[:,:,1], angles='xy') + elif scale != 0 and Narrows > 0: #! TODO: figure out arguments to make arrows show up correctly - xy = mpl.quiver(x1, x2, dx[:,:,0]*abs(scale), dx[:,:,1]*abs(scale), + xy = plt.quiver(x1, x2, dx[:,:,0]*abs(scale), dx[:,:,1]*abs(scale), angles='xy') - # set(xy, 'LineWidth', PP_arrow_linewidth); - # set(xy, 'AutoScale', 'off'); - # set(xy, 'AutoScaleFactor', 0); - - if (scale < 0): - bp = mpl.plot(x1, x2, 'b.'); # add dots at base - # set(bp, 'MarkerSize', PP_arrow_markersize); - - return; - -# Utility function for generating initial conditions around a box -def box_grid(xlimp, ylimp): - """box_grid generate list of points on edge of box - - list = box_grid([xmin xmax xnum], [ymin ymax ynum]) generates a - list of points that correspond to a uniform grid at the end of the - box defined by the corners [xmin ymin] and [xmax ymax]. - """ - - sx10 = np.linspace(xlimp[0], xlimp[1], xlimp[2]) - sy10 = np.linspace(ylimp[0], ylimp[1], ylimp[2]) + # set(xy, 'LineWidth', PP_arrow_linewidth) + # set(xy, 'AutoScale', 'off') + # set(xy, 'AutoScaleFactor', 0) - sx1 = np.hstack((0, sx10, 0*sy10+sx10[0], sx10, 0*sy10+sx10[-1])) - sx2 = np.hstack((0, 0*sx10+sy10[0], sy10, 0*sx10+sy10[-1], sy10)) + if scale < 0: + bp = plt.plot(x1, x2, 'b.'); # add dots at base + # set(bp, 'MarkerSize', PP_arrow_markersize) - return np.transpose( np.vstack((sx1, sx2)) ) diff --git a/control/tests/conftest.py b/control/tests/conftest.py index 338a7088c..2330e3818 100644 --- a/control/tests/conftest.py +++ b/control/tests/conftest.py @@ -73,6 +73,16 @@ def legacy_plot_signature(): warnings.resetwarnings() +@pytest.fixture(scope="function") +def ignore_future_warning(): + """Turn off warnings for functions that generate FutureWarning""" + import warnings + warnings.filterwarnings( + 'ignore', message='.*deprecated', category=FutureWarning) + yield + warnings.resetwarnings() + + # Allow pytest.mark.slow to mark slow tests (skip with pytest -m "not slow") def pytest_configure(config): config.addinivalue_line("markers", "slow: mark test as slow to run") diff --git a/control/tests/kwargs_test.py b/control/tests/kwargs_test.py index 53cc0076b..8180ff418 100644 --- a/control/tests/kwargs_test.py +++ b/control/tests/kwargs_test.py @@ -30,7 +30,8 @@ import control.tests.descfcn_test as descfcn_test @pytest.mark.parametrize("module, prefix", [ - (control, ""), (control.flatsys, "flatsys."), (control.optimal, "optimal.") + (control, ""), (control.flatsys, "flatsys."), + (control.optimal, "optimal."), (control.phaseplot, "phaseplot.") ]) def test_kwarg_search(module, prefix): # Look through every object in the package @@ -62,7 +63,12 @@ def test_kwarg_search(module, prefix): continue # Make sure there is a unit test defined - assert prefix + name in kwarg_unittest + if prefix + name not in kwarg_unittest: + # For phaseplot module, look for tests w/out prefix (and skip) + if prefix.startswith('phaseplot.') and \ + (prefix + name)[10:] in kwarg_unittest: + continue + pytest.fail(f"couldn't find kwarg test for {prefix}{name}") # Make sure there is a unit test if not hasattr(kwarg_unittest[prefix + name], '__call__'): @@ -151,6 +157,11 @@ def test_unrecognized_kwargs(function, nsssys, ntfsys, moreargs, kwargs, (control.nichols_plot, 1, (), {}), (control.nyquist, 1, (), {}), (control.nyquist_plot, 1, (), {}), + (control.phase_plane_plot, 1, ([-1, 1, -1, 1], 1), {}), + (control.phaseplot.streamlines, 1, ([-1, 1, -1, 1], 1), {}), + (control.phaseplot.vectorfield, 1, ([-1, 1, -1, 1], ), {}), + (control.phaseplot.equilpoints, 1, ([-1, 1, -1, 1], ), {}), + (control.phaseplot.separatrices, 1, ([-1, 1, -1, 1], ), {}), (control.singular_values_plot, 1, (), {})] ) def test_matplotlib_kwargs(function, nsysargs, moreargs, kwargs, mplcleanup): @@ -245,8 +256,9 @@ def test_response_plot_kwargs(data_fcn, plot_fcn, mimo): 'nyquist': test_matplotlib_kwargs, 'nyquist_response': test_response_plot_kwargs, 'nyquist_plot': test_matplotlib_kwargs, - 'pzmap': test_unrecognized_kwargs, + 'phase_plane_plot': test_matplotlib_kwargs, 'pole_zero_plot': test_unrecognized_kwargs, + 'pzmap': test_unrecognized_kwargs, 'rlocus': test_unrecognized_kwargs, 'root_locus': test_unrecognized_kwargs, 'root_locus_plot': test_unrecognized_kwargs, @@ -267,10 +279,10 @@ def test_response_plot_kwargs(data_fcn, plot_fcn, mimo): flatsys_test.TestFlatSys.test_point_to_point_errors, 'flatsys.solve_flat_ocp': flatsys_test.TestFlatSys.test_solve_flat_ocp_errors, + 'flatsys.FlatSystem.__init__': test_unrecognized_kwargs, 'optimal.create_mpc_iosystem': optimal_test.test_mpc_iosystem_rename, 'optimal.solve_ocp': optimal_test.test_ocp_argument_errors, 'optimal.solve_oep': optimal_test.test_oep_argument_errors, - 'flatsys.FlatSystem.__init__': test_unrecognized_kwargs, 'FrequencyResponseData.__init__': frd_test.TestFRD.test_unrecognized_keyword, 'FrequencyResponseData.plot': test_response_plot_kwargs, @@ -305,6 +317,10 @@ def test_response_plot_kwargs(data_fcn, plot_fcn, mimo): optimal_test.test_oep_argument_errors, 'optimal.OptimalEstimationProblem.create_mhe_iosystem': optimal_test.test_oep_argument_errors, + 'phaseplot.streamlines': test_matplotlib_kwargs, + 'phaseplot.vectorfield': test_matplotlib_kwargs, + 'phaseplot.equilpoints': test_matplotlib_kwargs, + 'phaseplot.separatrices': test_matplotlib_kwargs, } # diff --git a/control/tests/phaseplot_test.py b/control/tests/phaseplot_test.py index 8336ae975..0f6b0be06 100644 --- a/control/tests/phaseplot_test.py +++ b/control/tests/phaseplot_test.py @@ -10,24 +10,25 @@ """ -import matplotlib.pyplot as mpl +import matplotlib.pyplot as plt import numpy as np from numpy import pi import pytest from control import phase_plot +import control as ct +import control.phaseplot as pp - -@pytest.mark.usefixtures("mplcleanup") +# Legacy tests +@pytest.mark.usefixtures("mplcleanup", "ignore_future_warning") class TestPhasePlot: - - def testInvPendNoSims(self): - phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10)); - def testInvPendSims(self): phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10), X0 = ([1,1], [-1,1])) + def testInvPendNoSims(self): + phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10)); + def testInvPendTimePoints(self): phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10), X0 = ([1,1], [-1,1]), T=np.linspace(0,5,100)) @@ -46,11 +47,23 @@ def testInvPendAuto(self): phase_plot(self.invpend_ode, lingrid = 0, X0= [[-2.3056, 2.1], [2.3056, -2.1]], T=6, verbose=False) + def testInvPendFBS(self): + # Outer trajectories + phase_plot( + self.invpend_ode, timepts=[1, 4, 10], + X0=[[-2*pi, 1.6], [-2*pi, 0.5], [-1.8, 2.1], [-1, 2.1], + [4.2, 2.1], [5, 2.1], [2*pi, -1.6], [2*pi, -0.5], + [1.8, -2.1], [1, -2.1], [-4.2, -2.1], [-5, -2.1]], + T = np.linspace(0, 40, 800), + params={'m': 1, 'l': 1, 'b': 0.2, 'g': 1}) + + # Separatrices + def testOscillatorParams(self): # default values m = 1 b = 1 - k = 1 + k = 1 phase_plot(self.oscillator_ode, timepts = [0.3, 1, 2, 3], X0 = [[-1,1], [-0.3,1], [0,1], [0.25,1], [0.5,1], [0.7,1], [1,1], [1.3,1], [1,-1], [0.3,-1], [0,-1], [-0.25,-1], @@ -69,14 +82,103 @@ def d1(x1x2,t): x1x2_0 = np.array([[-1.,1.], [-1.,-1.], [1.,1.], [1.,-1.], [-1.,0.],[1.,0.],[0.,-1.],[0.,1.],[0.,0.]]) - mpl.figure(1) + plt.figure(1) phase_plot(d1,X0=x1x2_0,T=100) # Sample dynamical systems - inverted pendulum - def invpend_ode(self, x, t, m=1., l=1., b=0, g=9.8): + def invpend_ode(self, x, t, m=1., l=1., b=0.2, g=1): import numpy as np return (x[1], -b/m*x[1] + (g*l/m) * np.sin(x[0])) # Sample dynamical systems - oscillator def oscillator_ode(self, x, t, m=1., b=1, k=1, extra=None): return (x[1], -k/m*x[0] - b/m*x[1]) + + +@pytest.mark.parametrize( + "func, args, kwargs", [ + [ct.phaseplot.vectorfield, [], {}], + [ct.phaseplot.vectorfield, [], + {'color': 'k', 'gridspec': [4, 3], 'params': {}}], + [ct.phaseplot.streamlines, [1], {'params': {}, 'arrows': 5}], + [ct.phaseplot.streamlines, [], + {'dir': 'forward', 'gridtype': 'meshgrid', 'color': 'k'}], + [ct.phaseplot.streamlines, [1], + {'dir': 'reverse', 'gridtype': 'boxgrid', 'color': None}], + [ct.phaseplot.streamlines, [1], + {'dir': 'both', 'gridtype': 'circlegrid', 'gridspec': [0.5, 5]}], + [ct.phaseplot.equilpoints, [], {}], + [ct.phaseplot.equilpoints, [], {'color': 'r', 'gridspec': [5, 5]}], + [ct.phaseplot.separatrices, [], {}], + [ct.phaseplot.separatrices, [], {'color': 'k', 'arrows': 4}], + [ct.phaseplot.separatrices, [5], {'params': {}, 'gridspec': [5, 5]}], + [ct.phaseplot.separatrices, [5], {'color': ('r', 'g')}], + ]) +def test_helper_functions(func, args, kwargs): + sys = ct.nlsys( + lambda t, x, u, params: [x[0] - 3*x[1], -3*x[0] + x[1]], + states=2, inputs=0) + out = func(sys, [-1, 1, -1, 1], *args, **kwargs) + +def test_basic_phase_plots(savefigs=False): + sys = ct.nlsys( + lambda t, x, u, params: np.array([[0, 1], [-1, -1]]) @ x, + states=['position', 'velocity'], inputs=0, name='damped oscillator') + + plt.figure() + axis_limits = [-1, 1, -1, 1] + T = 8 + ct.phase_plane_plot(sys, axis_limits, T) + if savefigs: + plt.savefig('phaseplot-dampedosc-default.png') + + def invpend_update(t, x, u, params): + m, l, b, g = params['m'], params['l'], params['b'], params['g'] + return [x[1], -b/m * x[1] + (g * l / m) * np.sin(x[0]) + u[0]/m] + invpend = ct.nlsys(invpend_update, states=2, inputs=1, name='invpend') + + plt.figure() + ct.phase_plane_plot( + invpend, [-2*pi, 2*pi, -2, 2], 5, + gridtype='meshgrid', gridspec=[5, 8], arrows=3, + plot_separatrices={'gridspec': [12, 9]}, + params={'m': 1, 'l': 1, 'b': 0.2, 'g': 1}) + plt.xlabel(r"$\theta$ [rad]") + plt.ylabel(r"$\dot\theta$ [rad/sec]") + + if savefigs: + plt.savefig('phaseplot-invpend-meshgrid.png') + + def oscillator_update(t, x, u, params): + return [x[1] + x[0] * (1 - x[0]**2 - x[1]**2), + -x[0] + x[1] * (1 - x[0]**2 - x[1]**2)] + oscillator = ct.nlsys( + oscillator_update, states=2, inputs=0, name='nonlinear oscillator') + + plt.figure() + ct.phase_plane_plot(oscillator, [-1.5, 1.5, -1.5, 1.5], 0.9) + pp.streamlines( + oscillator, np.array([[0, 0]]), 1.5, + gridtype='circlegrid', gridspec=[0.5, 6], dir='both') + pp.streamlines(oscillator, np.array([[1, 0]]), 2*pi, arrows=6, color='b') + plt.gca().set_aspect('equal') + + if savefigs: + plt.savefig('phaseplot-oscillator-helpers.png') + + +if __name__ == "__main__": + # + # Interactive mode: generate plots for manual viewing + # + # Running this script in python (or better ipython) will show a + # collection of figures that should all look OK on the screeen. + # + + # In interactive mode, turn on ipython interactive graphics + plt.ion() + + # Start by clearing existing figures + plt.close('all') + + test_basic_phase_plots(savefigs=True) diff --git a/doc/Makefile b/doc/Makefile index 71e493f23..dfd34f4f1 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -16,7 +16,8 @@ help: # Rules to create figures FIGS = classes.pdf timeplot-mimo_step-default.png \ - freqplot-siso_bode-default.png rlocus-siso_ctime-default.png + freqplot-siso_bode-default.png rlocus-siso_ctime-default.png \ + phaseplot-dampedosc-default.png classes.pdf: classes.fig fig2dev -Lpdf $< $@ @@ -29,6 +30,9 @@ freqplot-siso_bode-default.png: ../control/tests/freqplot_test.py rlocus-siso_ctime-default.png: ../control/tests/rlocus_test.py PYTHONPATH=.. python $< +phaseplot-dampedosc-default.png: ../control/tests/phaseplot_test.py + PYTHONPATH=.. python $< + # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). html pdf clean doctest: Makefile $(FIGS) diff --git a/doc/conf.py b/doc/conf.py index 6be6d5d84..7a45ba3f9 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -282,5 +282,6 @@ def linkcode_resolve(domain, info): import control as ct import control.optimal as obc import control.flatsys as fs +import control.phaseplot as pp ct.reset_defaults() """ diff --git a/doc/examples.rst b/doc/examples.rst index 41e2b42d6..21364157e 100644 --- a/doc/examples.rst +++ b/doc/examples.rst @@ -24,7 +24,7 @@ other sources. pvtol-nested pvtol-lqr rss-balred - phaseplots + phase_plane_plots robust_siso robust_mimo scherer_etal_ex7_H2_h2syn diff --git a/doc/phaseplots.rst b/doc/phase_plane_plots.rst similarity index 83% rename from doc/phaseplots.rst rename to doc/phase_plane_plots.rst index 44beed598..e0068c05f 100644 --- a/doc/phaseplots.rst +++ b/doc/phase_plane_plots.rst @@ -3,7 +3,7 @@ Phase plot examples Code .... -.. literalinclude:: phaseplots.py +.. literalinclude:: phase_plane_plots.py :language: python :linenos: diff --git a/doc/phaseplot-dampedosc-default.png b/doc/phaseplot-dampedosc-default.png new file mode 100644 index 0000000000000000000000000000000000000000..da4e24e35912702153e3dfda5ba20af5c9fe85e2 GIT binary patch literal 103085 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 z zz)NEhDA7DLoT$}{+cGq)IWuKu^S|2iD@U8}pLF5w4%vmqgP;7X%SARDgziB)1R^*h zp3YekQ!^$~+5v>^7fP|7AM;mNAqzwV&)8e;nS7=&8oVv(b7 z7<@n9uq3wvMBWIl2rB`BI^ke*ulsmwl`wV)Nu_Goapk>-j3+rTO(F3qjg9pUwS)6j z{o`g(Q6YZ}Y<42BG|}*3rl%aj*~KDIEI&jtWjPg9UN?IJu7Y{+^pe#LGPi>>4@iXF zoIE#ApOjRfdix)#3pB}D`=2=KJghSRclB2fkZ2xAs0o(B5CF%p*YiT8ioO8H+Y!Vq z1avk5hHq_jcsu&rTZGeMx+IYXiV4s^=to2^zYSC5QV{GMy>?=FMeF;H|c>G;)H%Q_O<{JAxuUXK3is{;G{gijyAdRNP2KqT#}}BBU*X zp-XU5BTyt0n5{wH`irOV2A8gpMazdcK6T#*8v1xC3LOy9hX z@rY4ZmV{8Nm(=UZQBrUJ@KHxL#6iJFZk!6zGc?e-#6Bq8Cn&@7@b(rJ{rBW;NI|w= z3!zw5>?iq%v9GZcqsY zkh-sKW}IaC>ayN;aP=RunZl>vHyCK>QHCg64_JLlfTzI-ysf_|?cwe27CWJHgn5JH zW{C&Z6;-Adv|MDnAh{Rv)gNg5(RMn%;3DfToH<+!;Q>HX=tHn7gcmV#x7+Abh~p!v z2oT$lE@x`8@VXsYlBC{vu#W!PR^*>?ikp;2N4dwh?(AZ~{K8v{G^5ZKA}E)?JXL-m zLy5SvPcU&IB=l&*62$sA^lZ9>x1W;fofDxJYX@K|Iw9m*KZfOa1QbEGGM_C4b8IND zU=iyCgE#25eEfxg+tP4%%2Trg`9Sut7?>qOz-WnN6*$IP`&>_17S@M^7D#zS;a1=^rM+7z=I!ewAeQQ<^_4sHz{ z4gFDITH~;zrLlF@A3Q+*ZxsM}&eZul1~cP3NaTcRdVtP-=tf6bd&bE9>SU?6h;0^o z%lJ*0xzDi#h*oshe%pJ5%22R33OP*z`p~b%cNc<9L4#8u6M#j6@$Yx2LFCCd-5ox~ zmXU+8Y74^1nAz~0c7nY`DN5{5T|Az}V}J8(bpi*sz`0{?9DE8SvI2TN2ylQzs$(-F zS#Lgz{VDc(2peuP_S9Jhs`Zr$x-D9jIvdF7!Q=dNG`axTwanXJ*QH2+6b@6#>Ps?* zyu~9cZK>5^zlVpzF89z5{r)=?d^yKUyhme?Bi(M2VgicptKzp|AyFgq&#nm~+I|ri^4kW3}E->A@W?VG80@!0!MUV$N>V z@liifGQ)w)9QZBVu06)`S#oPV4tr(#LYz!MPzTQ9HQoEK9J%WE9!r6HZgHK4F)_i}BypD%~k{@?1fl+|6m7)hJS%3*8C&Jo>uojhZgq zaS;+!kXqIOEDz;O*p`cdvD1Cb!|ZJ9W~&k9$Af?CV}F1)A95wqC21%kP0eqGZVvlh zd%>%&v{;e45wNcT)BhvtzWUvR5GGNmlzRv*>clv;9HLH9BEXR_B!&-pL40B9<{GYuy^6af zuSrYbM#t^H+%Zk?Yq*k~`P$21gEy^DA$hpa9j_&IsrT95`nOWMib2n^pO6k;6@Q>L zStsSMe|6xIt(DaOVlr2@_WA??>t+yseRZohlMFH-{6JL-Y9fRvtUf;%R>FD+$T(b@ z7FV5yu~&OL0Rsj6+*N9(iD!ll2Sd)Y6|~;~oEf zq?2&)@cv zM+mBzk3Un@(=`I?2@4U3<6?<*O^u{31@F`)we$!}0-O3j?aiOwi&2Z^BCadnzzxI3 zF(}!~XLg*=7tsQN6jzyx8Xs7PtW&}grS`wH;0^!&RjUNBdT=_bK7AShW$}XvxW(yk zfYW^qJND~0{)4p6M^K3J^ zdh4%MC&Ua{IuHt5wUrM(0U_h@f@ao};E$n^gu5rF+i!|0M%80EI$Y_8NR;nO&6c{y zIJjV2Q^UmF$VAfjc$0}4``=ski>_P_d)LthF@zw%fZqu%u7<-?Lj`zL{-1m{ac{); zeBQ3*JEMLTjL#FmNP%|VW_5Cm- zlU>419!Niy`HmyAvlw@Sm-Sny$CVzOja*RWx*b5y(?oXgVj&KoQXpZs^`vnE^+N!e z4X-SenVle-!kxAdwtgAv~ zj{L*dz#|A4khKmF%89OmxD5zjeKN4~lo@3CV9D+T|2aw(_|OjCKl!-IfS)$=;V4ml zSeSBqEhkU$ak-KJbT_g6BmQu_tH#uxj=CDgD1L>52-X23w@Qwhg_5`*e|Zy{pm-+M zs|PIm5h_so0M7(J?@?V67KG%I=A$L2+Wg<925ns|aEW*-JJ)SX=KzD4$0`pTeGt

Yal4OLDzV?eC8)+-!B$v-lR{9GDF@cB>_}QTjZ*4q z97#b??!eLw-!TPfFOo&~K@!X;QM=BB6o?RM!`}%6nmGJO6Owb4d92MC(rZI0=DeQ3 zPoy54c&_>j=k|Z!l?*h4hztnECB)s*rXVB|A3;68wWN9fd=4#20tcD_NNv$3H%Y?- z&GGTf^uLfl5jI&Lz(z2Lk&jOc{#UMBDIje1?u_W?@Y(bBM^fwSND&|*C)hzK zH9)OFiHt;f<#+oMR@o&#H zSfxp?Wn`t-0+rzRD(yv^^pExoH$)``vO^{vG3DOPDHE45bsmXwKS;Sk)B~@+JXKA& zyW4T~UhL3_ifYgwK{)dQU_5m!w0I8AM2C z90bE(-*=q#KXw=9FB4sa@wmu}zq8$7eb@+oE+VgVv?6DDs|DW^dAgwHr$NuOoZ+H6 zNer}W*lVjsbtif2tOqW1b2zcW~eIY_7MMs zmGiAooEx{A(43xwD}?9sFT}vQ^mok*(euL3X@zCNsB{`K4^se~XFJ0!MDh5hw%yf# zydc0cb6+;yZ@?vIZM^c|nai3}wB=W53>3}`|92pDicu$oquX_MKn!1i+j(?nA>G}k z1W!XLSR8Ke%StLgpO`Y2E$+AD+jB3peh;*2_wt#004t3Mq}GjpiTBWt+^b~g)D`|G zD;*!EyG>M{MyWKM$AP_6^Ac9&4XBXv)ek=83njc(KqN$#lHdL}w@SA`B(JmUiU|D4 zqh|)-QTpIpOj`{)%8#2N;R@v0KrfKqU!O?j8bxCVnykQhz!}8&kW38NlIk<&cR!ka zgx@B+3Pw=s4Say;`yN0|YBDBKLX@+3Z_T#@PY-c+tk-oN%2PF01c+^@LMP>2%6AW< zv%nDXIX#;ZQdmKVJG-gJxGegAePb3htM@gWKEUan1F=_#F~$eF8`4t1yRtR#i5l5Z zfiS{Cb@Yy`>nozXl6J-@#E$&W+#L0II^nhu2vhhD^N&A+s0+0IAnJl7OvvzE?fL&2 zyAo)q_r6c*W=R`mD=n5RktNC=MYbdr+1;{aC(AIllD1n@QX)h$lq5^W*hNKd$-Wzs zCF>}qu_W(j?!C`*p7WmPocDE3C(F$I|Nr0b_uW6=&$qZML9rxj7jUbi^eKn+vb$nL zeN{?N#CeTC%ZZ&kNea|c_~KWXf#=qyD;E%`>G%$ukUIQ*QU5+zGP=WtdJ*AQvsP^a zfbj!zN`kNB{M>hn!Abe0xUdo=bI#r60T}BxXge&{jF5HRU}y9z93H9Y5Fi3 zBy3O~%#*(Dvx3C)GTCSFhZI1Hk(Zk6KU1I>KP`mzbdW9~Dz>Tn7n%Fh*(E)YkgB$# zC&YF7`KBw{UWIHW-38t1DgRas-(dmX9<<-83y5V+Jn|(Uf&HVXKHq#-aj@qMc_^+0 zw6ok?i=QSuvZuW$oPS8&Eo0Q`DhnT7^%A@ZKyD2H_(`N&zQcq7pE<*|7zM#JUQYYS zo*X_DXAg^Pevi-2L1I#320I@g`Y`N~&0m&e`zNL>g2%u#=(uLJ`&-A4Q)hLf6G>h| z#pR_;rf->w6?gu%fMZuEhhu{LdV&!j|NMDKi#WF*HNfnf?;jaDhYA_!cnP52@|k^S z+yRT*&&iql&xyrZP+v#Kf@*^Er({O5BwpU0B<@}C*Ef7!MZO}NHf>rXqN18Jv&hA+zu zCvBXUNf~tV)>fk_=bQ7Ebf0nnt{n7f3SC}e1Z+Id zoSDd^`*3f6mI?xjvZWtAKS6weWcTmxSrk+C`Jp=={S^?}<5x@(%X?{F`AFn|r zX+E^y>8=|G8ZAMJw^DIo?y69lo+wT>B$KJq09vOZh4LSy5HjLtw0|$wDJ3NZ(5!+~ zN)PeH`>X9XCgoD(-n3UATI}g1k9+gbeDRT!ULMB-`f7ASdeQb>^{nUglGkr5z6j#+ ze*gOE4T1N3jOf7d@EeQ{4<3%S0GV$CjrM@iACXeKEh6dBqn$Rkww6?{tzg<%wOvDF zD~L1#r@G&~y)81)x=a4T_l6q4^$W#*!|e(2U2dxFH$d_=miMH@{nGLME@oVSqYQun zx6yXaSy=_77)-2>$z$FXjY!#pQ}0c`F5B2%Ww7)zy+^bvDj7C$yG{SuX?hfCV{ds) z|9xg~@(e#v&N^mG7{8TFduVek?U!$uoYK9Me3wT$EN+lrMdul@1IqYwtYWN@(dR&7<)1&Vt|zIVSSSVQ!%cQ?F=Ax65z{8UpG`i9tCdkuh4bmSUo!x5y5%F%f z-t$*-;AqaRol@!R-Ti@>vw0sBXKpyyT{=T2N1GpSKa$=K$vtM3*}NosJ4+%~8YzB>Orni>@KjPv zvtdA+idZ`5CZ}^s-03H7I68niLCnykd>^U0T4!>~`tt(qlb5c7q9UsgAt!lr6?SrH z$kA3vQSpV_r)jH1_l6u2Dm!gbYs13A#(O-qS4MNP{j}&WUvD#5!I-73tWvrc%4YPP z#=**BaejL9cqw0``_S+(2W#iu-L@s)@0l06C++u*#6Wr4w~*e@$I=GPTc^XPTSq7z zc4z8hChXHLUAlz+e)RA+KNUCi^_B1I>mz4m6iT%e^Hcc=?gwsI-zZh`@m$?dmpMx} z8`Wiz#ejO(mJC`UDJ7*}qrC9SmDLX^Gr>gS_)QlVmx*VQ!otE5yqx%YYRUTI#f!22 z%4He*p5ERqe%}&$uA_FHJ$})TTTM+(o^Bq+PngiTQ5w)>RqN^Kc&e%H$Td5*hu5!j z$;!%-X1ag<`V|xu^aZm}$3j^)ajsguPIzdEK?yO_2>J0Eb80JpEnH{vJ4D~UU4>%Z z+{cUS1k>$TTsW|OJv-aw$f`w_3^F-7CFQ80A*UN90aZ$t#^<(b9v%g;t5y9+U*pS1jxK_zoXyn$2B|vk$)y8na~L zxTNjQQLW{l$KzJ6cbK0Uj*pL*bNZ7Pzl4fvRaw3LEHw&bIQ3T4OV$dfdr$Xfv&wtP z)7#HusRS9My@`9}{&~R2%c-+OElyk?&s$&?#lp+Hmjm0+IUk8vg`8$v^iP zyMyhcXVB*dgwg&=Ej-=+{rg+TR8VF0A2TZ}E6Xh?aC{rRBS|Zw!b+&v=7VB``bBI+ zdwcs0p?x>AEOL~q+3BRn$Q8h&kbpbDM!rwhSiGqe@1$Uvt+g$DF7=ocPMMCrK07`$C^%T&<-->6VP#Pi3nt1>zv2A3 zw3L^d`w$afw_tAyr`8Fp>o+88;CI`%Z$FQ@uqAql^@;mhz`TXZ^jK>qPvz1N>oWn% z$;FAj-d*{ZfXmosVPP>jIXT*qvn}MuWM;c_eS#7tyj@yaS|~(<@P>9{5refUHzk#o z3$04;1(v%n{=#4}e|oQFM}~^cbi}XuD;OL5X?XaOvG^Gfco9NPjOIf-xD0%Zel1N$ z7^Q^HTq|&_+gR7vS7Fi+JYCKZwYIi)1;v^fa`$^d@m1H-a$HJQww=N(zmk+S|)JYN25S?Gi?QUzj5#Jb8bMtMH!(>_868$qZH_(l)prG({ z>6sP95cg&l8d~)Nak)El!>4?0l7}$WWl;z#FFNk)A4NVE5cSt-5DrckjM? zdEGWyCiRk;hsQJj@1w^uG3nY2%ZOzrPn5g1h}X5Yo>=(Nv4~wXU?1%qY?UJW$nr&$}!nI z=GwJuyaEDUCtj6^5Y*_OlS531Fw5ys+(sZGim?lsQes{ZZ9UBt%W@*c(Z$7LP|;hz zcdCdn-M@#`49E_OJZ(Ge>e+9m**^;$u4*oEc3hR?07*|II4DRT`;kmP<>Zv^=7$uAJ_?s*9_U zI%L=!44`Niclb6uP_q!!3jZn7K)p8+_H)jc<4Iv7fAcK8gz`d-v`& zAt8&Zj6L85gr}JAP!%coxjo1J76cwYkG$ctC*!MX!EW2QA{}s?k0T>`fNxnA`RwTG z>MHTe9w1&U%q=k%&l&*ctHV0g)Mvak)2)NW;q}!G)GdQeX@}hlwyB&G1wQ6b=83*S z(heJoBC2oy4ZXBfGMR1HuE%b*Mn*F3H zJ@^+H(>a09m29TrRV=hZXvM`Gw&tX_@87e%q|wT|eF+3Y z%$+*{o^X48{QaLbjdXvTHE?zo_ww>mx>;IW+*Tan-tqiRd;2}mUY%6a^cyio12u3` zU%TCNHf-HmkEz^k+rx6!F;wZRg@evt*%r=kZ*RYmhbMTDw66$eVSm6l@5snV_9vo+ zx%td^R*nKh*6qy@_b~DE$jBq}EcYdwKDQg-S)>$NWS$rr83AES@H^$pKDGmWHDQWi zB$9V>aw|8IXqoX4sD?8G1R7(s)!$(KYMn*;o`mbSBm*41VX}J?CZPEO~ zZ1;NX~j_}mGg7uq3wwYAyb23{j@Ccm#kd=6+%gjg2=mFFc}ya zz%?#5Xe}o-Xf8e*P_;WsckZpKs$yHcdP0~1az*G6&4p2s2P|bh9j$zf?pmfl43-m)EwUapcU(+iE`Y#$%#UZ?Y48~yy5a5QIXV1V`Pv@A|jKrMWc0K&%q@J=q} z|LvV^U^viBcY!jl0uh<$|o+oCK%PA=h1NlS}XHRhJ?fCNj z`|FO5IFJyolvyN7#~NlB-`4@t9mFKdc`1vOQPf8n`1C0ex3cz#xI% z>g(Vwt#M)M&;+2eS?1ZNe@u48-@i{Q%ucoaM--wm2x=bTy`Jme!VKo9iO0Qj=Uy>C z_BaJuuxb$BB*&8fJIYCS%359%>;jPCJ+fdnJ^(k7Fnzo*%bf?~Zior9E zuF#exwKB6rqvqM|aEap8Dz5CXn-)sFsl6RX+SWdbrHs3-uC95k<#9T-k7$&imv`GF zMN{U1W|)b>aIMCF6o?PhoZeVcJeo zO3JVVlDtM%MjxgnJ?-!=hFeYleHceXGj3Lx#r2cYnaH%}#V2b!*8ua=ijF zVJ5iGE2*{6(|YXveZ@AjgKvk=8N{raCfXa_`ntsEH{z4EiQc@&Znvei^~9sC_F=Op zU9rC~-K7CBo2=!9r@tG^%&%HDm?+*>y0FqGgpiOqsPw!On+ZAU4Ye2A*KvKf26leyk;u@BS3D<-b5KTrLg z-dnuUbkJq_*HVe{`2sLj(ayjam(PzR#$35_#nH=4mK)f)8rze)x|a&hHtob78srxg z+^xAGAd*fd?`?WQH@34&-V0S+*WPZPPocyDLTM?YQC&ZHPt;&xB+*;c$mpGwUpZc_ zfAKf&n53j6Q80Z<%E_4$e{{LH54~^M1>a+4=A0{xPfS);mLp(c^K*0hQ0&>hGS=O* zCdS6kX8n8zU0$uvVZalYoL^Wl1Q6K_QvK9&Cl)}OTUfowY7wSRpH@nUg8>oM(yFxb z_6VOJ=9AoyOq-HYEZkDlBXazl1VuVzrh{mUH)grN2>N=uuD13t!nivKzSB2|=;^}< zyH;;#Bb5p;AdY)h{q~z71Ry3YEp4yEOBPqWPs#2Dd}4!Uy4fi!D?=QyXS1^juVyQp ztIFESJnNv#w%;L3H5~psmRX^lbzq3~|Mc%4{uTJF(3U>Pe&FvnMw(w2N&0Lu_v9RI=%BlTN{OgD1y%* zUF=-3nVqfvCPJcI9D>ag`umJ?-T5X5~8dm&5Pk z0ve8*m^e>%<}rWm>3IaJ)nk`h(}O+Sx_kR={~PTt6m%D?76Z##YZbP(L$ zyu7^3ufj`3w;ACeNjutbp5FDsvE**2k4;Ndc^EE1UA8gHG@jDx~Y%w-AUc+R+MZD(G zQ%HhVSYS-AdkNe(0L9Mm6x4ryc?Abf4w@BujfI_^{mHBb4s|Y-icg>gS_e({l_zP0 z+YO0RNKhyK$r* zT5bdY-B`RugN|q`Zjb#4+-WFoW^$3Hf>Z#KFvS4Wv%sS7_O4t~hLJCWTEJBc?ZTLU zL8<{T_C~nBVD0sv=IHhubpN#OCA=P38e%yWr>U2Vc}^qEfv;Arnj1~K6%!r(aH4H}1$LqG`RGEjYKi)Ls% zygKMp-9%+i=ILaC;zkUu0pES&rcH0qY2YQ<3W&9YjLb09yg0Z-L1ZcDiAc@_2I{_w zpE!K5En4A8Dt;q!L0=qTKii%xuZDmZ@%*5rpJzH!!QRej6Dt>x$nYkx?nj~ zPEna`=f!27ZT<}*Vhf%hc3RiRM^4)O*^}8Y9HIuEqv}RbL^DSGq3hX_*{?(OryAX`0gfC=%{l$uPFkN>@Z2g4;jg$Nej_kCO z0G{+tD9}*M){T2UPMKRS_fx`bIxAEU}U(NDLEy7Fro(tu_ Qv*61>*W}Q19f!#O0TD!oDF6Tf literal 0 HcmV?d00001 diff --git a/doc/phaseplot-invpend-meshgrid.png b/doc/phaseplot-invpend-meshgrid.png new file mode 100644 index 0000000000000000000000000000000000000000..040b4555850fa56ac975a0d006ddc8aa9398158e GIT binary patch literal 161158 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

kUK|Sv{u;jBs;rT7ms55H$sxHVZ&4UVq#@u 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

|1r571WYsFDsAsmZIq|Y)C{56&FI$2_H-uTSUP8 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 CyWG$K literal 0 HcmV?d00001 diff --git a/doc/phaseplot-oscillator-helpers.png b/doc/phaseplot-oscillator-helpers.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5ebf43fefcde3fd62e85bffb157b20178865c6 GIT binary patch literal 76927 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 AEM~tA?5e`~X;j#Pkpn7iFDG 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 I*z-633GK?mO#lD@ literal 0 HcmV?d00001 diff --git a/doc/plotting.rst b/doc/plotting.rst index 2f6857c35..98ebd6772 100644 --- a/doc/plotting.rst +++ b/doc/plotting.rst @@ -11,6 +11,7 @@ for example:: bode_plot(sys) nyquist_plot([sys1, sys2]) + phase_plane_plot(sys, limits) pole_zero_plot(sys) root_locus_plot(sys) @@ -21,9 +22,9 @@ returns and object representing the output data. A separate plotting function, typically ending in `_plot` is then used to plot the data, resulting in the following standard pattern:: - response = nyquist_response([sys1, sys2]) - count = response.count # number of encirclements of -1 - lines = nyquist_plot(response) # Nyquist plot + response = ct.nyquist_response([sys1, sys2]) + count = ct.response.count # number of encirclements of -1 + lines = ct.nyquist_plot(response) # Nyquist plot The returned value `lines` provides access to the individual lines in the generated plot, allowing various aspects of the plot to be modified to suit @@ -35,6 +36,7 @@ analysis object, allowing the following type of calls:: step_response(sys).plot() frequency_response(sys).plot() nyquist_response(sys).plot() + pp.streamlines(sys, limits).plot() root_locus_map(sys).plot() The remainder of this chapter provides additional documentation on how @@ -58,7 +60,7 @@ response for a two-input, two-output can be plotted using the commands:: sys_mimo = ct.tf2ss( [[[1], [0.1]], [[0.2], [1]]], [[[1, 0.6, 1], [1, 1, 1]], [[1, 0.4, 1], [1, 2, 1]]], name="sys_mimo") - response = step_response(sys) + response = ct.step_response(sys) response.plot() which produces the following plot: @@ -274,6 +276,100 @@ for each system is plotted in different colors:: .. image:: rlocus-siso_multiple-nogrid.png +Phase plane plots +================= +Insight into nonlinear systems can often be obtained by looking at phase +plane diagrams. The :func:`~control.phase_plane_plot` function allows the +creation of a 2-dimensional phase plane diagram for a system. This +functionality is supported by a set of mapping functions that are part of +the `phaseplot` module. + +The default method for generating a phase plane plot is to provide a +2D dynamical system along with a range of coordinates and time limit:: + + sys = ct.nlsys( + lambda t, x, u, params: np.array([[0, 1], [-1, -1]]) @ x, + states=['position', 'velocity'], inputs=0, name='damped oscillator') + axis_limits = [-1, 1, -1, 1] + T = 8 + ct.phase_plane_plot(sys, axis_limits, T) + +.. image:: phaseplot-dampedosc-default.png + +By default, the plot includes streamlines generated from starting +points on limits of the plot, with arrows showing the flow of the +system, as well as any equilibrium points for the system. A variety +of options are available to modify the information that is plotted, +including plotting a grid of vectors instead of streamlines and +turning on and off various features of the plot. + +To illustrate some of these possibilities, consider a phase plane plot for +an inverted pendulum system, which is created using a mesh grid:: + + def invpend_update(t, x, u, params): + m, l, b, g = params['m'], params['l'], params['b'], params['g'] + return [x[1], -b/m * x[1] + (g * l / m) * np.sin(x[0]) + u[0]/m] + invpend = ct.nlsys(invpend_update, states=2, inputs=1, name='invpend') + + ct.phase_plane_plot( + invpend, [-2*pi, 2*pi, -2, 2], 5, + gridtype='meshgrid', gridspec=[5, 8], arrows=3, + plot_equilpoints={'gridspec': [12, 9]}, + params={'m': 1, 'l': 1, 'b': 0.2, 'g': 1}) + plt.xlabel(r"$\theta$ [rad]") + plt.ylabel(r"$\dot\theta$ [rad/sec]") + +.. image:: phaseplot-invpend-meshgrid.png + +This figure shows several features of more complex phase plane plots: +multiple equilibrium points are shown, with saddle points showing +separatrices, and streamlines generated along a 5x8 mesh of initial +conditions. At each mesh point, a streamline is created that goes 5 time +units forward and backward in time. A separate grid specification is used +to find equilibrium points and separatrices (since the course grid spacing +of 5x8 does not find all possible equilibrium points). Together, the +multiple features in the phase plane plot give a good global picture of the +topological strucrure of solutions of the dynamical system. + +Phase plots can be buit up by hand using a variety of helper functions that +are part of the :mod:`~control.phaseplot` (pp) module:: + + import control.phaseplot as pp + + def oscillator_update(t, x, u, params): + return [x[1] + x[0] * (1 - x[0]**2 - x[1]**2), + -x[0] + x[1] * (1 - x[0]**2 - x[1]**2)] + oscillator = ct.nlsys( + oscillator_update, states=2, inputs=0, name='nonlinear oscillator') + + ct.phase_plane_plot(oscillator, [-1.5, 1.5, -1.5, 1.5], 0.9) + pp.streamlines( + oscillator, np.array([[0, 0]]), 1.5, + gridtype='circlegrid', gridspec=[0.5, 6], dir='both') + pp.streamlines( + oscillator, np.array([[1, 0]]), 2*pi, arrows=6, color='b') + plt.gca().set_aspect('equal') + +.. image:: phaseplot-oscillator-helpers.png + +The following helper functions are available: + +.. autosummary:: + ~control.phaseplot.equilpoints + ~control.phaseplot.separatrices + ~control.phaseplot.streamlines + ~control.phaseplot.vectorfield + +The :func:`~control.phase_plane_plot` function calls these helper functions +based on the options it is passed. + +Note that unlike other plotting function, phase plane plots do not involve +computing a response and then plotting the result via a `plot()` method. +Instead, the plot is generated directly be a call to the +:func:`~control.phase_plane_plot` function (or one of the +:mod:`~control.phaseplot` helper functions. + + Response and plotting functions =============================== @@ -310,6 +406,11 @@ Plotting functions ~control.bode_plot ~control.describing_function_plot ~control.nichols_plot + ~control.phase_plane_plot + ~control.phaseplot.equilpoints + ~control.phaseplot.separatrices + ~control.phaseplot.streamlines + ~control.phaseplot.vectorfield ~control.pole_zero_plot ~control.root_locus_plot ~control.singular_values_plot diff --git a/examples/phase_plane_plots.py b/examples/phase_plane_plots.py new file mode 100644 index 000000000..705575933 --- /dev/null +++ b/examples/phase_plane_plots.py @@ -0,0 +1,215 @@ +# phase_portraits.py - phase portrait examples +# RMM, 25 Mar 2024 +# +# This file contains a number of examples of phase plane plots generated +# using the phaseplot module. Most of these figures lines up with examples +# in FBS2e, with different display options shown as different subplots. + +import time +import warnings +from math import pi, sqrt + +import matplotlib.pyplot as plt +import numpy as np + +import control as ct +import control.phaseplot as pp + +# +# Example 1: Dampled oscillator systems +# + +# Oscillator parameters +damposc_params = {'m': 1, 'b': 1, 'k': 1} + +# System model (as ODE) +def damposc_update(t, x, u, params): + m, b, k = params['m'], params['b'], params['k'] + return np.array([x[1], -k/m * x[0] - b/m * x[1]]) +damposc = ct.nlsys(damposc_update, states=2, inputs=0, params=damposc_params) + +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) +fig.set_tight_layout(True) +plt.suptitle("FBS Figure 5.3: damped oscillator") + +ct.phase_plane_plot(damposc, [-1, 1, -1, 1], 8, ax=ax1) +ax1.set_title("boxgrid [-1, 1, -1, 1], 8") + +ct.phase_plane_plot(damposc, [-1, 1, -1, 1], ax=ax2, gridtype='meshgrid') +ax2.set_title("meshgrid [-1, 1, -1, 1]") + +ct.phase_plane_plot( + damposc, [-1, 1, -1, 1], 4, ax=ax3, gridtype='circlegrid', dir='both') +ax3.set_title("circlegrid [0, 0, 1], 4, both") + +ct.phase_plane_plot( + damposc, [-1, 1, -1, 1], ax=ax4, gridtype='circlegrid', + dir='reverse', gridspec=[0.1, 12], timedata=5) +ax4.set_title("circlegrid [0, 0, 0.1], reverse") + +# +# Example 2: Inverted pendulum +# + +def invpend_update(t, x, u, params): + m, l, b, g = params['m'], params['l'], params['b'], params['g'] + return [x[1], -b/m * x[1] + (g * l / m) * np.sin(x[0])] +invpend = ct.nlsys( + invpend_update, states=2, inputs=0, + params={'m': 1, 'l': 1, 'b': 0.2, 'g': 1}) + +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) +fig.set_tight_layout(True) +plt.suptitle("FBS Figure 5.4: inverted pendulum") + +ct.phase_plane_plot( + invpend, [-2*pi, 2*pi, -2, 2], 5, ax=ax1) +ax1.set_title("default, 5") + +ct.phase_plane_plot( + invpend, [-2*pi, 2*pi, -2, 2], gridtype='meshgrid', ax=ax2) +ax2.set_title("meshgrid") + +ct.phase_plane_plot( + invpend, [-2*pi, 2*pi, -2, 2], 1, gridtype='meshgrid', + gridspec=[12, 9], ax=ax3, arrows=1) +ax3.set_title("denser grid") + +ct.phase_plane_plot( + invpend, [-2*pi, 2*pi, -2, 2], 4, gridspec=[6, 6], + plot_separatrices={'timedata': 20, 'arrows': 4}, ax=ax4) +ax4.set_title("custom") + +# +# Example 3: Limit cycle (nonlinear oscillator) +# + +def oscillator_update(t, x, u, params): + return [ + x[1] + x[0] * (1 - x[0]**2 - x[1]**2), + -x[0] + x[1] * (1 - x[0]**2 - x[1]**2) + ] +oscillator = ct.nlsys(oscillator_update, states=2, inputs=0) + +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) +fig.set_tight_layout(True) +plt.suptitle("FBS Figure 5.5: Nonlinear oscillator") + +ct.phase_plane_plot(oscillator, [-1.5, 1.5, -1.5, 1.5], 3, ax=ax1) +ax1.set_title("default, 3") +ax1.set_aspect('equal') + +try: + ct.phase_plane_plot( + oscillator, [-1.5, 1.5, -1.5, 1.5], 1, gridtype='meshgrid', + dir='forward', ax=ax2) +except RuntimeError as inst: + axs[0,1].text(0, 0, "Runtime Error") + warnings.warn(inst.__str__()) +ax2.set_title("meshgrid, forward, 0.5") +ax2.set_aspect('equal') + +ct.phase_plane_plot(oscillator, [-1.5, 1.5, -1.5, 1.5], ax=ax3) +pp.streamlines( + oscillator, [-0.5, 0.5, -0.5, 0.5], dir='both', ax=ax3) +ax3.set_title("outer + inner") +ax3.set_aspect('equal') + +ct.phase_plane_plot( + oscillator, [-1.5, 1.5, -1.5, 1.5], 0.9, ax=ax4) +pp.streamlines( + oscillator, np.array([[0, 0]]), 1.5, + gridtype='circlegrid', gridspec=[0.5, 6], dir='both', ax=ax4) +pp.streamlines( + oscillator, np.array([[1, 0]]), 2*pi, arrows=6, ax=ax4, color='b') +ax4.set_title("custom") +ax4.set_aspect('equal') + +# +# Example 4: Simple saddle +# + +def saddle_update(t, x, u, params): + return [x[0] - 3*x[1], -3*x[0] + x[1]] +saddle = ct.nlsys(saddle_update, states=2, inputs=0) + +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) +fig.set_tight_layout(True) +plt.suptitle("FBS Figure 5.9: Saddle") + +ct.phase_plane_plot(saddle, [-1, 1, -1, 1], ax=ax1) +ax1.set_title("default") + +ct.phase_plane_plot( + saddle, [-1, 1, -1, 1], 0.5, gridtype='meshgrid', ax=ax2) +ax2.set_title("meshgrid") + +ct.phase_plane_plot( + saddle, [-1, 1, -1, 1], gridspec=[16, 12], ax=ax3, + plot_vectorfield=True, plot_streamlines=False, plot_separatrices=False) +ax3.set_title("vectorfield") + +ct.phase_plane_plot( + saddle, [-1, 1, -1, 1], 0.3, + gridtype='meshgrid', gridspec=[5, 7], ax=ax4) +ax3.set_title("custom") + +# +# Example 5: Internet congestion control +# + +def _congctrl_update(t, x, u, params): + # Number of sources per state of the simulation + M = x.size - 1 # general case + assert M == 1 # make sure nothing funny happens here + + # Remaining parameters + N = params.get('N', M) # number of sources + rho = params.get('rho', 2e-4) # RED parameter = pbar / (bupper-blower) + c = params.get('c', 10) # link capacity (Mp/ms) + + # Compute the derivative (last state = bdot) + return np.append( + c / x[M] - (rho * c) * (1 + (x[:-1]**2) / 2), + N/M * np.sum(x[:-1]) * c / x[M] - c) +congctrl = ct.nlsys( + _congctrl_update, states=2, inputs=0, + params={'N': 60, 'rho': 2e-4, 'c': 10}) + +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) +fig.set_tight_layout(True) +plt.suptitle("FBS Figure 5.10: Congestion control") + +try: + ct.phase_plane_plot( + congctrl, [0, 10, 100, 500], 120, ax=ax1) +except RuntimeError as inst: + ax1.text(5, 250, "Runtime Error") + warnings.warn(inst.__str__()) +ax1.set_title("default, T=120") + +try: + ct.phase_plane_plot( + congctrl, [0, 10, 100, 500], 120, + params={'rho': 4e-4, 'c': 20}, ax=ax2) +except RuntimeError as inst: + ax2.text(5, 250, "Runtime Error") + warnings.warn(inst.__str__()) +ax2.set_title("updated param") + +ct.phase_plane_plot( + congctrl, [0, 10, 100, 500], ax=ax3, + plot_vectorfield=True, plot_streamlines=False) +ax3.set_title("vector field") + +ct.phase_plane_plot( + congctrl, [2, 6, 200, 300], 100, + params={'rho': 4e-4, 'c': 20}, + ax=ax4, plot_vectorfield={'gridspec': [12, 9]}) +ax4.set_title("vector field + streamlines") + +# +# End of examples +# + +plt.show(block=False) diff --git a/examples/phaseplots.py b/examples/phaseplots.py deleted file mode 100644 index cf05c384a..000000000 --- a/examples/phaseplots.py +++ /dev/null @@ -1,166 +0,0 @@ -# phaseplots.py - examples of phase portraits -# RMM, 24 July 2011 -# -# This file contains examples of phase portraits pulled from "Feedback -# Systems" by Astrom and Murray (Princeton University Press, 2008). - -import os - -import numpy as np -import matplotlib.pyplot as plt -from control.phaseplot import phase_plot -from numpy import pi - -# Clear out any figures that are present -plt.close('all') - -# -# Inverted pendulum -# - -# Define the ODEs for a damped (inverted) pendulum -def invpend_ode(x, t, m=1., l=1., b=0.2, g=1): - return x[1], -b/m*x[1] + (g*l/m)*np.sin(x[0]) - - -# Set up the figure the way we want it to look -plt.figure() -plt.clf() -plt.axis([-2*pi, 2*pi, -2.1, 2.1]) -plt.title('Inverted pendulum') - -# Outer trajectories -phase_plot( - invpend_ode, - X0=[[-2*pi, 1.6], [-2*pi, 0.5], [-1.8, 2.1], - [-1, 2.1], [4.2, 2.1], [5, 2.1], - [2*pi, -1.6], [2*pi, -0.5], [1.8, -2.1], - [1, -2.1], [-4.2, -2.1], [-5, -2.1]], - T=np.linspace(0, 40, 200), - logtime=(3, 0.7) -) - -# Separatrices -phase_plot(invpend_ode, X0=[[-2.3056, 2.1], [2.3056, -2.1]], T=6, lingrid=0) - -# -# Systems of ODEs: damped oscillator example (simulation + phase portrait) -# - -def oscillator_ode(x, t, m=1., b=1, k=1): - return x[1], -k/m*x[0] - b/m*x[1] - - -# Generate a vector plot for the damped oscillator -plt.figure() -plt.clf() -phase_plot(oscillator_ode, [-1, 1, 10], [-1, 1, 10], 0.15) -#plt.plot([0], [0], '.') -# a=gca; set(a,'FontSize',20); set(a,'DataAspectRatio',[1,1,1]) -plt.xlabel('$x_1$') -plt.ylabel('$x_2$') -plt.title('Damped oscillator, vector field') - -# Generate a phase plot for the damped oscillator -plt.figure() -plt.clf() -plt.axis([-1, 1, -1, 1]) # set(gca, 'DataAspectRatio', [1, 1, 1]); -phase_plot( - oscillator_ode, - X0=[ - [-1, 1], [-0.3, 1], [0, 1], [0.25, 1], [0.5, 1], [0.75, 1], [1, 1], - [1, -1], [0.3, -1], [0, -1], [-0.25, -1], [-0.5, -1], [-0.75, -1], [-1, -1] - ], - T=np.linspace(0, 8, 80), - timepts=[0.25, 0.8, 2, 3] -) -plt.plot([0], [0], 'k.') # 'MarkerSize', AM_data_markersize*3) -# set(gca, 'DataAspectRatio', [1,1,1]) -plt.xlabel('$x_1$') -plt.ylabel('$x_2$') -plt.title('Damped oscillator, vector field and stream lines') - -# -# Stability definitions -# -# This set of plots illustrates the various types of equilibrium points. -# - - -def saddle_ode(x, t): - """Saddle point vector field""" - return x[0] - 3*x[1], -3*x[0] + x[1] - - -# Asy stable -m = 1 -b = 1 -k = 1 # default values -plt.figure() -plt.clf() -plt.axis([-1, 1, -1, 1]) # set(gca, 'DataAspectRatio', [1 1 1]); -phase_plot( - oscillator_ode, - X0=[ - [-1, 1], [-0.3, 1], [0, 1], [0.25, 1], [0.5, 1], [0.7, 1], [1, 1], [1.3, 1], - [1, -1], [0.3, -1], [0, -1], [-0.25, -1], [-0.5, -1], [-0.7, -1], [-1, -1], - [-1.3, -1] - ], - T=np.linspace(0, 10, 100), - timepts=[0.3, 1, 2, 3], - parms=(m, b, k) -) -plt.plot([0], [0], 'k.') # 'MarkerSize', AM_data_markersize*3) -# plt.set(gca,'FontSize', 16) -plt.xlabel('$x_1$') -plt.ylabel('$x_2$') -plt.title('Asymptotically stable point') - -# Saddle -plt.figure() -plt.clf() -plt.axis([-1, 1, -1, 1]) # set(gca, 'DataAspectRatio', [1 1 1]) -phase_plot( - saddle_ode, - scale=2, - timepts=[0.2, 0.5, 0.8], - X0=[ - [-1, -1], [1, 1], - [-1, -0.95], [-1, -0.9], [-1, -0.8], [-1, -0.6], [-1, -0.4], [-1, -0.2], - [-0.95, -1], [-0.9, -1], [-0.8, -1], [-0.6, -1], [-0.4, -1], [-0.2, -1], - [1, 0.95], [1, 0.9], [1, 0.8], [1, 0.6], [1, 0.4], [1, 0.2], - [0.95, 1], [0.9, 1], [0.8, 1], [0.6, 1], [0.4, 1], [0.2, 1], - [-0.5, -0.45], [-0.45, -0.5], [0.5, 0.45], [0.45, 0.5], - [-0.04, 0.04], [0.04, -0.04] - ], - T=np.linspace(0, 2, 20) -) -plt.plot([0], [0], 'k.') # 'MarkerSize', AM_data_markersize*3) -# set(gca,'FontSize', 16) -plt.xlabel('$x_1$') -plt.ylabel('$x_2$') -plt.title('Saddle point') - -# Stable isL -m = 1 -b = 0 -k = 1 # zero damping -plt.figure() -plt.clf() -plt.axis([-1, 1, -1, 1]) # set(gca, 'DataAspectRatio', [1 1 1]); -phase_plot( - oscillator_ode, - timepts=[pi/6, pi/3, pi/2, 2*pi/3, 5*pi/6, pi, 7*pi/6, - 4*pi/3, 9*pi/6, 5*pi/3, 11*pi/6, 2*pi], - X0=[[0.2, 0], [0.4, 0], [0.6, 0], [0.8, 0], [1, 0], [1.2, 0], [1.4, 0]], - T=np.linspace(0, 20, 200), - parms=(m, b, k) -) -plt.plot([0], [0], 'k.') # 'MarkerSize', AM_data_markersize*3) -# plt.set(gca,'FontSize', 16) -plt.xlabel('$x_1$') -plt.ylabel('$x_2$') -plt.title('Undamped system\nLyapunov stable, not asympt. stable') - -if 'PYCONTROL_TEST_EXAMPLES' not in os.environ: - plt.show() From c41d4725be96c69edc2703fd4074d7f57f102dc8 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Fri, 29 Mar 2024 22:46:08 -0700 Subject: [PATCH 2/4] address @sliivingston, @sawyerbfuller comments --- control/flatsys/__init__.py | 6 +- control/phaseplot.py | 212 ++++++++++++++++++++------------ control/tests/phaseplot_test.py | 41 +++++- doc/phase_plane_plots.py | 1 + doc/plotting.rst | 4 +- examples/phase_plane_plots.py | 2 +- 6 files changed, 180 insertions(+), 86 deletions(-) create mode 120000 doc/phase_plane_plots.py diff --git a/control/flatsys/__init__.py b/control/flatsys/__init__.py index 6a608eecf..c6934d825 100644 --- a/control/flatsys/__init__.py +++ b/control/flatsys/__init__.py @@ -35,8 +35,10 @@ # Author: Richard M. Murray # Date: 1 Jul 2019 -r"""The :mod:`control.flatsys` module contains a set of classes and functions -that can be used to compute trajectories for differentially flat systems. +r"""Differentially flat systems sub-package. + +The :mod:`control.flatsys` sub-package contains a set of classes and +functions to compute trajectories for differentially flat systems. A differentially flat system is defined by creating an object using the :class:`~control.flatsys.FlatSystem` class, which has member functions for diff --git a/control/phaseplot.py b/control/phaseplot.py index 92465002d..ea23584dd 100644 --- a/control/phaseplot.py +++ b/control/phaseplot.py @@ -9,10 +9,10 @@ # * Check for keyword compatibility with other plot routines # * Set up configuration parameters (nyquist --> phaseplot) -"""The :mod:`control.phaseplot` module contains functions for generating 2D -phase plots. +"""Module for generating 2D phase plane plots. -The base function for creating phase plane portraits is +The :mod:`control.phaseplot` module contains functions for generating 2D +phase plots. The base function for creating phase plane portraits is :func:`~control.phase_plane_plot`, which generates a phase plane portrait for a 2 state I/O system (with no inputs). In addition, several other functions are available to creat ecustomize phase plane plots: @@ -52,7 +52,7 @@ def phase_plane_plot( sys, pointdata=None, timedata=None, gridtype=None, gridspec=None, plot_streamlines=True, plot_vectorfield=False, plot_equilpoints=True, - plot_separatrices=True, ax=None, **kwargs + plot_separatrices=True, ax=None, **kwargs ): """Plot phase plane diagram. @@ -61,8 +61,10 @@ def phase_plane_plot( Parameters ---------- - sys : NonlinearIOSystem or callable(x, t, ...) - Function used to generate phase plane data. + sys : NonlinearIOSystem or callable(t, x, ...) + I/O system or function used to generate phase plane data. If a + function is given, the remaining arguments are drawn from the + `params` keyword. pointdata : list or 2D array List of the form [xmin, xmax, ymin, ymax] describing the boundaries of the phase plot or an array of shape (N, 2) @@ -82,6 +84,10 @@ def phase_plane_plot( If gridtype is 'circlegrid', then `gridspec` is a 2-tuple specifying the radius and number of points around each point in the `pointdata` array. + params : dict, optional + Parameters to pass to system. For an I/O system, `params` should be + a dict of parameters and values. For a callable, `params` should be + dict with key 'args' and value given by a tuple (passed to callable). plot_streamlines : bool or dict If `True` (default) then plot streamlines based on the pointdata and gridtype. If set to a dict, pass on the key-value pairs in @@ -113,6 +119,8 @@ def phase_plane_plot( """ # Process arguments + params = kwargs.get('params', None) + sys = _create_system(sys, params) pointdata = [-1, 1, -1, 1] if pointdata is None else pointdata # Create axis if needed @@ -132,9 +140,8 @@ def _create_kwargs(global_kwargs, local_kwargs, **other_kwargs): new_kwargs.update(local_kwargs) return new_kwargs - # Create array for storing outputs - out = np.empty(3, dtype=object) - out[0] = [] + # Create list for storing outputs + out = [[], None, None] # Plot out the main elements if plot_streamlines: @@ -204,8 +211,10 @@ def vectorfield( Parameters ---------- - sys : NonlinearIOSystem or callable(x, t, ...) - Function used to generate phase plane data. + sys : NonlinearIOSystem or callable(t, x, ...) + I/O system or function used to generate phase plane data. If a + function is given, the remaining arguments are drawn from the + `params` keyword. pointdata : list or 2D array List of the form [xmin, xmax, ymin, ymax] describing the boundaries of the phase plot or an array of shape (N, 2) @@ -222,6 +231,10 @@ def vectorfield( If gridtype is 'circlegrid', then `gridspec` is a 2-tuple specifying the radius and number of points around each point in the `pointdata` array. + params : dict or list, optional + Parameters to pass to system. For an I/O system, `params` should be + a dict of parameters and values. For a callable, `params` should be + dict with key 'args' and value given by a tuple (passed to callable). color : str Plot the vector field in the given color. ax : Axes @@ -235,6 +248,9 @@ def vectorfield( # Get system parameters params = kwargs.pop('params', None) + # Create system from callable, if needed + sys = _create_system(sys, params) + # Determine the points on which to generate the vector field points, _ = _make_points(pointdata, gridspec, 'meshgrid') @@ -256,7 +272,7 @@ def vectorfield( vfdata = np.zeros((points.shape[0], 4)) for i, x in enumerate(points): vfdata[i, :2] = x - vfdata[i, 2:] = sys.dynamics(0, x, 0, params=params) + vfdata[i, 2:] = sys.dynamics(0, x, 0, params) out = ax.quiver( vfdata[:, 0], vfdata[:, 1], vfdata[:, 2], vfdata[:, 3], @@ -275,8 +291,10 @@ def streamlines( Parameters ---------- - sys : NonlinearIOSystem or callable(x, t, ...) - Function used to generate phase plane data. + sys : NonlinearIOSystem or callable(t, x, ...) + I/O system or function used to generate phase plane data. If a + function is given, the remaining arguments are drawn from the + `params` keyword. pointdata : list or 2D array List of the form [xmin, xmax, ymin, ymax] describing the boundaries of the phase plot or an array of shape (N, 2) @@ -296,6 +314,10 @@ def streamlines( If gridtype is 'circlegrid', then `gridspec` is a 2-tuple specifying the radius and number of points around each point in the `pointdata` array. + params : dict or list, optional + Parameters to pass to system. For an I/O system, `params` should be + a dict of parameters and values. For a callable, `params` should be + dict with key 'args' and value given by a tuple (passed to callable). color : str Plot the streamlines in the given color. ax : Axes @@ -306,13 +328,12 @@ def streamlines( out : list of Line2D objects """ - # - # Keyword processing - # - # Get system parameters params = kwargs.pop('params', None) + # Create system from callable, if needed + sys = _create_system(sys, params) + # Parse the arrows keyword arrow_pos, arrow_style = _parse_arrow_keywords(kwargs) @@ -374,8 +395,10 @@ def equilpoints( Parameters ---------- - sys : NonlinearIOSystem or callable(x, t, ...) - Function used to generate phase plane data. + sys : NonlinearIOSystem or callable(t, x, ...) + I/O systems or function used to generate phase plane data. If a + function is given, the remaining arguments are drawn from the + `params` keyword. pointdata : list or 2D array List of the form [xmin, xmax, ymin, ymax] describing the boundaries of the phase plot or an array of shape (N, 2) @@ -392,6 +415,10 @@ def equilpoints( If gridtype is 'circlegrid', then `gridspec` is a 2-tuple specifying the radius and number of points around each point in the `pointdata` array. + params : dict or list, optional + Parameters to pass to system. For an I/O system, `params` should be + a dict of parameters and values. For a callable, `params` should be + dict with key 'args' and value given by a tuple (passed to callable). color : str Plot the equilibrium points in the given color. ax : Axes @@ -405,6 +432,9 @@ def equilpoints( # Get system parameters params = kwargs.pop('params', None) + # Create system from callable, if needed + sys = _create_system(sys, params) + # Create axis if needed if ax is None: ax = plt.gca() @@ -442,8 +472,10 @@ def separatrices( Parameters ---------- - sys : NonlinearIOSystem or callable(x, t, ...) - Function used to generate phase plane data. + sys : NonlinearIOSystem or callable(t, x, ...) + I/O system or function used to generate phase plane data. If a + function is given, the remaining arguments are drawn from the + `params` keyword. pointdata : list or 2D array List of the form [xmin, xmax, ymin, ymax] describing the boundaries of the phase plot or an array of shape (N, 2) @@ -463,6 +495,10 @@ def separatrices( If gridtype is 'circlegrid', then `gridspec` is a 2-tuple specifying the radius and number of points around each point in the `pointdata` array. + params : dict or list, optional + Parameters to pass to system. For an I/O system, `params` should be + a dict of parameters and values. For a callable, `params` should be + dict with key 'args' and value given by a tuple (passed to callable). color : str Plot the streamlines in the given color. ax : Axes @@ -471,17 +507,14 @@ def separatrices( Returns ------- out : list of Line2D objects - - """ - # - # Keyword processing - # - # TODO: add unit test - radius = config._get_param('phaseplot', 'separatrices_radius') + """ # Get system parameters params = kwargs.pop('params', None) + # Create system from callable, if needed + sys = _create_system(sys, params) + # Parse the arrows keyword arrow_pos, arrow_style = _parse_arrow_keywords(kwargs) @@ -489,8 +522,9 @@ def separatrices( gridspec = [5, 5] if gridspec is None else gridspec points, _ = _make_points(pointdata, gridspec, 'meshgrid') - # Find the for equilibrium points + # Find the equilibrium points equilpts = _find_equilpts(sys, points, params=params) + radius = config._get_param('phaseplot', 'separatrices_radius') # Create axis if needed if ax is None: @@ -576,27 +610,6 @@ def separatrices( # # User accessible utility functions # -# TODO: document and add unit tests - -# Utility function for generating initial conditions around a box -# TODO: replace with boxgrid? -def box_grid(xlimp, ylimp): - """box_grid generate list of points on edge of box - - list = box_grid([xmin xmax xnum], [ymin ymax ynum]) generates a - list of points that correspond to a uniform grid at the end of the - box defined by the corners [xmin ymin] and [xmax ymax]. - """ - - # Generate a deprecation warning - warnings.warn( - "box_grid is deprecated; use phaseplot.boxgrid instead", - FutureWarning) - - return boxgrid( - np.linspace(xlimp[0], xlimp[1], xlimp[2]), - np.linspace(ylimp[0], ylimp[1], ylimp[2])) - # Utility function to generate boxgrid (in the form needed here) def boxgrid(xvals, yvals): @@ -688,12 +701,21 @@ def circlegrid(centers, radius, num): # Internal utility functions # -# TODO: rename to something more useful (or remove??) -def _find(condition): - """Returns indices where ravel(a) is true. - Private implementation of deprecated matplotlib.mlab.find - """ - return np.nonzero(np.ravel(condition))[0] +# Create a system form a callable +def _create_system(sys, params): + if isinstance(sys, NonlinearIOSystem): + if sys.nstates != 2: + raise ValueError("system must be planar") + return sys + + # Make sure that if params is present, it has 'args' key + if params and not params.get('args', None): + raise ValueError("params must be dict with key 'args'") + + _update = lambda t, x, u, params: sys(t, x, *params.get('args', ())) + _output = lambda t, x, u, params: np.array([]) + return NonlinearIOSystem( + _update, _output, states=2, inputs=0, outputs=0, name="_callable") # Set axis limits for the plot def _set_axis_limits(ax, pointdata): @@ -774,7 +796,7 @@ def _parse_args(defsize): elif not isinstance(gridspec, (list, tuple)) or \ len(gridspec) != len(defsize): - raise ValueError("invalid grid size specificiation") + raise ValueError("invalid grid specification") return gridspec @@ -900,7 +922,7 @@ def _make_timepts(timepts, i): # def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, lingrid=None, lintime=None, logtime=None, timepts=None, - parms=(), params=None, tfirst=False, verbose=True): + parms=None, params=(), tfirst=False, verbose=True): """(legacy) Phase plot for 2D dynamical systems. @@ -919,48 +941,42 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, Parameters ---------- func : callable(x, t, ...) - Computes the time derivative of y (compatible with odeint). - The function should be the same for as used for - :mod:`scipy.integrate`. Namely, it should be a function of the form - dxdt = F(x, t) that accepts a state x of dimension 2 and - returns a derivative dx/dt of dimension 2. - + Computes the time derivative of y (compatible with odeint). The + function should be the same for as used for :mod:`scipy.integrate`. + Namely, it should be a function of the form dxdt = F(t, x) that + accepts a state x of dimension 2 and returns a derivative dx/dt of + dimension 2. X, Y: 3-element sequences, optional, as [start, stop, npts] Two 3-element sequences specifying x and y coordinates of a grid. These arguments are passed to linspace and meshgrid to generate the points at which the vector field is plotted. If absent (or None), the vector field is not plotted. - scale: float, optional Scale size of arrows; default = 1 - X0: ndarray of initial conditions, optional List of initial conditions from which streamlines are plotted. Each initial condition should be a pair of numbers. - T: array-like or number, optional Length of time to run simulations that generate streamlines. If a single number, the same simulation time is used for all initial conditions. Otherwise, should be a list of length len(X0) that gives the simulation time for each initial condition. Default value = 50. - lingrid : integer or 2-tuple of integers, optional Argument is either N or (N, M). If X0 is given and X, Y are missing, a grid of arrows is produced using the limits of the initial conditions, with N grid points in each dimension or N grid points in x and M grid points in y. - lintime : integer or tuple (integer, float), optional If a single integer N is given, draw N arrows using equally space time points. If a tuple (N, lambda) is given, draw N arrows using exponential time constant lambda - timepts : array-like, optional Draw arrows at the given list times [t1, t2, ...] - - parms: tuple, optional - List of parameters to pass to vector field: `func(x, t, *parms)` + tfirst : bool, optional + If True, call `func` with signature `func(t, x, ...)`. + params: tuple, optional + List of parameters to pass to vector field: `func(x, t, *params)` See also -------- @@ -983,7 +999,14 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, timeptsFlag = False Narrows = 0 - # TODO: change parms to params with legacy processing + # Get parameters to pass to function + if parms: + warnings.warn( + f"keyword 'parms' is deprecated; use 'params'", FutureWarning) + if params: + raise ControlArgument(f"duplicate keywords 'parms' and 'params'") + else: + params = parms if lingrid is not None: autoFlag = True @@ -1022,10 +1045,10 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, for j in range(nc): if tfirst: dx[i, j, :] = np.squeeze( - odefun(0, [x1[i,j], x2[i,j]], *parms)) + odefun(0, [x1[i,j], x2[i,j]], *params)) else: dx[i, j, :] = np.squeeze( - odefun([x1[i,j], x2[i,j]], 0, *parms)) + odefun([x1[i,j], x2[i,j]], 0, *params)) # Plot the quiver plot #! TODO: figure out arguments to make arrows show up correctly @@ -1078,7 +1101,7 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, # Generate the streamlines for each initial condition for i in range(nr): - state = odeint(odefun, X0[i], TSPAN, args=parms, tfirst=tfirst) + state = odeint(odefun, X0[i], TSPAN, args=params, tfirst=tfirst) time = TSPAN plt.plot(state[:,0], state[:,1]) @@ -1124,9 +1147,9 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, x2[i,j] <= ymax and x2[i,j] >= ymin)): if tfirst: pass - v = odefun(0, [x1[i,j], x2[i,j]], *parms) + v = odefun(0, [x1[i,j], x2[i,j]], *params) else: - v = odefun([x1[i,j], x2[i,j]], 0, *parms) + v = odefun([x1[i,j], x2[i,j]], 0, *params) dx[i, j, 0] = v[0]; dx[i, j, 1] = v[1] else: dx[i, j, 0] = 0; dx[i, j, 1] = 0 @@ -1156,3 +1179,32 @@ def phase_plot(odefun, X=None, Y=None, scale=1, X0=None, T=None, bp = plt.plot(x1, x2, 'b.'); # add dots at base # set(bp, 'MarkerSize', PP_arrow_markersize) + +# Utility function for generating initial conditions around a box +def box_grid(xlimp, ylimp): + """box_grid generate list of points on edge of box + + list = box_grid([xmin xmax xnum], [ymin ymax ynum]) generates a + list of points that correspond to a uniform grid at the end of the + box defined by the corners [xmin ymin] and [xmax ymax]. + """ + + # Generate a deprecation warning + warnings.warn( + "box_grid is deprecated; use phaseplot.boxgrid instead", + FutureWarning) + + return boxgrid( + np.linspace(xlimp[0], xlimp[1], xlimp[2]), + np.linspace(ylimp[0], ylimp[1], ylimp[2])) + + +# TODO: rename to something more useful (or remove??) +def _find(condition): + """Returns indices where ravel(a) is true. + Private implementation of deprecated matplotlib.mlab.find + """ + return np.nonzero(np.ravel(condition))[0] + + + diff --git a/control/tests/phaseplot_test.py b/control/tests/phaseplot_test.py index 0f6b0be06..a01ab2aea 100644 --- a/control/tests/phaseplot_test.py +++ b/control/tests/phaseplot_test.py @@ -55,7 +55,7 @@ def testInvPendFBS(self): [4.2, 2.1], [5, 2.1], [2*pi, -1.6], [2*pi, -0.5], [1.8, -2.1], [1, -2.1], [-4.2, -2.1], [-5, -2.1]], T = np.linspace(0, 40, 800), - params={'m': 1, 'l': 1, 'b': 0.2, 'g': 1}) + params=(1, 1, 0.2, 1)) # Separatrices @@ -115,11 +115,50 @@ def oscillator_ode(self, x, t, m=1., b=1, k=1, extra=None): [ct.phaseplot.separatrices, [5], {'color': ('r', 'g')}], ]) def test_helper_functions(func, args, kwargs): + # Test with system sys = ct.nlsys( lambda t, x, u, params: [x[0] - 3*x[1], -3*x[0] + x[1]], states=2, inputs=0) out = func(sys, [-1, 1, -1, 1], *args, **kwargs) + # Test with function + rhsfcn = lambda t, x: sys.dynamics(t, x, 0, {}) + out = func(rhsfcn, [-1, 1, -1, 1], *args, **kwargs) + + +def test_system_types(): + # Sample dynamical systems - inverted pendulum + def invpend_ode(t, x, m=0, l=0, b=0, g=0): + return (x[1], -b/m*x[1] + (g*l/m) * np.sin(x[0])) + + # Use callable form, with parameters (if not correct, will get /0 error) + ct.phase_plane_plot( + invpend_ode, [-5, 5, 2, 2], params={'args': (1, 1, 0.2, 1)}) + + # Linear I/O system + ct.phase_plane_plot( + ct.ss([[0, 1], [-1, -1]], [[0], [1]], [[1, 0]], 0)) + + +def test_phaseplane_errors(): + with pytest.raises(ValueError, match="invalid grid specification"): + ct.phase_plane_plot(ct.rss(2, 1, 1), gridspec='bad') + + with pytest.raises(ValueError, match="unknown grid type"): + ct.phase_plane_plot(ct.rss(2, 1, 1), gridtype='bad') + + with pytest.raises(ValueError, match="system must be planar"): + ct.phase_plane_plot(ct.rss(3, 1, 1)) + + with pytest.raises(ValueError, match="params must be dict with key"): + def invpend_ode(t, x, m=0, l=0, b=0, g=0): + return (x[1], -b/m*x[1] + (g*l/m) * np.sin(x[0])) + ct.phase_plane_plot( + invpend_ode, [-5, 5, 2, 2], params={'stuff': (1, 1, 0.2, 1)}) + + + + def test_basic_phase_plots(savefigs=False): sys = ct.nlsys( lambda t, x, u, params: np.array([[0, 1], [-1, -1]]) @ x, diff --git a/doc/phase_plane_plots.py b/doc/phase_plane_plots.py new file mode 120000 index 000000000..6076fa4cd --- /dev/null +++ b/doc/phase_plane_plots.py @@ -0,0 +1 @@ +../examples/phase_plane_plots.py \ No newline at end of file diff --git a/doc/plotting.rst b/doc/plotting.rst index 98ebd6772..62fdd554d 100644 --- a/doc/plotting.rst +++ b/doc/plotting.rst @@ -329,9 +329,9 @@ units forward and backward in time. A separate grid specification is used to find equilibrium points and separatrices (since the course grid spacing of 5x8 does not find all possible equilibrium points). Together, the multiple features in the phase plane plot give a good global picture of the -topological strucrure of solutions of the dynamical system. +topological structure of solutions of the dynamical system. -Phase plots can be buit up by hand using a variety of helper functions that +Phase plots can be built up by hand using a variety of helper functions that are part of the :mod:`~control.phaseplot` (pp) module:: import control.phaseplot as pp diff --git a/examples/phase_plane_plots.py b/examples/phase_plane_plots.py index 705575933..2432af8d8 100644 --- a/examples/phase_plane_plots.py +++ b/examples/phase_plane_plots.py @@ -1,4 +1,4 @@ -# phase_portraits.py - phase portrait examples +# phase_plane_plots.py - phase portrait examples # RMM, 25 Mar 2024 # # This file contains a number of examples of phase plane plots generated From edb444e10debd4f0de69262346570e4ba27e74d6 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Sat, 30 Mar 2024 14:30:08 -0700 Subject: [PATCH 3/4] small updates to address @sawyerbfuller comments on updfcn --- control/phaseplot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/control/phaseplot.py b/control/phaseplot.py index ea23584dd..0b55e3369 100644 --- a/control/phaseplot.py +++ b/control/phaseplot.py @@ -270,9 +270,10 @@ def vectorfield( # Generate phase plane (quiver) data vfdata = np.zeros((points.shape[0], 4)) + sys._update_params(params) for i, x in enumerate(points): vfdata[i, :2] = x - vfdata[i, 2:] = sys.dynamics(0, x, 0, params) + vfdata[i, 2:] = sys._rhs(0, x, 0) out = ax.quiver( vfdata[:, 0], vfdata[:, 1], vfdata[:, 2], vfdata[:, 3], @@ -359,7 +360,7 @@ def streamlines( # Create reverse time system, if needed if dir != 'forward': revsys = NonlinearIOSystem( - lambda t, x, u, params: -np.array(sys.updfcn(t, x, u, params)), + lambda t, x, u, params: -np.asarray(sys.updfcn(t, x, u, params)), sys.outfcn, states=sys.nstates, inputs=sys.ninputs, outputs=sys.noutputs, params=sys.params) else: From 748e36ab9dd561ab81d719c95ad6de7788abd15f Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Sat, 30 Mar 2024 21:59:29 -0700 Subject: [PATCH 4/4] fix typos + other small fixes from @slivingston --- control/phaseplot.py | 11 ++++------- doc/plotting.rst | 2 +- examples/phase_plane_plots.py | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/control/phaseplot.py b/control/phaseplot.py index 0b55e3369..d785a2221 100644 --- a/control/phaseplot.py +++ b/control/phaseplot.py @@ -15,7 +15,7 @@ phase plots. The base function for creating phase plane portraits is :func:`~control.phase_plane_plot`, which generates a phase plane portrait for a 2 state I/O system (with no inputs). In addition, several other -functions are available to creat ecustomize phase plane plots: +functions are available to create customized phase plane plots: * boxgrid: Generate a list of points along the edge of a box * circlegrid: Generate list of points around a circle @@ -103,7 +103,7 @@ def phase_plane_plot( plot_separatrices : bool or dict If `True` (default) then plot separatrices starting from each equilibrium point. If set to a dict, pass on the key-value pairs - in the dict as keywords to :func:`~control.phaseplot.streamlines`. + in the dict as keywords to :func:`~control.phaseplot.separatrices`. color : str Plot all elements in the given color (use `plot_={'color': c}` to set the color in one element of the phase plot. @@ -397,7 +397,7 @@ def equilpoints( Parameters ---------- sys : NonlinearIOSystem or callable(t, x, ...) - I/O systems or function used to generate phase plane data. If a + I/O system or function used to generate phase plane data. If a function is given, the remaining arguments are drawn from the `params` keyword. pointdata : list or 2D array @@ -702,7 +702,7 @@ def circlegrid(centers, radius, num): # Internal utility functions # -# Create a system form a callable +# Create a system from a callable def _create_system(sys, params): if isinstance(sys, NonlinearIOSystem): if sys.nstates != 2: @@ -789,9 +789,6 @@ def _make_points(pointdata, gridspec, gridtype): # Utility function to parse (and check) input arguments def _parse_args(defsize): - # if not isinstance(pointdata, (list, tuple)) or len(pointdata) != 4: - # raise ValueError("invalid grid data specification") - if gridspec is None: return defsize diff --git a/doc/plotting.rst b/doc/plotting.rst index 62fdd554d..8eb548a85 100644 --- a/doc/plotting.rst +++ b/doc/plotting.rst @@ -363,7 +363,7 @@ The following helper functions are available: The :func:`~control.phase_plane_plot` function calls these helper functions based on the options it is passed. -Note that unlike other plotting function, phase plane plots do not involve +Note that unlike other plotting functions, phase plane plots do not involve computing a response and then plotting the result via a `plot()` method. Instead, the plot is generated directly be a call to the :func:`~control.phase_plane_plot` function (or one of the diff --git a/examples/phase_plane_plots.py b/examples/phase_plane_plots.py index 2432af8d8..b3b2a01c3 100644 --- a/examples/phase_plane_plots.py +++ b/examples/phase_plane_plots.py @@ -2,7 +2,7 @@ # RMM, 25 Mar 2024 # # This file contains a number of examples of phase plane plots generated -# using the phaseplot module. Most of these figures lines up with examples +# using the phaseplot module. Most of these figures line up with examples # in FBS2e, with different display options shown as different subplots. import time