如何降低matlab中的积分容差?

计算科学 matlab
2021-12-27 07:21:37

有人在评论中说我应该重新考虑对 eps 的集成容差。https://scicomp.stackexchange.com/questions/18929/what-does-this-matlab-error-message-mean我阅读了手册,但我仍然不知道该怎么做。你能告诉我如何减少matlab中的集成容差吗?

2个回答

错误信息

警告:在 t=3.974486e+03 时失败。如果不将步长减小到低于时间 t 允许的最小值 (7.275958e-12),则无法满足积分容差。

通常意味着您的误差容限太紧。

简而言之,可变时间步长积分器将根据加权范数调整时间步长,或多或少地计算提供的误差容限与当前局部误差估计的比率。粗略地说,容错越小,下一个时间步长越小;如果误差容限更大,则下一个时间步长将更大。积分通常有一个最小时间步长,所以你看到的是错误测试的结果是缩小时间步长,但时间步长已经处于最小值,所以不能再缩小了。

如果更宽松的误差容限不能产生合理的解决方案,它通常建议以下可能性之一:

  • 您使用了错误的集成方法;这通常发生在刚性求解器中,在这种情况下,您应该考虑使用隐式的刚性 ODE 求解器
  • 您的系统表现不佳(例如,右侧可能不是 Lipschitz);在这种情况下,您需要考虑更改您正在解决的模型
  • 你在右手边引入了某种意外错误;在这种情况下,您需要测试您的代码并修复该错误

选择要设置的公差类型(RelTolAbsTolNormControl),用于odeset()定义 ODE 求解器的选项,调用 ODE 求解器并传递所需的选项。例如:

options = odeset('RelTol',eps);
[T,Y] = ode45(odefun,tspan,y0,options);

有大量关于这些函数的文档可以通过输入doc odesetdoc ode45在 MATLAB 的命令提示符中访问。