1

我正在尝试ode45在 MAtlab 中使用并希望修复 MAtlab 使用的点数(时间步数)。使用'refine'选项 inode45似乎没有帮助。例如,如果我设置'refine'为 10,Matlab 会返回一个 101 的数组。更改'RelTol''AbsTol'无济于事。我知道可以写tspanas并且可以解决这个问题,但我想通过该选项[0,t1,t2,t3,...,tn]来修复点数。'refine'

4

1 回答 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 回答