I want to do a stop condition in ode45 that he demands dx=0
14 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
shir hartman
am 17 Aug. 2022
Kommentiert: shir hartman
am 20 Aug. 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 Kommentare
Akzeptierte Antwort
Torsten
am 17 Aug. 2022
Bearbeitet: Torsten
am 17 Aug. 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 Kommentare
Torsten
am 17 Aug. 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.
Weitere Antworten (1)
Walter Roberson
am 17 Aug. 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
Siehe auch
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!