我一直在尝试在 Matlab 中模拟一个弹跳球,但一直无法成功触发事件(可能是因为我没有使用事件函数对吧?)。我知道这value
是您要跟踪的值,一旦它超过 0,就会触发事件。isTerminal
指定是否希望 ode45 停止积分,并且direction
是触发事件时参数的走向。
以下是我的事件函数:
function [value,isterminal,direction] = ground_contact(t,y)
% Return event vectors VALUE, ISTERMINAL, and DIRECTION.
value = y(2);
isterminal = 1; %terminate the integration
direction = -1; %only trigger when moving downward
这里是我实际调用 ode45 的地方:
tspan = [0 50]; % seconds
ic = [100 100 0 0]; % rad rad/s rad rad/s
m = 5;
g = 9.81;
%% solving the ode
options = odeset('Events',@ground_contact,'MaxStep',0.001,'RelTol',1E-10,'AbsTol',1E-10);
[t,u,TE,YE,IE] = ode45(@(t,x)pointmass_eom(t,x,m,g),tspan,ic,options);
有人可以告诉我我做错了什么吗?