-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQuestion_2.asv
107 lines (92 loc) · 3.34 KB
/
Question_2.asv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
% Question 2
% Initialisation des variables importantes
k = 0.83e-6; % coéfficient de friction
g = 32.17; % accélération gravitaionelle
m = 0.001781163; % masse de la flèche
nbpas = 45;
h = 0.15; % longueur du pas de temps
t0 = 0;
y0 = [0, 200]; % conditions initiales
% Résolution de l'équation avec euler explicite et Runge-Kutta ordre 4
[t1,y1] = eulerexpl('eqndiff',t0,y0,h,nbpas);
[t2,y2] = ptmilieu('eqndiff',t0,y0,h,nbpas);
[t3,y3] = eulmod('eqndiff',t0,y0,h,nbpas);
[t4,y4] = rk4('eqndiff',t0,y0,h,nbpas);
% Graphique de différentes approximations superposés avec la solution
% analytique
clf reset;
hold on
plot (t1,y1(:,1), 'x'); % Euleur explicite
%plot (t2,y2(:,1), 'o' ); % Point milieu (Runge-Kutta ordre 2)
%plot (t3,y3(:,1), '-ro'); % Euler Modifie (Runge-Kutta ordre 2)
plot (t4,y4(:,1), '-.b' ); % Runge-Kutta ordre 4
hold off;
HAUTEUR_MAX_EULER_EXPLICITE = y1(1,1);
HAUTEUR_MAX_EULER_MODIFIE = y2(1,1);
HAUTEUR_MAX_POINT_MILIEU = y3(1,1);
HAUTEUR_MAX_RUNGE_KUTTA_4 = y4(1,1);
for n=1:1:30
if y1(n+1,1) > HAUTEUR_MAX_EULER_EXPLICITE % HAUTEUR_MAX_EULER_EXPLICITE
HAUTEUR_MAX_EULER_EXPLICITE = y1(n+1,1);
ELEMENT_EULER_EXPLICITE = n+1;
end
if y2(n+1,1) > HAUTEUR_MAX_EULER_MODIFIE % HAUTEUR_MAX_EULER_MODIFIE
HAUTEUR_MAX_EULER_MODIFIE = y2(n+1,1);
ELEMENT_EULER_MODIFIE = n+1;
end
if y3(n+1,1) > HAUTEUR_MAX_POINT_MILIEU % HAUTEUR_MAX_POINT_MILIEU
HAUTEUR_MAX_POINT_MILIEU = y3(n+1,1);
ELEMENT_POINT_MILIEU = n+1;
end
if y4(n+1,1) > HAUTEUR_MAX_RUNGE_KUTTA_4 % HAUTEUR_MAX_RUNGE_KUTTA
HAUTEUR_MAX_RUNGE_KUTTA_4 = y4(n+1,1);
ELEMENT_RUNGE_KUTTA_4 = n+1;
end
end
TEMPS_HAUTEUR_MAX_EXPLICITE = t0;
TEMPS_HAUTEUR_MAX_MODIFIE = t0;
TEMPS_HAUTEUR_MAX_MILIEU = t0;
TEMPS_HAUTEUR_MAX_KUTTA_4 = t0;
for ii=1:1:ELEMENT_EULER_EXPLICITE - 1
TEMPS_HAUTEUR_MAX_EXPLICITE = TEMPS_HAUTEUR_MAX_EXPLICITE + 0.15;
end
for ii=1:1:ELEMENT_EULER_MODIFIE - 1
TEMPS_HAUTEUR_MAX_MODIFIE = TEMPS_HAUTEUR_MAX_MODIFIE + 0.15;
end
for ii=1:1:ELEMENT_POINT_MILIEU - 1
TEMPS_HAUTEUR_MAX_MODIFIE = TEMPS_HAUTEUR_MAX_MODIFIE + 0.15;
end
for ii=1:1:ELEMENT_RUNGE_KUTTA_4 - 1
TEMPS_HAUTEUR_MAX_KUTTA_4 = TEMPS_HAUTEUR_MAX_KUTTA_4 + 0.15;
end
SEUIL = 10;
POSITION_EXPLICITE = 2;
POSITION_MODIFIE = 2;
POSITION_MILIEU = 2;
POSITION_KUTTA_4 = 2;
for jj=2:1:nbpas
if y1(POSITION_EXPLICITE, 1) > SEUIL % HAUTEUR_MAX_EULER_EXPLICITE
POSITION_EXPLICITE = POSITION_EXPLICITE + 1;
end
if y2(POSITION_MODIFIE, 1) > SEUIL % HAUTEUR_MAX_EULER_MODIFIE
POSITION_MODIFIE = POSITION_MODIFIE + 1;
end
if y3(POSITION_MILIEU, 1) > SEUIL % HAUTEUR_MAX_POINT_MILIEU
POSITION_MILIEU = POSITION_MILIEU + 1;
end
if y4(POSITION_KUTTA_4, 1) > SEUIL % HAUTEUR_MAX_RUNGE_KUTTA
POSITION_KUTTA_4 = POSITION_KUTTA_4 + 1;
end
end
VITESSE_EXPLICITE = y1(POSITION_EXPLICITE,2);
VITESSE_MODIFIE = y2(POSITION_MODIFIE,2);
VITESSE_MILIEU = y3(position,2);
VITESSE_KUTTA_4 = y4(position,2);
ACCELERATION = (-k.*abs(y1(:,2)).*y1(:,2) - m.*g)./m;
%clf reset;
%hold on
%plot (t,ACCELERATION, 'x'); % Euleur explicite
%plot (t,y2, 'o' ); % Point milieu (Runge-Kutta ordre 2)
%plot (t,y3, '-ro'); % Euler Modifie (Runge-Kutta ordre 2)
%plot (t,y4, '-.b' ); % Runge-Kutta ordre 4
%hold off;