在Matlab的ode45中使用“Refine”选项

时间:2014-01-03 06:38:09

标签: matlab ode numerical-integration

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

1 个答案:

答案 0 :(得分:1)

也许您误解了'Refine'选项实际上做了什么。来自odeset的文档:

  

优化 - 如果“优化”为1,则解算器仅在每个时间步的末尾返回解。如果Refine是n> 1,则求解器将每个时间步长细分为n个较小的间隔,并在每个时间点返回解。当length(tspan)> 2或ODE求解器将解作为结构返回时,Refine不适用。

换句话说,将'Refine'设置为10并不能保证您将获得10个输出点,而是每个积分时间步骤将获得10个输出点。对于像ode45这样的自适应步长方法,求解器会根据许多条件选择步长的大小。如果您想要给定数量的输出点,则必须通过tspan指定固定时间步长。 linspace功能可能对您有所帮助。

另一种可能性是你实际上没有应用你的选择。仅仅呼叫odeset是不够的。您还必须记住将输出传递给ode45