1 % ce script demo_trace_systeme_mecanique calcule les
\r
2 % solutions du système à deux degrés de liberté régi par le système :
\r
3 % x1''(t)+(k1+k2)x1-k2x2+c1x'1+d1(x'1)^3=f1
\r
4 % x2''(t)-k2x1+(k2+k3)x2+c2x'2+d2(x'2)^3=f2
\r
5 % déterminée par les schémas d'Euler implicite et de Runge Kutta 4.
\r
8 % * les paramètres d'entrée sont :
\r
9 % k : le vecteur contenant k1, k2 et k3,
\r
10 % c : le vecteur contenant c1 et c2,
\r
11 % d : le vecteur contenant d1, d2,
\r
12 % y0 : le vecteur contenant les conditions initiales (x1(0), x1'(0), x2(0), x2'(0))
\r
13 % fcn1 : chaine de caractères (de type 'f1(t)') représentant la fonction f1,
\r
14 % fcn2 : chaine de caractères (de type 'f2(t)') représentant la fonction f2,
\r
15 % N : un entier non nul,
\r
16 % T : la borne supérieur de l'intervalle d'étude.
\r
18 % * le script affiche les approximation de x1, x1', x2 et x2' sur [0,T].
\r
21 %nombre de points pour l'affichage défini par ngra
\r
24 % entree des paramètres
\r
25 k=input('entrez le vecteur [k1,k2,k3] : ');
\r
26 c=input('entrez le vecteur [c1,c2]: ');
\r
27 d=input('entrez le vecteur [d1,d2]: ');
\r
28 y0=input('entrez le vecteur des conditions initiales [x1(0),x1''(0),x2(0),x2''(0)]: ');
\r
29 fcn1=input('entrez la fonction f1 sous la forme ''f1(t)'': ');
\r
30 fcn2=input('entrez la fonction f2 sous la forme ''f2(t)'': ');
\r
31 N=input('entrez le nombre de points de discretisation : ');
\r
32 T=input('entrez T : ');
\r
35 % définition de la fonction F telle que le système soit équivalent à Y'(t)=F(t,Y(t)) dans R^4.
\r
36 % F est defini en fonction de t et de y, vecteur à 4 composantes.
\r
38 k(1)+k(2) c(1) -k(2) 0;
\r
40 -k(2) 0 k(2)+k(3) c(2)];
\r
41 H='-[0;d(1)*(y(2))^3;0;d(2)*(y(4))^3]';
\r
42 G=['[0; ',fcn1,';','0;',fcn2,']'];
\r
43 fcn=[H,'+',G,'+A*y'];
\r
46 % calcul de la solution par Euler explicite.
\r
47 Yeuler=zeros(4,N+1);
\r
53 auxiY=auxiY+h*eval(fcn);
\r
54 Yeuler(:,i+1)=auxiY;
\r
57 % calcul de la solution par Runge Kutta.
\r
58 Yrungekutta=zeros(4,N+1);
\r
59 Yrungekutta(:,1)=y0';
\r
73 auxiY=auxiY+(k1+2*k2+2*k3+k4)/6;
\r
74 Yrungekutta(:,i+1)=auxiY;
\r
78 % préparation des vecteurs de tracé.
\r
82 yrungekutta=Yrungekutta;
\r
85 yeuler=[Yeuler(:,1:p:N+1) Yeuler(:,N+1)];
\r
86 yrungekutta=[Yrungekutta(:,1:p:N+1) Yrungekutta(:,N+1)];
\r
94 plot(x,yeuler(1,:),x,yeuler(3,:),x,yrungekutta(1,:),x,yrungekutta(3,:),[0 T],[0 0],'k');
\r
95 legend('x1 par Euler','x2 par Euler','x1 par RK4','x2 par RK4',0);
\r
97 plot(x,yeuler(2,:),x,yeuler(4,:),x,yrungekutta(2,:),x,yrungekutta(4,:),[0 T],[0 0],'k');
\r
98 legend('x1'' par Euler','x2'' par Euler','x1'' par RK4','x2'' par RK4',0);
\r