0

有人可以通过为不连续的函数指定事件来为我指明正确的方向吗?例如,假设我有一个沿 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

任何人都知道如何指定此功能?

4

1 回答 1

0

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

于 2018-04-04T11:55:55.797 回答