-
Notifications
You must be signed in to change notification settings - Fork 0
/
Question_1.asv
52 lines (41 loc) · 1.45 KB
/
Question_1.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
% Question 1
% Initialisation des variables importantes
m = 100000; % population totale m
k = 2e-6;
nbpas = 30;
h = 1;
t0 = 0;
y0 = 1000;
% Résolution de l'équation avec euler explicite et Runge-Kutta ordre 4
[t1,y1] = eulerexpl('eqndiff',t0,y0,h,nbpas);
[t2,y2] = rk4('eqndiff',t0,y0,h,nbpas);
% Solution analytique
constante_1 = 1/1000 - 1/m;
constante_2 = exp(-k*m*t);
sol = constante_1*constante_2 + 1/m;
sol_analytique = 1./(sol);
%t= linspace(0,30, 1000);
% Graphique de différentes approximations superposés avec la solution
% analytique
%clf reset;
%hold on
%plot (t1,y1, 'x'); % Euleur explicite
%plot (t2,y2, 'o' ); % Runge-Kutta ordre 4
%plot (t,sol_analytique); % Solution analytique
%hold off;
% Calcul de l'erreur absolue
theorique = sol_analytique';
euler_explicite = y1;
runge_kutta_4 = y2;
therreur_absolue_explicite = abs(theorique - euler_explicite);
erreur_absolue_runge_kutta_4 = abs(theorique - runge_kutta_4);
erreur_relative_explicite = (erreur_absolue_explicite./theorique).*100;
erreur_relative_runge_kutta_4 = (erreur_absolue_runge_kutta_4./theorique).*100;
clf reset;
hold on
plot (t,erreur_relative_explicite, 'x'); % Euleur explicite
plot (t,erreur_relative_runge_kutta_4, 'o' ); % Runge-Kutta ordre 4
hold off;
% c) Même si euler explicite est plutôt précise, on remarque que
% l'approximation par Runge-Kutta ordre 4 passes beaucoup plus près de la
% courbe théorique que euler-explicite (les deux courbes se confondent).