MATLAB Answers

stop Ode45 when y is less than a value

18 ビュー (過去 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);

  1 件のコメント

Lazaros Christoforidis
Lazaros Christoforidis 2020 年 3 月 28 日
Note: jj have values so sometimes finishes @13s, other times crashes before

Sign in to comment.

採用された回答

Torsten
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 件のコメント

表示 2 件の古いコメント
Lazaros Christoforidis
Lazaros Christoforidis 2020 年 3 月 28 日
Depends the problem,
I have a loop for many gear ratios and I want to find for each ratio If it works or not
My problem is when the u(1): motorcycle engine speed is less or equal than the minimum (minu) the motorcycle needs to stop.
Steven Lord
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.
Lazaros Christoforidis
Lazaros Christoforidis 2020 年 3 月 28 日
Ohh okay, noww it makes sense
Ευχαριστω, υγεια

Sign in to comment.

その他の回答 (0 件)

タグ


Translated by