Programme de résolution d'ODE 1er ordre par Euler explicite
5 participants
Page 1 sur 1
Programme de résolution d'ODE 1er ordre par Euler explicite
Ceci correspond à la séance 4 ex 1 de ce 27/2/08
========= dans le fichier yprime.m ====================
function yp=yprime(x,y)
% fonction definie au TP seance 4 ex 1 ****
%
%
yp = 1- (y/(2+sin(x)));
========= fin du fichier yprime.m ====================
========= dans le fichier seance4_ex1.m ====================
function [x,y]=seance4_ex1(h)
% Seance 4 exercice 1
% methode de Euler explicite pour ODE / probleme de Cauchy
%
% h est le pas d'intégration
%h=0.5; %si je change h ce qui suit change
% on définit x, un vecteur qui ciontient toutes les valeurs sur la plage
% dans la quelle on cherche à résoudre l'équation
x=0:h:20;
% on crée un vecteur y qui contiendra les solutions (la fonction) et qui
% est défini avec une taille semblable au vecteur x, et toutes les valeurs
% sont nulles
y=zeros(size(x));
% on definit la CI condition initiale
y(1)=0;
% on effectue ici le calcul des valeurs de y par la methode Euler explicite
for n = 2 : 20/h % on commence avec un indice = 2 car l'indice en matlab ne peut jamais < 1
y(n)= y(n-1)+ yprime(x(n-1),y(n-1))*h;
end
%plot(x,y,'-*')
========================================
En ligne de commande (command window) on peut par exemple taper
seance4_ex1(0.5)
[x,y] = seance4_ex1(0.5) % pour avoir y et y utilisables
for h = [2 1 0.5 0.1 0.05 0.001]
[x,y] = seance4_ex1(0.5) % pour avoir y et y utilisables
plot(x,y,'*')
hold on
end
========= dans le fichier yprime.m ====================
function yp=yprime(x,y)
% fonction definie au TP seance 4 ex 1 ****
%
%
yp = 1- (y/(2+sin(x)));
========= fin du fichier yprime.m ====================
========= dans le fichier seance4_ex1.m ====================
function [x,y]=seance4_ex1(h)
% Seance 4 exercice 1
% methode de Euler explicite pour ODE / probleme de Cauchy
%
% h est le pas d'intégration
%h=0.5; %si je change h ce qui suit change
% on définit x, un vecteur qui ciontient toutes les valeurs sur la plage
% dans la quelle on cherche à résoudre l'équation
x=0:h:20;
% on crée un vecteur y qui contiendra les solutions (la fonction) et qui
% est défini avec une taille semblable au vecteur x, et toutes les valeurs
% sont nulles
y=zeros(size(x));
% on definit la CI condition initiale
y(1)=0;
% on effectue ici le calcul des valeurs de y par la methode Euler explicite
for n = 2 : 20/h % on commence avec un indice = 2 car l'indice en matlab ne peut jamais < 1
y(n)= y(n-1)+ yprime(x(n-1),y(n-1))*h;
end
%plot(x,y,'-*')
========================================
En ligne de commande (command window) on peut par exemple taper
seance4_ex1(0.5)
[x,y] = seance4_ex1(0.5) % pour avoir y et y utilisables
for h = [2 1 0.5 0.1 0.05 0.001]
[x,y] = seance4_ex1(0.5) % pour avoir y et y utilisables
plot(x,y,'*')
hold on
end
marieVS- Enzyme
- Nombre de messages : 18
Age : 36
Localisation : woluwé!georges henry
Date d'inscription : 18/10/2007
Re: Programme de résolution d'ODE 1er ordre par Euler explicite
moi j'avais un truc plus simple il me semble...enfin ptetre que c'est notre assistante qui est plus pragmatique ^^
dans l'editeur:
%Euler explicite
h=0.5 % ou une autre valeur pour le pas d'intégration
N=20/h % en fait c'est b-a/h mais b=20 et a=0
f=inline('1-y/(2+(sin(x)))'); %la fonction donnée
x(1)=0; y(1)=0; %la C.I.
for n=2:N %la boucle pour remplir x(n) et y(n)
y(n)=y(n-1)+h*f(x(n-1),y(n-1));
x(n)=x(n-1)+h;
end
plot (x,y)
voila F5, nommer le bazar et hop ça marche
j'ai fini euler implicite mais ça je peux pas vous le retapper de mémoire, faut juste faire très attention à bien indiquer TOUT ce qui n'est pas un chiffre dans les fonctions autres que f que vous devez faire pour l'algorithme de newton (genre g(h,y,z) même si y et h sont des constantes dans cette partie du calcul)
dans l'editeur:
%Euler explicite
h=0.5 % ou une autre valeur pour le pas d'intégration
N=20/h % en fait c'est b-a/h mais b=20 et a=0
f=inline('1-y/(2+(sin(x)))'); %la fonction donnée
x(1)=0; y(1)=0; %la C.I.
for n=2:N %la boucle pour remplir x(n) et y(n)
y(n)=y(n-1)+h*f(x(n-1),y(n-1));
x(n)=x(n-1)+h;
end
plot (x,y)
voila F5, nommer le bazar et hop ça marche
j'ai fini euler implicite mais ça je peux pas vous le retapper de mémoire, faut juste faire très attention à bien indiquer TOUT ce qui n'est pas un chiffre dans les fonctions autres que f que vous devez faire pour l'algorithme de newton (genre g(h,y,z) même si y et h sont des constantes dans cette partie du calcul)
Re: Programme de résolution d'ODE 1er ordre par Euler explicite
Pq vous mettez que vos conditions initiales sont y(1)=0 alors que dans l'énoncé c'est y(0)=0 ? (idem pour x ...)
Arnaud Goessens- Virus
- Nombre de messages : 124
Age : 35
Date d'inscription : 22/09/2007
Re: Programme de résolution d'ODE 1er ordre par Euler explicite
le truc c'est que matlab il aime pas les indice nul, genre x(0), y(0) ca lui plait pas du tout, ca le rend triste et mélancolique et alors il pleure et c'est pas chouette pour lui... du coup on dit pas y(0)=0 mais y(1)=0 comme condition a l'origie, pour pas contrarier ce chèr matlab! donc voila, il faut toujours s'aranger pour que la valeur de l'indice soit plus grande que zéro! c'est pour ca que parfois, quand on utilise (par exemple) y(n-1) dans une formule, il faut commencer la boucle for à n=2 pour ne pas avoir d'indice nul!
j'espere que j'ss +- clair... et bonne continuation!
j'espere que j'ss +- clair... et bonne continuation!
Nemo- Mitochondrie
- Nombre de messages : 60
Age : 36
Date d'inscription : 30/09/2007
Re: Programme de résolution d'ODE 1er ordre par Euler explicite
okok merci! (moi perso jprefer utiliser y(n+1) )
Tant que j'y suis, on pourrait m'expliquer
merci!
ps: c'est Euler implicite ou explicite qu'il ne faut pas connaitre?
Tant que j'y suis, on pourrait m'expliquer
j'ai fini euler implicite mais ça je peux pas vous le retapper de mémoire, faut juste faire très attention à bien indiquer TOUT ce qui n'est pas un chiffre dans les fonctions autres que f que vous devez faire pour l'algorithme de newton
merci!
ps: c'est Euler implicite ou explicite qu'il ne faut pas connaitre?
Arnaud Goessens- Virus
- Nombre de messages : 124
Age : 35
Date d'inscription : 22/09/2007
Re: Programme de résolution d'ODE 1er ordre par Euler explicite
oué faut connaitre les 2 mais dans la théorie, il est marqué que la méthode Euler implicite est meilleur parce que l'explicite engendre des problème de stabilité dans certains cas
Julien- Enzyme
- Nombre de messages : 14
Age : 35
Localisation : Horrues
Date d'inscription : 01/10/2007
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|