是否可以通过非连续函数触发事件?

时间:2018-04-03 19:57:13

标签: matlab octave ode ode45

有人可以指出我正确的方向,指定一个不连续的功能的事件吗?例如,假设我有沿x轴移动的Object1,并且我还有另一个在x = 100时垂直移动的Object2。

我希望每当Object1通过x = 100时触发事件函数,并且两个对象之间的距离为10。这个问题是当事件触发时,距离必须从d = 10跳到 - 1和我这对我不起作用,因为功能不连续。

function [value, isTerminal, direction] = myEvent(t, z)
distBetweenObj = z(1)-z(2)
if abs(distBetweenObj) < tol && objectsCollider(z(1),z(2))
    value = -1;
    isTerminal = 1; % the event should be triggered at this point
    direction = -1; % but for some reason it doesn't
else
    value = distBetweenObj;
    isTerminal = 0;
    direction = -1;
end
end

任何人都有任何想法如何指定此功能?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。可以运行ode求解器,直到对象达到x = 100,然后在事件函数外单独检查第二个对象是否在距离第一个对象10个单位之内,然后再次集成,如果还有其他事情需要完成。