Séance 9 - Exercice 2
2 participants
Page 1 sur 1
Séance 9 - Exercice 2
Voilà l'exo 2 de la scéance 9
- Code:
clc;
clear;
%choix de N (on va de 0à pi en 100 étapes)
N=100;
%choix de C1 et C2
C1=1;
C2=-1;
%Remplissage du vecteur x
a=0;
b=pi;
h=(b-a)/N;% h est le pas d'intégration
x=0:h:pi;
%remplissage des premières valeurs de u1 et u2 avec les cond à l'origine
u1(1)=1;
u2(1)=C1;
% Euler
for n=1:N
u1(n+1)=h*u2(n)+u1(n);
u2(n+1)=u2(n)+h*(-cos(x(n))*u2(n)*u1(n)+sin(x(n)*x(n)));
end
plot (x,u1,'r')
grid on
hold on
T1=u1(N)-2;
%remplissage des premières valeurs de u1 et u2 avec les cond à l'origine
u1(1)=1;
u2(1)=C2;
% Euler
for n=1:N
u1(n+1)=h*u2(n)+u1(n);
u2(n+1)=u2(n)+h*(-cos(x(n))*u2(n)*u1(n)+sin(x(n)*x(n)));
end
plot(x,u1,'g')
hold on
T2=u1(N)-2;
%Boucle for de l'étape 3 (on fixe le nbre d'itération)
Amax=100; % Amax délibérément trop grand
for a=1:Amax
%remplissage des premières valeurs de u1 et u2 avec les cond à l'origine
Cmoy=C1-((C1-C2)/(T1-T2))*T1;
u1(1)=1;
u2(1)=Cmoy;
% Euler
for n=1:N
u1(n+1)=h*u2(n)+u1(n);
u2(n+1)=u2(n)+h*(-cos(x(n))*u2(n)*u1(n)+sin(x(n)*x(n)));
end
T3=u1(N)-2;
if (T3==0)
break
end
C1=C2;
C2=Cmoy;
T1=T2;
T2=T3;
end
hold on
plot (x,u1,'k')
u1(N)%pour afficher la valeur finale de u1 et vérifier que c'est bien 2
Dernière édition par nartois le Mar 13 Mai - 13:30, édité 1 fois
nartois- Enzyme
- Nombre de messages : 14
Date d'inscription : 03/10/2007
Re: Séance 9 - Exercice 2
cool! Merci beaucoup!!!
Noémie- Enzyme
- Nombre de messages : 12
Date d'inscription : 03/10/2007
Re: Séance 9 - Exercice 2
Enfait j'ai pas l'impression que tu as remplacé y(x) par y'(x)*y(x) pcq sinon dans ton euler tu devrais avoir u2(n+1)=u2(n)+h*(-cos(x(n))*u2(n)*u1(n)+sin(x(n)*x(n))). J'me trompe?
Noémie- Enzyme
- Nombre de messages : 12
Date d'inscription : 03/10/2007
Re: Séance 9 - Exercice 2
Juste !
Voilà, j'ai corrigé ce que tu m'as dit et j'ai remplacé la correction que j'avais proposée par une correction unique (plus de while). En fait, le mieux, c'est de limiter la dernière grande boucle for par un par un if - break (en l'occurrence, if (T3-2) = 0 on sort de la boucle et on va pas jusque Amax chosit délibérément trop grand. Si tu regarde dans le workspace tu verras qu'on est sorti de la boucle après seulement 8 itérations).
C'est mieux de limiter le for comme ça que par un Amax choisit au hasard ou par tatonnement...
Voilà, j'ai corrigé ce que tu m'as dit et j'ai remplacé la correction que j'avais proposée par une correction unique (plus de while). En fait, le mieux, c'est de limiter la dernière grande boucle for par un par un if - break (en l'occurrence, if (T3-2) = 0 on sort de la boucle et on va pas jusque Amax chosit délibérément trop grand. Si tu regarde dans le workspace tu verras qu'on est sorti de la boucle après seulement 8 itérations).
C'est mieux de limiter le for comme ça que par un Amax choisit au hasard ou par tatonnement...
nartois- Enzyme
- Nombre de messages : 14
Date d'inscription : 03/10/2007
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|