\Titre{Équation de \textsc{Van der Pol}} \begin{multicols}{2} L'\textbf{équation de Van der Pol} est une équation différentielle du second ordre de la forme: \[y''- c(1-y^2)y' + y = 0\] où \(c\) est une constante. Elle est équivalente au système différentiel: \[\left\{\begin{matrix}x'(t) &=& c(1-y^2(t))x(t)-y(t)\\ y'(t) &=& x(t)\hfill \end{matrix}\right.\] Sa traduction en code Scilab, pour \(c=0.5\), est: .s function [Xprime] = VanDerPol(t,X) .s Xprime(1) = 0.5 * (1-X(2)^2) * X(1) - X(2) .s Xprime(2) = X(1) .s endfunction En réalité la forme que nous donnons là est une forme simplifiée de l'équation qui est utilisée en physique pour modéliser un \textit{oscillateur entretenu}. Cette équation n'est pas linéaire et nous ne pouvons pas en donner de solution explicite. Pour des compléments, voir l'article sur \href{http://fr.wikipedia.org/wiki/Oscillateur_de_Van_der_Pol}{Wikipédia}; plus généralement une recherche sur \textit{Internet} livre une littérature abondante sur le sujet ainsi que des animations. Représentons le champ de vecteur dans l'espace des phases \((x,y)\): .s s=linspace(-5,5,11); .s fchamp(VanDerPol,0,s,s) .f width=0.9\linewidth Superposons la solution avec les conditions initiales \(x(0)=0\), \(y(0)=1\), autrement dit \(y(0)=1\) et \(y'(0)=0\). .s t=linspace(0,50,1000); X0=[0;1]; .s [u]=ode(X0,0,t,VanDerPol); .s plot(u(1,:)',u(2,:)',2) .f Représentons la solution \(y\) en fonction de \(t\): .s clf; plot(t,u(2,:)) .f Comme nous pouvons le constater la solution déterminée tend vers un \textit{cycle limite} dans l'espace des phases, elle devient quasimément \textit{périodique}. C'est la cas, pour la valeur de \(c\) choisie ici, quelles que soient les conditions initiales. .s clf; .s X0=[-3;3]; .s [u]=ode(X0,0,t,VanDerPol); .s plot(u(1,:)',u(2,:)',2); .f \end{multicols} \newpage Représentons plusieurs solutions sur le même champ. \begin{enumerate} \item Tracé du champs de vecteur issu de l'équation de \textsc{Van der Pol}: .s n = 30; dx = 6; dy = 4; .s x = linspace(-dx,dx,n); .s y = linspace(-dy,dy,n); .s clf(); .s fchamp(VanDerPol,0,x,y,1,[-dx,-dy,dx,dy],"031") .s xselect() \item Résolution de l'équation différentielle: .s m = 500 ; T = 30; t = linspace(0,T,m); .s couleurs = [21 2 3 4 5 6 19 28 32 9 13 22 18 21 12 30 27]; // 17 couleurs .s num = -1; .s while %t .s [c_i,c_x,c_y]=xclick(); .s if c_i == 0 then .s plot2d(c_x, c_y, -9, "000") .s u0 = [c_x;c_y]; .s [u] = ode(u0, 0, t, VanDerPol); .s num = modulo(num+1,length(couleurs)); .s plot2d(u(1,:)',u(2,:)',couleurs(num+1),"000") .s elseif c_i == 2 then .s break .s end .s end \end{enumerate} .f Ce document est largement inspiré de celui que vous trouverez ici:\\ \url{http://www.iecn.u-nancy.fr/~pincon/scilab/Doc/node80.html}\\ En particulier, le dernier segment de code permettant de choisir, à la souris, les conditions initiales est repris intégralement.