我有一个 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
)。