MatLab ode45 最小时间步长

Posted

技术标签:

【中文标题】MatLab ode45 最小时间步长【英文标题】:MatLab ode45 minimal time step 【发布时间】:2017-05-03 20:35:58 【问题描述】:

我正在尝试使用 MatLab 和 ode45 函数求解微分方程。 问题是如何更改最小步长?我想让它更大以避免太小的步骤。 我正在尝试这样做:

tspan = [3, 4]; (boundaries of time line)
[t, q] = ode45('dqdt2', tspan, q0);
t - 时间 q - 找到的解决方案 dqdt2 - 我的函数文件 q0 - 初始条件

【问题讨论】:

不是你要找的东西,但除了@drhagen 建议更改容差之外,对于 ode45,你可以将 Refine 参数设置为 1(在 ode45 中默认为 4) 【参考方案1】:

你不能。

在 Matlab 中,不能为可变步长求解器指定最小步长,可能是因为这样做没有多大意义。如果您希望降低解决方案的准确性以加快解决方案,请增加RelTol and AbsTol。随着容差的增加,求解器通常会采用更大的步长,但仍然没有特定的最小步长。

【讨论】:

谢谢,它有点帮助。现在我正在尝试使用 tspan =[0,10],但 MatLab 说“内存不足”(经过几个小时的计算)。也许我可以设置步数?【参考方案2】:

有一种方法可以为 ode45 和其他步进求解器设置步长。在定义 TSPAN 时,您可以指定一组您想要解决方案的值。这不会影响求解器采取的内部步骤,但会帮助求解器进行有效的内存管理。您可以查看文档here(感谢edwinksl 指出)。

%Your Code
tspan = [3, 4]; %MATLAB here uses the in built step size

%Set Step size. Say you want a step size of 0.1
tspan = 3:0.1:4;
%This will run over only those values of t that are defined by tspan

【讨论】:

“[S]指定你想要解决的确切值”听起来有误导性。指定具有两个以上元素的 tspan 向量不会影响求解器实际采用的内部时间步长。见mathworks.com/help/matlab/ref/ode45.html#inputarg_tspan。 好点。感谢您指出了这一点。尽管这种方法将帮助 OP 影响 MATLAB 采取的初始步骤,这反过来将有助于大型系统的有效内存管理(文档中指出的一点)。我将编辑我的答案以反映这一点。

以上是关于MatLab ode45 最小时间步长的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB实战应用案例:欧拉法改进欧拉法ode45求解微分方程实例

Matlab求解刚性 ODE

MATLAB-1个实例-欧拉法改进欧拉法ode45求解微分方程

Matlab求解捕食者-猎物方程

数值积分法的MATLAB实现

Matlab - ODE45 - 改变时间步数