stop Ode45 when y is less than a value
조회 수: 3 (최근 30일)
이전 댓글 표시
%So thats my ode call and I want it to stop (and save datas % obviously before t=13s) when the value u(1)<=minu
%Where minu is calcuated before.
u0=[vf1m(jj) 0]';
tspan=[0 13]';
Opt = odeset('Events', @myEvent);
[t,u]= ode45(@(t,u) ok(t,u,p2,m,maxu,maxT), tspan, u0,Opt);
%I tried something like that, nothing worked.
function [value, isterminal, direction] = myEvent(t, u, minu)
value = u(1)<=minu
isterminal = 1; % Stop the integration
direction = 0;
%Eroor Message
Not enough input arguments.
Error in myEvent (line 2)
value = u(1)<=minu
Error in odeevents (line 28)
eventValue = feval(eventFcn,t0,y0,eventArgs{:});
Error in ode45 (line 148)
odeevents(FcnHandlesUsed,odeFcn,t0,y0,options,varargin);
Error in skr (line 217)
[t,u]= ode45(@(t,u) ok(t,u,p2,m,maxu,maxT), tspan, u0,Opt);
채택된 답변
Torsten
2020년 3월 28일
As defined, ode45 expects myEvent to have 2 input parameters, but you use 3.
Use
Opt = odeset('Events',@(t,u)myEvent(t,u,minu));
And I suggest you set
value = u(1) - minu;
댓글 수: 5
Steven Lord
2020년 3월 28일
You want your event function to be continuous (as the one Torsten suggested is) rather than discontinuous (like yours that uses <= is.)
The ODE solver will detect when the event function passes through zero.
추가 답변 (0개)
참고 항목
카테고리
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!