有人可以解释一下以这种方式设置 ode45 事件时我做错了什么吗?
当我尝试运行代码时,它会到达第 6 行,但是无论我isTerminal=[1,1]
在第 7 行设置了什么,它都不会停止计算 ode,而是会一直持续到结束:当第二个事件 z(3) 达到 0 时,它会到达第 10 行,取决于我是否设置isTerminal=[1,1]
或isTerminal=[0,1]
然后停止计算isTerminal(1)
作为触发事件和isTerminal(2)
后一种情况。
function [value, isTerminal, direction] = myEvent(t, z)
posObst=100;
dist = z(1)-posObst;
if dist == 0
value = [dist; z(3)];
isTerminal = [1; 1];
direction = [0; -1];
else
value = [dist; z(3)];
isTerminal = [0; 1];
direction = [-1 ; -1];
end
end
我的问题是,为什么 ode 一旦到达第 7 行就不会停止计算?这是我能想到的最简约的例子。如果还有什么我应该补充的,请告诉我。