how to stop ode45 when one of states reach certain value

조회 수: 293 (최근 30일)
Mohamed Aburakhis
Mohamed Aburakhis 2016년 5월 4일
댓글: Walter Roberson 2023년 10월 20일
[x_dot] =derivative(t, x)
x is states [x(1).....x(4)] I need to stop the integration when x(3) reaches 0.1 when the integration stop record (t)

채택된 답변

Jan
Jan 2016년 5월 4일
Opt = odeset('Events', @myEvent);
[T, Y] = ode45(@YourFun, T, Y0, Opt);
function [value, isterminal, direction] = myEvent(T, Y)
value = (Y(3) == 0.1);
isterminal = 1; % Stop the integration
direction = 0;
  댓글 수: 7
James Gilliam
James Gilliam 2023년 10월 20일
What is T in this senario and how is it defined? Thanks
Walter Roberson
Walter Roberson 2023년 10월 20일
In the call
[T, Y] = ode45(@YourFun, T, Y0, Opt);
the input T is the timespan to integrate over. It is a vector that must have at least two elements, but may have more. If it has two elements then ode45() will decide by itself what times to output information at; if it has more than two elements then ode45() will output information at the times given in the vector.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2016년 5월 4일
편집: Walter Roberson 2017년 9월 13일

Gustavo Lunardon
Gustavo Lunardon 2020년 8월 17일
This is confusing. In matlab help it says: An event occurs when value(i) is equal to zero. All answers in this post make it value = 1 for the event to happen. Are the answers outdated somehow?
  댓글 수: 1
Walter Roberson
Walter Roberson 2020년 8월 19일
This is a valid concern.
value = (X(8) == 0.05 ) and (Y(3) == 0.1) would happen rarely, when the values were bit-for-bit identical to the representation of 0.05 and 0.1 . One bit different in the representation and the condition will not fire. Better is to write x(8) - 0.05 or 0.05 - x(8), and Y(3)-0.1 or 0.1-Y(3) -- zero crossings can be detected for those.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by