在我的教科书中,我遇到了一个在为 ODE 系统指定事件位置时应该使用的函数示例。函数示例如下:
function [value, isterminal, dircn] = proj(t,z,flag);
g = 9.81;
if nargin < 3 | isempty(flag)
value = [z(2); 0; z(4); -g];
else
switch flag
case 'events'
value = z(3);
isterminal = 1;
dircn = -1;
otherwise
error('function not programmed for this event');
end
end
这里有一部分逻辑我不明白。假设我激活了“事件”选项,然后运行 ode45。那么,ode45 如何实际读取方程组(在上述函数中指定为value = [z(2); 0; z(4); -g];
)?当然,在指定 tspan 和初始条件之后,我已经基于上述函数运行了 ode45,它就像一个魅力。但是我不明白 ode45 仅在上面脚本的“if”部分中出现时如何正确读取系统。
如果有人能解释这里的逻辑,我将不胜感激!