Description
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:
import numpy as np
import matplotlib.pyplot as plt
from control.phaseplot import phase_plot
# 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.title('Inverted pendulum')
# Outer trajectories
phase_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.