Documente Academic
Documente Profesional
Documente Cultură
f=@(t,y) 3+t-y;
clear t% Clears old time steps
clear y% y values from previous runs
a=0; % Initial time
b=1; % Final time
N=10; % Number of time steps
y0=0; % Initial value y(a)
h=(b-a)/N; % Time step
t(1)=a;
y(1)=y0;
for n=1:N % For loop, sets next t,y values
t(n+1)=t(n)+h;
y(n+1)=y(n)+h*f(t(n),y(n)); % Calls the function f(t,y)=dy/dt
end
plot(t,y)
title(['Euler Method using N=',num2str(N),'steps, dy/dt=3+t-y'])
% Include your own name
1.5
f
0.5
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
t
0.2
-0.2
-0.4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Les erreurs
ySym=dsolve('Dy=2*t-exp(-t)','y(0)=0','t')
ySym =
1/exp(t) + t^2 – 1
ySym=dsolve('D2y+3*y=4*cos(t)+exp(-t)','y(0)=1','Dy(0)=1','t')
ySym =
cos(3^(1/2)*t)*(cos(t + 3^(1/2)*t) + cos(3^(1/2)*t - t) - (3^(1/2)*cos(t +
3^(1/2)*t))/3 + cos(3^(1/2)*t)/(4*exp(t)) + (3^(1/2)*cos(3^(1/2)*t - t))/3 +
(3^(1/2)*sin(3^(1/2)*t))/(12*exp(t))) - (5*cos(3^(1/2)*t))/4 +
(5*3^(1/2)*sin(3^(1/2)*t))/12 - sin(3^(1/2)*t)*(sin(t - 3^(1/2)*t) - sin(t + 3^(1/2)*t)
+ (3^(1/2)*sin(t + 3^(1/2)*t))/3 + (3^(1/2)*sin(t - 3^(1/2)*t))/3 -
sin(3^(1/2)*t)/(4*exp(t)) + (3^(1/2)*cos(3^(1/2)*t))/(12*exp(t)))
Remarque :
l’avantage de la méthode d’Euler, tire son origine du fait qu’elle réclame
uniquement l’évaluation de la fonction 𝑓 pour chaque pas d’intégration
*- méthode Runge–Kutta
elles génèrent des solutions numériques plus proches des solutions analytiques
Solution :
clear all ; clc
h=0.1;
b=2;
n=1;
t(1)=0;y(1)=0.5;
f=@(t,y) 3*t-y;
while t<10
k1=h*f(t(n),y(n));
k2=h*f(t(n)+h/2,y(n)+k1/2);
k3=h*f(t(n)+h/2,y(n)+k2/2);
k4=h*f(t(n)+h,y(n)+k3);
y(n+1)=y(n)+(k1+2*k2+2*k3+k4)/6;
t(n+1)=t(n)+h;
n=n+1;
end
y
plot(t,y)
30
20
y
10
0
0 2 4 6 8 10 12
t
Changement de f :
clear all ; clc
h=0.1;
b=2;
n=1;
t(1)=0;y(1)=0.5;
f=@(t,y) 3+t-y;
while t<10
k1=h*f(t(n),y(n));
k2=h*f(t(n)+h/2,y(n)+k1/2);
k3=h*f(t(n)+h/2,y(n)+k2/2);
k4=h*f(t(n)+h,y(n)+k3);
y(n+1)=y(n)+(k1+2*k2+2*k3+k4)/6;
t(n+1)=t(n)+h;
n=n+1;
end
y
plot(t,y)
donc
quand t(1)=0 ;y(1)=0.5
14
12
10
0
0 2 4 6 8 10 12
12
10
0
0 2 4 6 8 10 12
100
80
60
40
20
-20
0 2 4 6 8 10 12
Remarque :
Les méthodes de type Runge-Kutta permettent d’obtenir une plus grande précision
fonction
dy=g2(t,y)
dy(1)=3+t-y;
La solution
clear all; clc;
[t,y]=ode23('g2',[0 1],0);
plot(t,y)
2.5
1.5
0.5
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
fonction
dy=g2(t,y)
dy(1)=2*t-exp(-t);
0.5
0.4
0.3
0.2
0.1
-0.1
-0.2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
a=0;b=10;n=200;h=(b-a)/n;
tn=a:h:b;
y=[1;1];
eqs=@(tn,y)[y(2);-3*y(1)+4*cos(tn)+exp(-tn)];
opts=odeset('Stats','on','RelTol',1e-3);
[tn,ysol]=ode23(eqs,[tn(1);tn(end)],y,opts);%SOLVEURode23
Remarque
la résolution d’équations différentielles. Les plus utilisés sont ode23, qui est
basé sur la méthode de Runge-Kutta explicite à un pas
B-ODE dure deuxième ordre
Solution
program
figure('color',[1 1 1]);
plot(tn,ysol(:,1),'o','LineWidth',1);hold on;
plot(tn,double(subs(ySym,t,tn)),'+','LineWidth',1)
xlabel('t','FontSize',12);ylabel('y(t)','FontSize',12);
ih1=legend('SOLUTION NUMERIQUE','SOLUTION ANALYTIQUE');
set(ih1,'Interpreter','none','Location','NorthWest','Box','off','Color','none')
3
-1
-2
-3
-4
0 1 2 3 4 5 6 7 8 9 10
Conclusion :
Les performances d’une méthode sont évaluées en comparant : — La rapidité nécessaire à effectuer une
itération unique. Cette propriété dépend du nombre d’évaluations de la fonction f nécessaire à
compléter l’itération. — Le nombre d’itérations nécessaires pour obtenir une précision donnée. Des
méthodes d’ordres différents ont des erreurs qui décroissent plus ou moins vite avec la taille du pas
d’intégration.