Sie sind auf Seite 1von 9

La mthode de

RUNGE-KUTTA
Adolfo Foriero, ing., Ph.D.

Dans le cadre de la comprhension des boucles for et while


Un problme avec valeur initiale tel que

dy ( t )
= f t , y ( t ) dans a t b, avec y ( a ) = c
dt

peut tre rsolu avec lapproche de Runge-Kutta!


La mthode de Runge-Kutta dordre quatre
est une des formules les plus populaires.
L approximation peut scrire sous la forme
1
yk +1 = yk + ( k1 + 2k2 + 2k3 + k4 )
6
avec les dfinitions suivantes
k1 = h f ( tk , yk )
h k
k 2 = h f t k + , yk + 1
2 2
h k
k3 = h f tk + , yk + 2
2 2
k 4 = h f ( t k + h, y k + k 3 )
La mthode de Runge-Kutta ne ncessite aucun besoin de formuler la
drive pour le calcul de y(t) mais requiert que la fonction f[tk, y(tk)] soit
value chaque point quatre fois.
Conception du programme pour la simulation
numrique

Algorithme de base:

1. Dfinir les valeurs initiales des variables impliques dans les calculs.
2. Calculer la solution du premier point de lintervalle.
3. Calculer subsquemment la solution aux autres points.
4. Dfinir un critre de convergence pour arrter lalgorithme.
5. Sortir un tableau de valeurs et un graphique dcrivant la solution.
Organigramme MATLAB pour la
mthode de Runge-Kutta du
quatrime ordre
Runge_Kutta4
Dfinition de
lquation rsoudre
h=(b-a)/(n-1)
t(1)=a, y(1)=y0

Entre des donnes


a, b, c, n, y(a)
Calcul de
K1 ,K2,K3,K4

vocation de la
fonction Assignation
Runge_Kutta4 t t+h
y = y+(K1 + K2 + K3 + K4 )/6

Sortie des rsultats o


graphiques Non n ?
n Points

Oui

Retour
function [t,y]=Runge_Kutta4(a,b,y0,n) function y_prime=func(tt,yy) function [t,y]=Runge2_Kutta4(a,b,y0,n)
% % %
t=zeros(1,n); y=zeros(1,n); % initialisation y_prime=yy-tt^2+1; t=zeros(1,n); y=zeros(1,n); % initialisation
h=(b-a)/(n-1); h=(b-a)/(n-1);
t(1)=a; y(1)=y0; t(1)=a; y(1)=y0;
% j=1;
for j=1:n-1 %
% while (j <= n-1)
k1=h*func(t(j),y(j)); %
k2=h*func(t(j)+h/2,y(j)+k1/2); k1=h*func(t(j),y(j));
k3=h*func(t(j)+h/2,y(j)+k2/2); k2=h*func(t(j)+h/2,y(j)+k1/2);
k4=h*func(t(j)+h,y(j)+k3); k3=h*func(t(j)+h/2,y(j)+k2/2);
y(j+1)=y(j)+(1/6)*(k1+2*k2+2*k3+k4); k4=h*func(t(j)+h,y(j)+k3);
t(j+1)=t(j)+h; y(j+1)=y(j)+(1/6)*(k1+2*k2+2*k3+k4);
% t(j+1)=t(j)+h;
end
j=j+1;
%
%
end
plot(t,y,'-rs');
%
title('La solution');
plot(t,y,'-rs');
xlabel('Temps');
title('La solution');
ylabel('Valeur de la fonction');
xlabel('Temps');
ylabel('Valeur de la fonction');
Erreur Totale
1.14
Erreur de troncature
Erreur d'arrondissement
1.12
Erreur totale

1.1

1.08
Erreur

1.06

1.04

1.02

1
-3 -2 -1
10 10 10
log(taille de l'incrment)

pas de temps idal

Das könnte Ihnen auch gefallen