0

我一直在尝试在 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);

有人可以告诉我我做错了什么吗?

4

0 回答 0