How to stop ode45 when value reach certain value other-than zero

18 ビュー (過去 30 日間)
Dereje
Dereje 2018 年 4 月 26 日
コメント済み: Bjorn Gustavsson 2018 年 4 月 27 日
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

回答 (2 件)

Jan
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 件のコメント
Dereje
Dereje 2018 年 4 月 26 日
@Jan y(2)-0.2 is not working that is why I asked you but it works for zero.May be something is wrong with my code. @Bjorn Gustavsson Thanks for the detailed clarification.
Bjorn Gustavsson
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
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
  1 件のコメント
Dereje
Dereje 2018 年 4 月 26 日
But in that case the stopping condition is when y is 0.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by