我正在尝试ode45
在 MAtlab 中使用并希望修复 MAtlab 使用的点数(时间步数)。使用'refine'
选项 inode45
似乎没有帮助。例如,如果我设置'refine'
为 10,Matlab 会返回一个 101 的数组。更改'RelTol'
也'AbsTol'
无济于事。我知道可以写tspan
as并且可以解决这个问题,但我想通过该选项[0,t1,t2,t3,...,tn]
来修复点数。'refine'
问问题
1800 次
1 回答
2
也许您误解了该'Refine'
选项的实际作用。从文档中odeset
:
Refine - 如果 Refine 为 1,求解器仅在每个时间步结束时返回解。如果 Refine 为 n >1,则求解器将每个时间步细分为 n 个较小的区间,并返回每个时间点的解。当 length(tspan)>2 或 ODE 求解器将解作为结构返回时,不适用 Refine。
换句话说,设置'Refine'
为 10 并不能保证您将获得 10 个输出点,而是您将获得每个积分时间步长10 个输出点。在自适应步长方法(如 )的情况下ode45
,求解器根据许多标准选择步长的大小。如果您想要给定数量的输出点,您必须指定固定时间步长,就像您已经通过tspan
. 该linspace
功能可能对您有所帮助。
另一种可能性是您实际上并没有应用您的选择。仅仅调用odeset
是不够的。您还必须记住将输出传递到ode45
.
于 2014-01-03T10:04:59.767 回答