ode23, 45, 113 ....
3 participants
Page 1 sur 1
ode23, 45, 113 ....
Quel ode devons nous utiliser pour la vérifications des problèmes de Cauchy ? 15s, 23, 23t, 45, 113, 23tb, 15i...
Et comment l'utilise t'on ? (avec quad et fzero j'ai aucun problème, mais là je cale sérieusement ).
Un exemple ça serait parfait ^^.
Et comment l'utilise t'on ? (avec quad et fzero j'ai aucun problème, mais là je cale sérieusement ).
Un exemple ça serait parfait ^^.
Re: ode23, 45, 113 ....
Tu utilises ode45 à la fin de ton programme
Tu inscris cela:
[T,Z]=ode45(@fun,[0],[-1]);
plot(T,Z,'r')
T=x
Z=y (si j'ai bien compris)
@fun: cela sert a appeler la fonction que j'ai appelé fun qui va résoudre le problème de cauchy
Donc tu crées un dossier (fun dans ce cas-ci) dans lequel tu écris dedans cela:
function cauchy=fun(x,y)
cauchy=(-5./y.^2+sin(x/5));
La 2eme partie dans la parenthèse c'est "l'évolution" de tes x (donc ton point de départ et d'arrivée, avec le pas, qui est le même que celui que tu as choisi pour représenter le graphe de tes solutions)
La 3eme partie de ta parenthèse c'est ta condition initiale (ici y(0)=-1)
Puis tu représentes le graphe de la solution trouvée par ode45 et tu la compare avec le tien!
voila j'espere que cela sera clair...
je te met le programme dans lequel je l'avais appliqué
Tu inscris cela:
[T,Z]=ode45(@fun,[0],[-1]);
plot(T,Z,'r')
T=x
Z=y (si j'ai bien compris)
@fun: cela sert a appeler la fonction que j'ai appelé fun qui va résoudre le problème de cauchy
Donc tu crées un dossier (fun dans ce cas-ci) dans lequel tu écris dedans cela:
function cauchy=fun(x,y)
cauchy=(-5./y.^2+sin(x/5));
La 2eme partie dans la parenthèse c'est "l'évolution" de tes x (donc ton point de départ et d'arrivée, avec le pas, qui est le même que celui que tu as choisi pour représenter le graphe de tes solutions)
La 3eme partie de ta parenthèse c'est ta condition initiale (ici y(0)=-1)
Puis tu représentes le graphe de la solution trouvée par ode45 et tu la compare avec le tien!
voila j'espere que cela sera clair...
je te met le programme dans lequel je l'avais appliqué
- Code:
clear;clc;clf;
a=0;
b=15;
N=50;
h=(b-a)/N;
x=a:h:b;
y(1)=-1;
f=inline('-5./y.^2+sin(x/5)','y','x');
for n=1:N
k1=f(y(n),x(n));
k2=f(y(n)+h*k1,x(n+1));
y(n+1)=y(n)+h/2*(k1+k2);
end
plot(x,y)
hold on
grid on
[T,Z]=ode45(@fun,[0],[-1]);
plot(T,Z,'r')
Claire- Mitochondrie
-
Nombre de messages : 61
Année d'étude : MA1
Section : Bioingénieur
Option : Environnement
Date d'inscription : 15/09/2008
Re: ode23, 45, 113 ....
Merci
On est obligé de passer par une fonction ?
edit :
non le passage par fonction n'est pas nécessaire, tu peux mettre le nom de la variable d'équation à la place de ton appel à la fonction, chez toi ça donnerait ça:
La différence entre ode23, 45 113 ... est le nombre d'opération que va réaliser la fonction, 113 sera plus précis que 23 (enfin ça c'est en théorie, parce que en pratique je vois pas vraiment de différence)
On est obligé de passer par une fonction ?
edit :
non le passage par fonction n'est pas nécessaire, tu peux mettre le nom de la variable d'équation à la place de ton appel à la fonction, chez toi ça donnerait ça:
- Code:
[T,Z]=ode45(f,[0:h:15],[-1]);
plot(T,Z,'r')
La différence entre ode23, 45 113 ... est le nombre d'opération que va réaliser la fonction, 113 sera plus précis que 23 (enfin ça c'est en théorie, parce que en pratique je vois pas vraiment de différence)
Re: ode23, 45, 113 ....
Chez moi, ça fonctionne pas quand je mets simplement [T Z]=ode45(@f,[a:h:b],[0]); (donc je fais appel à la fonction f que j'ai définie au début). Matlab me dit que f est une variable, je comprends pas pq? (c'est comme quand je veux créer un vecteur y, par exemple: j'écris y=f(x); et matlab dit que j'ai pas bien défini le f pour faire ce genre d'opération...).
J'ai mis un de mes codes, peut-etre que qqn saurait m'expliquer ce qui ne va pas dans ce que je fais? merci
J'ai mis un de mes codes, peut-etre que qqn saurait m'expliquer ce qui ne va pas dans ce que je fais? merci
- Code:
clc;clear;
f=inline('(x.^2+2)*cos(x)','x');
N=500;
a=0;b=pi/2;
h=(b-a)/N;
x=a:h:b;
y(1)=0;
for n=1:N
y(n+1)=y(n)+h*f(x(n));
end
y(end)
plot(x,y);hold on
[T Z]=ode45(@f,[a:h:b],[0]);
Z(end)
plot(T,Z,'r')
Maureen- Dopamine
-
Nombre de messages : 75
Année d'étude : MA2
Section : Bioingénieur
Date d'inscription : 14/09/2008
Re: ode23, 45, 113 ....
Si tu ne fais pas d'appel à une fonction je crois que tu dois enlever le "@"
Par contre j'ai essayé de le faire sans appel et cela ne marche pas!!
Hecq???? Help!!! (comprend pas comment tu as fait) :
Par contre j'ai essayé de le faire sans appel et cela ne marche pas!!
Hecq???? Help!!! (comprend pas comment tu as fait) :
Claire- Mitochondrie
-
Nombre de messages : 61
Année d'étude : MA1
Section : Bioingénieur
Option : Environnement
Date d'inscription : 15/09/2008
Re: ode23, 45, 113 ....
- Code:
%% EULER EXPLICITE
clc;clear;clf;
f=inline('(-5/(y*y))+sin(x/5)');
y(1)=-1;
x(1)=0;
h=0.01;
a=0;
b=15;
N=(b-a)/h;
for n=1:N
x(n+1)=x(n)+h;
y(n+1)=y(n)+h*f(x(n),y(n));
end
plot (x,y,'r')
grid on
hold on
%% HEUN
for n=1:N
x(n+1)=x(n)+h;
for n=1:N
k1=(-5/(y(n)*y(n)))+sin(x(n)/5);
k2=(-5/((y(n)+h*k1)^2))+sin(x(n+1)/5);
y(n+1)=y(n)+h*(k1+k2)/2;
end
end
plot(x,y,'k')
% Vérification :
[T,Z]=ode45(f,[0:h:15],[-1]);
plot(T,Z,'g')
j'ai ça avec appel de fonction qui marche parfaitement ...
mais pour cette exercice je n'arrive pas à le faire fonctionner je suis en train de me creuser la tête
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|