我正在尝试在MAtlab中使用ode45
,并希望修复MAtlab使用的点数(时间步数)。使用'refine'
中的ode45
选项似乎无济于事。例如,如果我将'refine'
设置为10,则Matlab返回101的数组。
更改'RelTol'
和'AbsTol'
也无济于事。我知道可以将tspan
写为[0,t1,t2,t3,...,tn]
并解决此问题,但我想通过'refine'
选项修复点数。
答案 0 :(得分:1)
也许您误解了'Refine'
选项实际上做了什么。来自odeset
的文档:
优化 - 如果“优化”为1,则解算器仅在每个时间步的末尾返回解。如果Refine是n> 1,则求解器将每个时间步长细分为n个较小的间隔,并在每个时间点返回解。当length(tspan)> 2或ODE求解器将解作为结构返回时,Refine不适用。
换句话说,将'Refine'
设置为10并不能保证您将获得10个输出点,而是每个积分时间步骤将获得10个输出点。对于像ode45
这样的自适应步长方法,求解器会根据许多条件选择步长的大小。如果您想要给定数量的输出点,则必须通过tspan
指定固定时间步长。 linspace
功能可能对您有所帮助。
另一种可能性是你实际上没有应用你的选择。仅仅呼叫odeset
是不够的。您还必须记住将输出传递给ode45
。