Runge-Kutta
3 participants
Page 1 sur 1
Runge-Kutta
Quelqu'un pourrait m'expliquer Runge-Kutta ( TP4 exercice 1)
Mirchiii d'avance beaucouuuup ! ! !
Et courage à tous!
Mirchiii d'avance beaucouuuup ! ! !
Et courage à tous!
Julie- Enzyme
- Nombre de messages : 23
Age : 36
Localisation : Rhôôôde St Genèèèèzzz
Date d'inscription : 24/10/2007
Re: Runge-Kutta
% HEUN
% y(n+1)=y(n) +0.5*h*(f(x(n),y(n)) + f(x(n+1),y(n+1)))
% or selon Euler explicite, y(n+1)=y(n)+h*f(x(n),y(n))
% énoncé: y'(x)=f(x,y)= 1-y/(2+sin(x))
%on va utiliser k1 et K2 pour que ce soit plus facile:
% k1=f(x(n),y(n))
% k2=f(x(n+1),y(n)+h*k1)
% y(n+1)=y(n)+0.5*h*(k1+k2)
f=inline('1-y/(2+sin(x))');
a=0;b=20;
y(1)=0;
h=0.5;
N=(b-a)/h;
x=a:h:b;
for n=2:N/h
x(n)=x(n-1)+ h;
k1=f(x(n-1),y(n-1));
k2=f(x(n),y(n-1)+h*k1);
y(n)=y(n-1)+0.5*h*(k1+k2);
end
plot(x,y,'g')
grid on; zoom on; hold on;
pour voir comment varie le graphique de la fonction, on change h, on change la couleur dans le plot et F5. on aura plusieurs courbes.
Pour ce qui est de tout rassembler dans une même figure, c'est méga chiant, il faut faire 2 fichiers de type fonction.m et taper un truc dans commandes.
mais mon programme chiant ne marche pas (me suis inspirée des réponses partielles de l'assistant o_O)
??? Error using ==> /
Matrix dimensions must agree
J'espère que tu comprendras avec ces notes...
% y(n+1)=y(n) +0.5*h*(f(x(n),y(n)) + f(x(n+1),y(n+1)))
% or selon Euler explicite, y(n+1)=y(n)+h*f(x(n),y(n))
% énoncé: y'(x)=f(x,y)= 1-y/(2+sin(x))
%on va utiliser k1 et K2 pour que ce soit plus facile:
% k1=f(x(n),y(n))
% k2=f(x(n+1),y(n)+h*k1)
% y(n+1)=y(n)+0.5*h*(k1+k2)
f=inline('1-y/(2+sin(x))');
a=0;b=20;
y(1)=0;
h=0.5;
N=(b-a)/h;
x=a:h:b;
for n=2:N/h
x(n)=x(n-1)+ h;
k1=f(x(n-1),y(n-1));
k2=f(x(n),y(n-1)+h*k1);
y(n)=y(n-1)+0.5*h*(k1+k2);
end
plot(x,y,'g')
grid on; zoom on; hold on;
pour voir comment varie le graphique de la fonction, on change h, on change la couleur dans le plot et F5. on aura plusieurs courbes.
Pour ce qui est de tout rassembler dans une même figure, c'est méga chiant, il faut faire 2 fichiers de type fonction.m et taper un truc dans commandes.
mais mon programme chiant ne marche pas (me suis inspirée des réponses partielles de l'assistant o_O)
??? Error using ==> /
Matrix dimensions must agree
J'espère que tu comprendras avec ces notes...
Re: Runge-Kutta
Pour faire plusieurs graph avec un pas d'intégration différent, il suffit de définir un vecteur qui contient les pas d'intégration différent:h=[0.1 0.01 0.5 0.005] par exemple.
faire une boucle for qui englobe l'algorithme : for i=1:4 où 4= nombre différents de pas d'intégration.
Ne pas oublier de remplacer h par h(i) dans le programme vu qu'il varie.
Et pour la couleur il faut faire un truc du style: couleur=['r' 'c' 'b' 'v' ] à définir au début du programme. Les différentes lettres sont les couleurs
et mettre plot (x,y,couleur(i)) et c'est dans la poche .... je sais pas si les gens auront compris.
faire une boucle for qui englobe l'algorithme : for i=1:4 où 4= nombre différents de pas d'intégration.
Ne pas oublier de remplacer h par h(i) dans le programme vu qu'il varie.
Et pour la couleur il faut faire un truc du style: couleur=['r' 'c' 'b' 'v' ] à définir au début du programme. Les différentes lettres sont les couleurs
et mettre plot (x,y,couleur(i)) et c'est dans la poche .... je sais pas si les gens auront compris.
Philippe- Mitochondrie
- Nombre de messages : 69
Age : 37
Localisation : Bruxelles
Date d'inscription : 28/10/2007
Re: Runge-Kutta
genre comme ça? mais j'arrive à un graphique tout bleu et en zoomant j'ai une succession de petits triangles
h=[0.1 0.01 0.5 0.005];
col=['g' 'r' 'b' 'v'];
for i=1:4
f=inline('1-y/(2+sin(x))');
a=0;b=20;
y(1)=0;
h=0.2;
N=(b-a)/h(i);
x=a:h(i):b;
for n=2:N/h(i)
x(n)=x(n-1)+ h(i);
k1=f(x(n-1),y(n-1));
k2=f(x(n),y(n-1)+h(i)*k1);
y(n)=y(n-1)+0.5*h(i)*(k1+k2);
end
end
plot(x,y,col(i))
grid on; zoom on; hold on;
h=[0.1 0.01 0.5 0.005];
col=['g' 'r' 'b' 'v'];
for i=1:4
f=inline('1-y/(2+sin(x))');
a=0;b=20;
y(1)=0;
h=0.2;
N=(b-a)/h(i);
x=a:h(i):b;
for n=2:N/h(i)
x(n)=x(n-1)+ h(i);
k1=f(x(n-1),y(n-1));
k2=f(x(n),y(n-1)+h(i)*k1);
y(n)=y(n-1)+0.5*h(i)*(k1+k2);
end
end
plot(x,y,col(i))
grid on; zoom on; hold on;
Re: Runge-Kutta
heu j'ai remanier le programme parce que y avait des choses bizarre comme par exemple: le plot doit se trouver dans la boucle sinon il ne fait qu'un seul graph.
et donc il va juste faire un graph avec le dernier i qui est =4 et dans col(4)=V et v enfait c est pour faire un graph avec des triangles, c est pas une couleur.
clc; clear
h=[0.1 0.01 0.5 0.005];
col=['g' 'r' 'b' 'v'];
f=inline('1-y/(2+sin(x))');
a=0;b=20;
y(1)=0;
x(1)=0;
for i=1:4
N=(b-a)/h(i);
for n=2:N/h(i)
x(n)=x(n-1)+ h(i);
k1=f(x(n-1),y(n-1));
k2=f(x(n),y(n-1)+h(i)*k1);
y(n)=y(n-1)+0.5*h(i)*(k1+k2);
end
plot(x,y,col(i))
grid on; zoom on; hold on;
end
et la ça marche impec ... mais c'est très lent à exécuter vu que tes pas d intégration sont très petit.
et donc il va juste faire un graph avec le dernier i qui est =4 et dans col(4)=V et v enfait c est pour faire un graph avec des triangles, c est pas une couleur.
clc; clear
h=[0.1 0.01 0.5 0.005];
col=['g' 'r' 'b' 'v'];
f=inline('1-y/(2+sin(x))');
a=0;b=20;
y(1)=0;
x(1)=0;
for i=1:4
N=(b-a)/h(i);
for n=2:N/h(i)
x(n)=x(n-1)+ h(i);
k1=f(x(n-1),y(n-1));
k2=f(x(n),y(n-1)+h(i)*k1);
y(n)=y(n-1)+0.5*h(i)*(k1+k2);
end
plot(x,y,col(i))
grid on; zoom on; hold on;
end
et la ça marche impec ... mais c'est très lent à exécuter vu que tes pas d intégration sont très petit.
Philippe- Mitochondrie
- Nombre de messages : 69
Age : 37
Localisation : Bruxelles
Date d'inscription : 28/10/2007
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|