You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importnumpyasnpimportmatplotlib.pyplotaspltfromcontrol.phaseplotimportphase_plot# Define the ODEs for a damped (inverted) pendulumdefinvpend_ode(x, t, m=1., l=1., b=0.2, g=1):
returnx[1], -b/m*x[1] + (g*l/m)*np.sin(x[0])
# Set up the figure the way we want it to lookplt.figure()
plt.title('Inverted pendulum')
# Outer trajectoriesphase_plot(
invpend_ode,
X=(-10, 10, 20),
Y=(-10, 10, 20),
X0=[[-2*np.pi, 1.6], [-2*np.pi, 0.5], [-1.8, 2.1],
[-1, 2.1], [4.2, 2.1], [5, 2.1],
[2*np.pi, -1.6], [2*np.pi, -0.5], [1.8, -2.1],
[1, -2.1], [-4.2, -2.1], [-5, -2.1]]
)
plt.show()
I would have expected this to plot a simple vector field with a grid of 20*20 arrows and streamlines from the given inital conditions. Instead, each time I run this I get a different malformed plot, often with at least one axis somehow having arrows at values like 10^281. Various RuntimeWarnings about overflow are also sometimes printed in the console. Some examples of the plots I have gotten:
This does not seem like expected behaviour. What is going on here?
Tested on Windows 10 with Python 3.10.11, matplotlib 3.8.2 and control 0.9.4 from pip.
The text was updated successfully, but these errors were encountered:
FeldrinH
changed the title
Strange nondeterministic behavior when using phase_plot with X, Y and X0 set.
Strange nondeterministic behavior when using phase_plot with X, Y and X0 set
Feb 13, 2024
FeldrinH
changed the title
Strange nondeterministic behavior when using phase_plot with X, Y and X0 set
Strange nondeterministic issues when using phase_plot with X, Y and X0 set
Feb 13, 2024
I ran this on the current main and got similar behavior on MacOS 14.2 with Python 3.11. There are a couple of warning messages that also appear
[...]/matplotlib/quiver.py:646: RuntimeWarning: divide by zero encountered in scalar divide
length = a * (widthu_per_lenu / (self.scale * self.width))
[...]/matplotlib/quiver.py:646: RuntimeWarning: invalid value encountered in multiply
length = a * (widthu_per_lenu / (self.scale * self.width))
These could be the source of the randomness?
I'll try to have a look and see if I can figure out what is going on and see if there is a quick fix. I'm in the process of rewriting this functionality to be a bit more Pythonic, so it may not make sense to do an interim fix to the old code. More info as I find it.
I am trying to draw a phase plot with both streamlines and a vector field. Using the inverted pendulum ODE from https://python-control.readthedocs.io/en/latest/phaseplots.html, I put together the following script:
I would have expected this to plot a simple vector field with a grid of 20*20 arrows and streamlines from the given inital conditions. Instead, each time I run this I get a different malformed plot, often with at least one axis somehow having arrows at values like 10^281. Various RuntimeWarnings about overflow are also sometimes printed in the console. Some examples of the plots I have gotten:
This does not seem like expected behaviour. What is going on here?
Tested on Windows 10 with Python 3.10.11, matplotlib 3.8.2 and control 0.9.4 from pip.
The text was updated successfully, but these errors were encountered: