Article 4WYEN Solving Van der Pol equation with ivp_solve

Solving Van der Pol equation with ivp_solve

by
John
from John D. Cook on (#4WYEN)

Van der Pol's differential equation is

vanderpol_eqn.svg

The equation describes a system with nonlinear damping, the degree of nonlinearity given by I1/4. If I1/4 = 0 the system is linear and undamped, but as I1/4 increases the strength of the nonlinearity increases. 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.

vanderpol_eqn2.svg

Since y is the derivative of x, the phase portrait is just the plot of (x, y).

vanderpol_plot.png

If I1/4 = 0, we have a simple harmonic oscillator and the phase portrait is simply a circle. For larger values of I1/4 the solutions enter limiting cycles, but the cycles are more complicated than just circles. These limiting cycles are periodic attractors: every non-trivial solution converges to the limit cycle.

Here's the Python code that made the plot.

from scipy import linspacefrom scipy.integrate import solve_ivpimport matplotlib.pyplot as pltdef vdp(t, z): x, y = z return [y, mu*(1 - x**2)*y - x]a, b = 0, 10mus = [0, 1, 2]styles = ["-", "--", ":"]t = linspace(a, b, 500)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 legendplt.xlim([-3,3]) plt.legend([f"$\mu={m}$" for m in mus])plt.axes().set_aspect(1)

To plot the solutions as a function of time, rather than plotting phase portraits, change the line

 plt.plot(sol.y[0], sol.y[1], style)

to

 plt.plot(sol.t, sol.y[0], style)

and comment out the line setting xlim This gives the following plot.

vanderpol_time2.png

Related posts3Ydc0zYq2s4
External Content
Source RSS or Atom Feed
Feed Location http://feeds.feedburner.com/TheEndeavour?format=xml
Feed Title John D. Cook
Feed Link https://www.johndcook.com/blog
Reply 0 comments