【问题标题】:Adjust time step in ode15s在 ode15s 中调整时间步长
【发布时间】:2015-07-16 00:07:08
【问题描述】:

我正在使用ode15s 函数在 MATLAB 中求解一个 DAE 系统,在仿真的某个时刻,求解器无法达到必要的容差,因此执行终止。如果我将最大步长减小到一个较小的值(~1e-5),程序就能够继续并到达指定的端点。

基于减少时间步允许程序继续运行的事实,我怀疑ode15s 脚本在某些时候占用了太大的时间步并且无法从中恢复。但是,保持这个小的最大步长意味着我有数千个不必要的数据点,这会减慢模拟速度并占用空间。

首先,ode15s 中是否可以调整最大步长?到目前为止我发现的一切都表明这是不可能的,但我可能会遗漏一些东西。

如果这不可能,我可以通过等到函数超过关键时间(即模拟在没有时间步长约束的情况下崩溃的时间)来近似行为,停止它,然后重新启动时间步长约束。但是,我不知道临界时间,而且在最终的模拟中(现在是高度简化的),我会在不同的位置有几十个初始条件,所以我无法手动调整所有的在合理的时间内多次。我将如何以自动方式找到关键时间,以便在通过后调整步长?

【问题讨论】:

    标签: matlab ode


    【解决方案1】:

    短一点:最大步长定义一次,可以在单个计算过程中使用标准 MATLAB 求解器进行更改。

    长篇大论:我很确定动态更改最大步长确实很棘手,而且没有必要。步长可以在最大值和最小值之间改变,这就是我们从可变步长求解器中得到的全部。 您可以尝试更改最小步长值 - 这种方法的想法是在低收敛性的情况下自动调整步长。This 页面可以提供一些有关选择和调整求解器的有用信息。

    将问题拆分为子问题以减少时间但更改步骤是可能的,但这会带来比利润更令人头疼的问题。另外,我认为“临界点”可以在不同初始条件的时间线上移动。

    终极建议分为两部分:

    1. 尝试按照 Matlab 文档中的说明调整求解器。 (我建议为求解器雅可比方法尝试稀疏分析选项)。
    2. 使用parallel computing 或更好的硬件(适用于完整型号)获得更多功能。

    另一个有用的link 关于调整求解器。

    【讨论】:

    • 因为我的系统是DAE的,所以我必须使用ode15sode23t,后者没有给出好的结果。我刚刚在这个特定部分测试了ode23t,它得到了类似的结果,尽管它在到达指定端点之前也崩溃了。当您提到并行计算时,您指的是并行化微分方程,对吗?
    • @Aliden 有一些关于使用 Matlab 并行池求解 ODE 的信息,可能的起点是 here
    猜你喜欢
    • 2018-02-25
    • 2023-03-04
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多