Van der Pol’s differential equation is
The equation describes a system with nonlinear damping, the degree of damping given by μ. If μ = 0 the system is linear and undamped, but for positive μ the system is nonlinear and damped. We will plot the phase portrait for the solution to Van der Pol’s equation in Python using SciPy’s new ODE solver ivp_solve
.
The function ivp_solve
does not solve second-order systems of equations directly. It solves systems of first-order equations, but a second-order differential equation can be recast as a pair of first-order equations by introducing the first derivative as a new variable.
Since y is the derivative of x, the phase portrait is just the plot of (x, y).
If μ = 0, we have a simple harmonic oscillator and the phase portrait is simply a circle. For larger values of μ the solutions enter limiting cycles, but the cycles are more complicated than just circles.
Here’s the Python code that made the plot.
from scipy import linspace from scipy.integrate import solve_ivp import matplotlib.pyplot as plt def vdp(t, z): x, y = z return [y, mu*(1 - x**2)*y - x] a, b = 0, 10 mus = [0, 1, 2] styles = ["-", "--", ":"] t = linspace(a, b, 1000) for mu, style in zip(mus, styles): sol = solve_ivp(vdp, [a, b], [1, 0], t_eval=t) plt.plot(sol.y[0], sol.y[1], style) # make a little extra horizontal room for legend plt.xlim([-3,3]) plt.legend([f"$\mu={m}$" for m in mus]) plt.axes().set_aspect(1)
Related posts
from John D. Cook https://ift.tt/2Q8YgEI
via IFTTT
Comments
Post a Comment