1
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
2
<!DOCTYPE MAN SYSTEM "../../manrev.dtd">
4
<LANGUAGE>fr</LANGUAGE>
6
<TYPE>Scilab Function </TYPE>
7
<DATE>February 1998 </DATE>
8
<SHORT_DESCRIPTION name="ode"> solveur d'�quations diff�rentielles ordinaires </SHORT_DESCRIPTION>
10
<CALLING_SEQUENCE_ITEM>y=ode(y0,t0,t,f) </CALLING_SEQUENCE_ITEM>
11
<CALLING_SEQUENCE_ITEM>[y,w,iw]=ode([type],y0,t0,t [,rtol [,atol]],f [,jac] [,w,iw]) </CALLING_SEQUENCE_ITEM>
12
<CALLING_SEQUENCE_ITEM>[y,rd,w,iw]=ode("root",y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw]) </CALLING_SEQUENCE_ITEM>
13
<CALLING_SEQUENCE_ITEM>y=ode("discrete",y0,k0,kvect,f) </CALLING_SEQUENCE_ITEM>
18
<PARAM_NAME>y0 </PARAM_NAME>
21
: vecteur ou matrice r�elle (conditions initiales).
26
<PARAM_NAME>t0 </PARAM_NAME>
29
: r�el (instant initial).
34
<PARAM_NAME>t </PARAM_NAME>
37
: vecteur r�el (instants o� la solution est renvoy�e).
42
<PARAM_NAME>f </PARAM_NAME>
45
: fonction externe (fonction Scilab ou cha�ne de caract�res ou liste).
50
<PARAM_NAME>type </PARAM_NAME>
53
: une des cha�nes de caract�res : <VERB>"adams" "stiff" "rk" "rkf" "fix" "discrete" "roots"</VERB>
58
<PARAM_NAME>rtol,atol </PARAM_NAME>
61
: constantes ou vecteurs r�els de m�me taille que <VERB>y</VERB>.
66
<PARAM_NAME>jac </PARAM_NAME>
69
: fonction externe (fonction Scilab, cha�ne de caract�res ou liste).
74
<PARAM_NAME>w,iw </PARAM_NAME>
82
<PARAM_NAME>ng </PARAM_NAME>
90
<PARAM_NAME>g </PARAM_NAME>
93
: fonction externe (fonction Scilab, cha�ne de caract�res ou liste).
98
<PARAM_NAME>k0 </PARAM_NAME>
101
: entier (instant initial). kvect : vecteur d'entiers
109
<VERB>ode</VERB> est la fonction utilis�e pour approcher la solution d'une �quation diff�rentielle ordinaire (EDO) explicite du premier ordre en temps, d�finie par :
112
dy/dt=f(t,y) , y(t0)=y0.
115
Il s'agit d'une interface vers diverses librairies, en particulier ODEPACK.
116
Le type du probl�me et la m�thode utilis�e d�pendent de la valeur du
117
premier argument optionnel <VERB>type</VERB> qui peut �tre �gal � :
121
<DESCRIPTION_ITEM label='<aucun> :'>
123
le solveur <VERB>lsoda</VERB> du package ODEPACK est utilis� par d�faut. Il choisit automatiquement entre un sch�ma pr�dicteur-correcteur d'Adams et un sch�ma adapt� au syst�mes raides (stiff) de type "Backward Differentiation Formula" (BDF). Initialement le sch�ma adapt� aux syst�me non raides est choisi puis la m�thode adapt�e est ensuite choisie dynamiquement.
127
<DESCRIPTION_ITEM label='"adams" :'>
129
Probl�mes non raides. Le solveur <VERB>lsode</VERB> du package ODEPACK est utilis� (sch�ma d'Adams).
133
<DESCRIPTION_ITEM label='"stiff" :'>
135
Pour les syst�mes raides. Le solveur <VERB>lsode</VERB> du package ODEPACK est utilis� avec le sch�ma BDF.
139
<DESCRIPTION_ITEM label='"rk" :'>
141
Sch�ma de Runge-Kutta adaptatif d'ordre 4 (RK4).
145
<DESCRIPTION_ITEM label='"rkf" :'>
147
Formules de Shampine et Watts bas�es sur les paires de Runge-Kutta Fehlberg d'ordre 4 et 5 (RKF45). Bien pour les probl�mes non raides ou moyennement raides, lorsque le calcul du second membre n'est pas trop co�teux. Cette m�thode est � �viter si l'on recherche une tr�s grande pr�cision.
151
<DESCRIPTION_ITEM label='"fix":'>
153
Identique � "rkf", mais l'interface est simplifi�e, i.e. uniquement <VERB>rtol</VERB> et <VERB>atol</VERB> sont communiqu�s au solveur.
157
<DESCRIPTION_ITEM label='"root":'>
159
Solveur d'EDO avec recherche de racines. Le solveur <VERB>lsodar</VERB> du package ODEPACK est utilis�. C'est une variante de <VERB>lsoda</VERB> permettant la recherche d'une racine d'une fonction vectorielle donn�e. Voir ode_root pour plus de d�tails.
163
<DESCRIPTION_ITEM label='"discrete":'>
165
Simulation en temps discret. Voir ode_discrete pour plus de d�tails.
168
</DESCRIPTION_INDENT>
170
Ici on ne d�crit l'usage de <VERB>ode</VERB> que pour des EDO explicites.
173
L'appel le plus simple de <VERB>ode</VERB> est du type :
174
<VERB>y=ode(y0,t0,t,f)</VERB>
175
o� <VERB>y0</VERB> est le vecteur des conditions initiales, <VERB>t0</VERB> est le temps initial, et <VERB>t</VERB> est le vecteur des instants o� l'on veut une approximation de la solution.
176
<VERB>y</VERB> est calcul�e et <VERB>y</VERB> est la matrice
177
<VERB>y=[y(t(1)),y(t(2)),...]</VERB>.
180
Le param�tre <VERB>f</VERB> de <VERB>ode</VERB> est par exemple une fonction Scilab, dont
181
la syntaxe est impos�e, ou le nom d'une subroutine Fortran ou C
182
(cha�ne de caract�res) ou une liste.
185
Si <VERB>f</VERB> est une fonction Scilab, sa syntaxe doit �tre :
191
o� <VERB>t</VERB> est un scalaire (le temps) et <VERB>y</VERB> un vecteur (l'�tat).
192
Cette fonction renvoie le second membre de l'�quation diff�rentielle dy/dt=f(t,y).
195
Si <VERB>f</VERB> est une cha�ne de caract�res, elle d�signe le nom d'une subroutine Fortran
196
ou C, i.e. si <VERB>ode(y0,t0,t,"fex")</VERB> est la
197
commande, alors la subroutine <VERB>fex</VERB> est appel�e.
198
Cette routine doit avoir la liste d'appel suivante :
199
<VERB>f(n,t,y,ydot)</VERB>. La routine doit �tre li�e dynamiquement � Scilab avec la fonction
200
<VERB>link</VERB>. Voir les exemples dans les fichiers
201
<VERB>SCIDIR/routines/default/README</VERB> et
202
<VERB>SCIDIR/routines/default/Ex-ode.f</VERB>.
205
L'argument <VERB>f</VERB> peut aussi �tre une liste :
206
si <VERB>ode(y0,t0,t,lst)</VERB>
207
est la commande, alors <VERB>lst</VERB> doit �tre une liste avec la structure suivante :
210
lst=list(f,u1,u2,...un)
213
o� <VERB>f</VERB> est une fonction avec la syntaxe :
216
ydot = f(t,y,u1,u2,...,un)
219
cela permet de passer des param�tres sous forme d'arguments suppl�mentaires de <VERB>f</VERB>.
222
La fonction <VERB>f</VERB> peut renvoyer une matrice <VERB>p x q</VERB> au lieu d'un vecteur.
223
Dans ce cas, on r�sout le syst�me d'EDO <VERB>n=p+q</VERB>
224
<VERB>dY/dt=F(t,Y)</VERB> o� <VERB>Y</VERB> est une matrice <VERB>p x q</VERB>.
225
La condition initiale <VERB>Y0</VERB> doit aussi �tre une matrice <VERB>p x q</VERB> matrix et le r�sultat renvoy� par <VERB>ode</VERB> est la matrice
226
<VERB>p x q(T+1)</VERB> �gale � <VERB>[Y(t_0),Y(t_1),...,Y(t_T)]</VERB>.
229
Des param�tres optionnels contr�lent la tol�rance du sch�ma :
230
<VERB>rtol</VERB> et <VERB>atol</VERB>
231
sont des valeurs seuil sur les erreurs estim�es (relative et absolue)
232
L'erreur estim�e sur <VERB>y(i)</VERB> est :
235
rtol(i)*abs(y(i))+atol(i)
238
Si <VERB>rtol</VERB> et/ou <VERB>atol</VERB> sont des constantes <VERB>rtol(i)</VERB> et/ou
239
<VERB>atol(i)</VERB> prennent ces valeurs. Les valeurs par d�faut de <VERB>rtol</VERB> et <VERB>atol</VERB>
240
sont respectivement <VERB>rtol=1.d-5</VERB> et <VERB>atol=1.d-7</VERB> pour la plupart des solveurs et <VERB>rtol=1.d-3</VERB> et <VERB>atol=1.d-4</VERB> pour <VERB>"rfk"</VERB> et <VERB>"fix"</VERB>.
243
Pour les probl�mes raides, il est recommand� de fournir la jacobienne du second membre
244
sous forme de l'argument optionnel <VERB>jac</VERB>. Le param�tre <VERB>jac</VERB> de <VERB>ode</VERB> est par exemple une fonction Scilab, dont la syntaxe est impos�e, ou le nom d'une subroutine Fortran ou C
245
(cha�ne de caract�res) ou une liste.
248
Si <VERB>jac</VERB> est une fonction Scilab sa syntaxe doit �tre :
254
o� <VERB>t</VERB> est un scalaire (le temps) et <VERB>y</VERB> un vecteur (l'�tat).
255
La matrice <VERB>J</VERB> doit renvoyer df/dx i.e.
256
<VERB>J(k,i) = dfk /dxi</VERB> avec <VERB>fk</VERB> = k-i�me composante de f.
259
Si <VERB>f</VERB> est une cha�ne de caract�res, elle d�signe le nom d'une subroutine Fortran
260
ou C. Cette routine doit avoir la liste d'appel suivante :
261
<VERB>jac(n,t,y,ml,mu,J,nrpd)</VERB>. Dans la plupart des cas il n'est pas n�cessaire d'utiliser <VERB>ml</VERB>,
262
<VERB>mu</VERB> et <VERB>nrpd</VERB> (voir les exemples dans
263
<VERB>SCIDIR/routines/default/Ex-ode.f</VERB>).
266
Si <VERB>jac</VERB> est une liste, les m�mes conventions que pour <VERB>f</VERB> s'appliquent.
269
Les arguments optionnels <VERB>w</VERB> et <VERB>iw</VERB> sont
270
des vecteurs permettant de red�marrer l'int�gration au point o� elle s'�tait arr�t�e � la sortie de ode.
273
Plus d'options peuvent �tre pass�es aux solveurs d'ODEPACK en utilisant la variable
274
<VERB>%ODEOPTIONS</VERB>. Voir le help de odeoptions.
278
// EDO � une dimension
279
// dy/dt=y^2-y sin(t)+cos(t), y(0)=0
280
deff("[ydot]=f(t,y)","ydot=y^2-y*sin(t)+cos(t)")
281
y0=0;t0=0;t=0:0.1:%pi;
284
// Simulation de dx/dt = A x(t) + B u(t) avec u(t)=sin(omega*t),
286
// la solution x(t) est d�sir�e en t=0.1, 0.2, 0.5 ,1.
287
// A et u sont pass�es dans une liste
288
// et B et omega sont des variables globales
289
deff("[xdot]=linear(t,x,A,u)","xdot=A*x+B*u(t)")
290
deff("[ut]=u(t)","ut=sin(omega*t)")
291
A=[1 1;0 2];B=[1;1];omega=5;
292
ode([1;0],0,[0.1,0.2,0.5,1],list(linear,A,u))
295
// Equation diff�rentielle de Ricatti
296
// Xdot=A'*X + X*A - X'*B*X + C , X(0)=Identit�
297
// Solution en t=[1,2]
298
deff("[Xdot]=ric(t,X)","Xdot=A''*X+X*A-X''*B*X+C")
299
A=[1,1;0,2]; B=[1,0;0,1]; C=[1,0;0,1];
301
X=ode(eye(A),0,t,ric)
305
deff("[xdot]=f(t,x)","xdot=A*x");
307
ode("adams",eye(A),0,1,f)
308
// EDO raide, avec la jacobienne fournie
310
deff("[xdot]=f(t,x)","xdot=A*x");
311
deff("[J]=Jacobian(t,y)","J=A")
312
ode("stiff",[0;1],0,1,f,Jacobian)
315
<SEE_ALSO_ITEM> <LINK>ode_discrete</LINK> </SEE_ALSO_ITEM>
316
<SEE_ALSO_ITEM> <LINK>ode_root</LINK> </SEE_ALSO_ITEM>
317
<SEE_ALSO_ITEM> <LINK>dassl</LINK> </SEE_ALSO_ITEM>
318
<SEE_ALSO_ITEM> <LINK>impl</LINK> </SEE_ALSO_ITEM>
319
<SEE_ALSO_ITEM> <LINK>odedc</LINK> </SEE_ALSO_ITEM>
320
<SEE_ALSO_ITEM> <LINK>odeoptions</LINK> </SEE_ALSO_ITEM>
321
<SEE_ALSO_ITEM> <LINK>csim</LINK> </SEE_ALSO_ITEM>
322
<SEE_ALSO_ITEM> <LINK>ltitr</LINK> </SEE_ALSO_ITEM>
323
<SEE_ALSO_ITEM> <LINK>rtitr</LINK> </SEE_ALSO_ITEM>
327
<AUTHORS_ITEM label='Alan C. Hindmarsh'>, mathematics and statistics division, l-316
328
livermore, ca 94550.19</AUTHORS_ITEM>
331
<SP>Alan C. Hindmarsh, lsode and lsodi, two new initial value
332
ordinary differential equation solvers,
333
acm-signum newsletter, vol. 15, no. 4 (1980), pp. 10-11.</SP>
337
<SP>Les sous programmes associ�s se trouvent dans le repertoire routines/integ: