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求解微分方程实例