1 function Y=resout_theta_methode(theta,N,T,y0,fcn,nmax,epsilon)
\r
5 % resout_theta_methode : résolution d'une équation différentielle par la theta-méthode.
\r
7 % *********************************************************
\r
9 % Y=resout_theta_methode(theta,N,T,y0,fcn,nmax,epsilon) calcule les valeurs aux instants 0,h,2h,...,Nh=T par
\r
11 % pour l'équation différentielle y't)=f(t,y(t)) sur [0,T] et y(0)=y0.
\r
12 % A chaque itération, l'équation y_{n+1}=y_n+theta hf(t_{n+1},y_{n+1})+(1-theta)hf(t_{n},y_{n})
\r
13 % est résolue par la méthode de Newton
\r
14 % où la valeur initiale est choisie égale à y_n.
\r
16 % La dérivée partielle df/dy est calculée en symbolique.
\r
18 % * variables d'entrées :
\r
19 % theta est un réel dans [0,1] ;
\r
20 % N : nombre de valeurs calculées ;
\r
21 % T : borne supérieure de l'intervalle ;
\r
22 % y0 : valeur de y à t=0 ;
\r
23 % fcn : chaine de caractères (de type 'f(t,y)') représentant la fonction f
\r
24 % epsilon : précision souhaitée (pour la méthode de Newton)
\r
25 % nmax : nombre maximal d'itérations (pour la méthode de Newton)
\r
27 % * variables de sortie :
\r
28 % Y : valeurs calculée aux instants 0,h,2h,...,Nh=T.
\r
32 % ************ Fonctions auxiliaires utilisées ************
\r
36 % *********************************************************
\r
39 % Contrôles d'entrée
\r
41 % nombre d'arguments
\r
43 error('nombre d''arguments de la fonction incorrect');
\r
46 % Corps d'algorithme
\r
54 fcnp=char(fcnpsymb);
\r
59 auxidud=h*(1-theta)*eval(fcn);
\r
61 fx=-h*theta*eval(fcn)-auxidud;
\r
62 fxp=1-h*theta*eval(fcnp);
\r
71 fx=v-yapp-h*theta*eval(fcn)-auxidud;
\r
72 fxp=1-h*theta*eval(fcnp);
\r
74 test=~((fx==0)|(n>=nmax)|(abs(v-oldv)<=epsilon));
\r
78 error('attention, n>nmax pour la méthode de Newton : arrêt du programme');
\r