I want to do a stop condition in ode45 that he demands dx=0
14 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
shir hartman
le 17 Août 2022
Commenté : shir hartman
le 20 Août 2022
this is my code And I don't understand why it doesn't work :(
AnonFun=@(t,x)(5*x-1*x^2);
Opt=odeset("Events",@myEvent);
[t,x]=ode45(AnonFun,[0,5],1,Opt);
plot(t,x)
function [value, isterminal, direction] = myEvent(t,x)
value = diff(x)==0;
isterminal = 1; % Stop the integration
direction = -1;
end
Im trying to get this :
0 commentaires
Réponse acceptée
Torsten
le 17 Août 2022
Modifié(e) : Torsten
le 17 Août 2022
AnonFun=@(t,x)(5*x-1*x^2);
Opt=odeset("Events",@(t,x)myEvent(t,x,AnonFun));
[t,x]=ode45(AnonFun,[0,5],1,Opt);
plot(t,x)
function [value, isterminal, direction] = myEvent(t,x,AnonFun)
value = AnonFun(t,x)-1.0e-4;
isterminal = 1; % Stop the integration
direction = -1;
end
3 commentaires
Torsten
le 17 Août 2022
There is no sign-change in dx/dt from positive to negative. So I changed the code above to stop when
dx/dt < 1e-4.
Plus de réponses (1)
Walter Roberson
le 17 Août 2022
You need to carry around one more level of derivatives.
AnonFun = @(t, x) [x(2); 5-2*x(1)];
Opt = odeset("Events", @myEvent);
[t, x] = ode45(AnonFun, [0,5], [1, 5], Opt);
plot(t, x(:,1))
function [value, isterminal, direction] = myEvent(t, x)
value = x(2);
isterminal = 1; % Stop the integration
direction = -1;
end
Voir également
Catégories
En savoir plus sur Ordinary Differential Equations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!