有人在评论中说我应该重新考虑对 eps 的集成容差。https://scicomp.stackexchange.com/questions/18929/what-does-this-matlab-error-message-mean我阅读了手册,但我仍然不知道该怎么做。你能告诉我如何减少matlab中的集成容差吗?
如何降低matlab中的积分容差?
计算科学
matlab
2021-12-27 07:21:37
2个回答
错误信息
警告:在 t=3.974486e+03 时失败。如果不将步长减小到低于时间 t 允许的最小值 (7.275958e-12),则无法满足积分容差。
通常意味着您的误差容限太紧。
简而言之,可变时间步长积分器将根据加权范数调整时间步长,或多或少地计算提供的误差容限与当前局部误差估计的比率。粗略地说,容错越小,下一个时间步长越小;如果误差容限更大,则下一个时间步长将更大。积分通常有一个最小时间步长,所以你看到的是错误测试的结果是缩小时间步长,但时间步长已经处于最小值,所以不能再缩小了。
如果更宽松的误差容限不能产生合理的解决方案,它通常建议以下可能性之一:
- 您使用了错误的集成方法;这通常发生在刚性求解器中,在这种情况下,您应该考虑使用隐式的刚性 ODE 求解器
- 您的系统表现不佳(例如,右侧可能不是 Lipschitz);在这种情况下,您需要考虑更改您正在解决的模型
- 你在右手边引入了某种意外错误;在这种情况下,您需要测试您的代码并修复该错误
选择要设置的公差类型(RelTol、AbsTol或NormControl),用于odeset()定义 ODE 求解器的选项,调用 ODE 求解器并传递所需的选项。例如:
options = odeset('RelTol',eps);
[T,Y] = ode45(odefun,tspan,y0,options);
有大量关于这些函数的文档可以通过输入doc odeset或doc ode45在 MATLAB 的命令提示符中访问。
其它你可能感兴趣的问题