Van der Pol Oscillator

From mintOC
Jump to: navigation, search
Van der Pol Oscillator
State dimension: 1
Differential states: 2
Continuous control functions: 1
Path constraints: 1
Interior point equalities: 2


The Van der Pol Oscillator is an oscillating system with non-linear damping and self regulation. The System was first introduced by the Dutch physician Balthasar Van der Pol in 1927. The aim is to control the oscillation such that the system stays in a mean position.


Model formulation

The Van der Pol Oscillator evolves over time according to the second order differential equation:

{d^2x \over dt^2}-u(1-x^2){dx \over dt}+x= 0

where x is the position coordinate, which is a function of the time t, and u is a scalar parameter indicating the non-linearity and the strength of the damping.

For u>>1 the oscillator is being damped, whereas for u<<1 energy is added to the system.

Based on the transformation y = \dot x the problem can be reformulated:

		 \dot x = y

\dot y = u(1-x^2) y-x


The Optimal Control Problem arises by adding the objective function:

\min\limits_{u}\int\limits_{t_0}^{t_f}(x(t)^2+y(t)^2+u(t)^2) dt


Optimal Control Problem

The Optimal Control Problem with the aim to minimize the deflection can be formulated as follows:

 		
\begin{array}{lll}
\min\limits_{u}  & \int\limits_{t_0}^{t_f} & (x(t)^2+y(t)^2+u(t)^2) dt\\
s.t. & 	 \dot x & = y,\\
&	\dot y & = u(1-x^2) y-x,\\
& x(0) & =1,\\
& y(0) & =0,\\
& u(t) & \le 0.75.\\
\end{array}

Parameters

These fixed values are used within the model:

[t_0,t_f]=[0,20]


Reference Solution

The following reference solution was generated using JModelica with the automatic differentiation tool CasADI and the solver IPOPT. The Optimica code used to solve the problem can be found under Van der Pol Oscillator (JModelica) The optimal value of the objective function is 3.1762.


Source Code

Model descriptions are available in:

Variants

There are several alternative formulations and variants of the above problem, in particular


References

The Problem can be found under the following link or in the JModelica Users Guide.