如何在 MATLAB 中使用 ODE 事件?

计算科学 matlab
2021-11-29 15:01:20

我需要更好地了解如何定义 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

此外,在向量中teqe我有遇到事件时的时间瞬间和解决方案值。如果我有 2 个不同的事件要满足(我们称它们为类型 1 和类型 2)但我只想绘制类型 1 的事件,我该如何告诉 Matlab?

最后,我可以执行哪些检查来确保 ODE 正确识别所有事件?

0个回答
没有发现任何回复~