我需要更好地了解如何定义 ODE 事件。我所知道的是,如果我将 ODE 定义为
[t,q,te,qe,ie] = ode45(odefun,tspan,q0(:,1),options);
options = odeset('Events',@events);
function [value,isterminal,direction] = events(t,q)
value = ...;
isterminal = ...;
direction = ...;
end
我需要将 定义为和value的函数,使其归零。所以,例如,如果我想找到我只需要写的时间qtv = 0
value = q(2);
isterminal = 1;
direction = 0;
但是在写
value = [q(2),q(2)];
isterminal = [1,1];
direction = [1,-1];
相当于前面的公式?
如果我想在什么时候停止集成q(2) < toll呢?q(2)我的意思是,如果非常接近 xero 但不完全为零,是否可以停止集成?(我正在考虑类似 Karnopp 模型,用于对这张图片中的粘附条件进行建模http://vibrationacoustics.asmedigitalcollection.asme.org/data/journals/jvacek/28878/s_011506vaj1.jpeg)
此外,在向量中te,qe我有遇到事件时的时间瞬间和解决方案值。如果我有 2 个不同的事件要满足(我们称它们为类型 1 和类型 2)但我只想绘制类型 1 的事件,我该如何告诉 Matlab?
最后,我可以执行哪些检查来确保 ODE 正确识别所有事件?