How to stop ode45 when value reach certain value other-than zero
18 次查看(过去 30 天)
显示 更早的评论
I need to stop the ode when y(2) is 0.2 and here is the function I used for the solver but It doesn't work. Any thing wrong with it ?
function [val, terminate, dir]= stopevents(t,y)
val=(y(2)==0.2)-0.5;
terminate=1;
dir=0;
end
0 个评论
回答(2 个)
Jan
2018-4-26
编辑:Jan
2018-4-26
An event occurs when value(i) is equal to zero.
function [value, terminate, direction] = stopevents(t, y)
value = y(2) - 0.2;
terminate = 1;
direction = 0;
end
The event function must be smooth. It is extremely unlikely, that the integration meets the point y(2)==0.2 exactly. Therefore your event function does not trigger. In addtion:
val = (y(2)==0.2)-0.5;
replies -0.5 or 0.5, but never 0, which would trigger the event.
By the way: Avoid using "dir" as name of a variable, because this shadows an important built-in function.
5 个评论
Bjorn Gustavsson
2018-4-27
@jan: I guess what was meant with y(2) is y(t) for t=2, and not the second component of y
Bjorn Gustavsson
2018-4-26
You should be able to use the "events handling", look at the code for ballode.m for an example on how to handle it.
HTH
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Ordinary Differential Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!