gemseo / problems / ode

van_der_pol module¶

The Van der Pol (VDP) problem describing an oscillator with non-linear damping.

Van der Pol, B. & Van Der Mark, J. Frequency Demultiplication. Nature 120, 363–364 (1927).

The Van der Pol problem is written as follows:

$\frac{d^2 x(t)}{dt^2} - \mu (1-x(t)^2) \frac{dx(t)}{dt} + x = 0$

where $$x(t)$$ is the position coordinate as a function of time, and $$\mu$$ is a scalar parameter indicating the stiffness.

This problem can be rewrittent in a 2-dimensional form with only first-order derivatives. Let $$y = \frac{dx}{dt}$$ and $$s = \begin{pmatrix}x\\y\end{pmatrix}$$. Then the Van der Pol problem is:

$\frac{ds}{dt} = f(s, t)$

with

$\begin{split}f : s = \begin{pmatrix} x \\ y \end{pmatrix} \mapsto \begin{pmatrix} y \\ \mu (1-x^2) y - x \end{pmatrix}\end{split}$

The jacobian of this function can be expressed analytically:

$\begin{split}\mathrm{Jac}\, f = \begin{pmatrix} 0 & 1 \\ -2\mu xy - 1 & \mu (1 - x^2) \end{pmatrix}\end{split}$

There is no exact solution to the Van der Pol oscillator problem in terms of known tabulated functions (see Panayotounakos et al. « On the Lack of Analytic Solutions of the Van Der Pol Oscillator ». ZAMM 83, nᵒ 9 (1 septembre 2003)).

class gemseo.problems.ode.van_der_pol.VanDerPol(initial_time=0, final_time=0.5, mu=1000.0, use_jacobian=True, state_vector=None)[source]

Bases: ODEProblem

Representation of an oscillator with non-linear damping.

Parameters:
• mu (float) –

The stiffness parameter.

By default it is set to 1000.0.

• initial_time (float) –

The start of the integration interval.

By default it is set to 0.

• final_time (float) –

The end of the integration interval.

By default it is set to 0.5.

• use_jacobian (bool) –

Whether to use the analytical expression of the Jacobian. If false, use finite differences to estimate the Jacobian.

By default it is set to True.

• state_vector (NDArray[float]) – The state vector of the system.

func: Callable[[NDArray[float], NDArray[float]], NDArray[float]]

The right-hand side of the ODE.

initial_state: NDArray[float]

The initial conditions $$(t_0,s_0)$$ of the ODE.

integration_interval: tuple[float, float]

The interval of integration.

jac: Callable[[NDArray[float], NDArray[float]], NDArray[float]]

The Jacobian function of the right-hand side of the ODE.

result: ODEResult

The result of the ODE problem.

state_vect: NDArray[float]

State vector $$s=(x, \dot{x})$$ of the system.

time_vector: NDArray[float]

The times at which the solution should be evaluated.

Examples using VanDerPol¶

Solve an ODE: the Van der Pol problem

Solve an ODE: the Van der Pol problem