Bonjour à tous,

Je suis occupé à résoudre des équations différentielles sous matlab (ode45).

J'ai une variable dépendante "x" qui évolue selon une loi telle que (ddot=dérivée seconde, dot=dérivée première) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
x_ddot=fonction(autres,x,xdot)
Je me retrouve avec un code du type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Y0=[x,xdot],
[tout,yout] = ode45(@(t,y)myfun(t,y,autres),[t0 tstop],Y0);
et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
function ydot=myfun(t,y,autres)
x=y(1);
xdot=y(2);
 
xddot=fonction(autres,x,xdot);
 
ydot=[xdot;xddot];
J'aimerais pouvoir faire en sorte que la varialbe dépendante x soit dans un domaine donné

$x\in[x0,xsup]$

avec x0=x(t=0) et xsup>x0.

Avez-vous une idée?

J'ai déjà essayé en faisant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
function ydot=myfun(t,y,autres)
x=y(1);
xdot=y(2);
 
xddot=fonction(autres,x,xdot);
 
if x>=xsup,
   xdot=min(xdot,0);
elseif x<=x0,
   xdot=max(xdot,0);
end;
 
ydot=[xdot;xddot];
Avez-vous une autre idée? Je ne suis pas tout à fait certain que mon idée soit la meilleure/donne de bons résultats.

Merci pour vos renseignements et bonne après-midi