我有一个ODE 系统。ODE 需要几秒钟才能在特定参数范围内运行。然而,对于另一个参数范围,MATLAB 突然需要无限的时间来运行(好吧,好吧,只测试了半天)。
这是一个具有双曲函数的复数、多重耦合 ODE;分析解决它是不可能的,用数值解决它将是硕士论文,所以我正在寻找一个计算解决方案。我需要丢弃这些参数并移至下一组(随机)参数。
如何在 MATLAB 中调试或捕获此语义错误?我只是不确定 odesolver 不喜欢什么。到目前为止,我已经使用分析器将其缩小到以下几行odesolver
:
f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:});
f(:,3) = feval(odeFcn,t+hA(2),y+f*hB(:,2),odeArgs{:});
f(:,4) = feval(odeFcn,t+hA(3),y+f*hB(:,3),odeArgs{:});
f(:,5) = feval(odeFcn,t+hA(4),y+f*hB(:,4),odeArgs{:});
f(:,6) = feval(odeFcn,t+hA(5),y+f*hB(:,5),odeArgs{:});\
(这本质上是核心求解器方法)。显然错误的根源是我选择的参数,但profiler
没有显示我的函数占用的任何明显时间(我将 ODE 的脚本函数作为匿名函数传递给ode45
)。