我想只让ODE45保留最后的解决方案。而是从tspan = [t0 tf]返回所有解决方案;我只希望返回的矢量是tf的解决方案。
我之所以这样做是为了避免以下错误:
使用horzcat时出错请求的442368x1828(6.0GB)数组超出 最大数组大小首选项。创建大于此的数组 限制可能需要很长时间并导致MATLAB无响应。 有关详细信息,请参阅数组大小限制或首选项面板。
ode45中的错误(第428行) yout = [yout,zeros(neq,chunk,dataType)];
答案 0 :(得分:2)
来自文档:
tspan - 整合的间隔 向量 积分间隔,指定为矢量。至少,tspan必须是指定初始和最终时间的双元素向量[t0 tf]。要在t0和tf之间的特定时间获得解,请使用[t0,t1,t2,...,tf]形式的较长向量。 tspan中的元素必须全部增加或全部减少。
求解器在tspan(1)处强制初始条件y0,然后从tspan(1)到tspan(end)的整合:
如果tspan有两个元素[t0 tf],则求解器返回在该区间内的每个内部积分步骤中计算的解。 如果tspan包含两个以上的元素[t0,t1,t2,...,tf],则求解器返回在给定点处求值的解。这不会影响求解程序用于从tspan(1)遍历到tspan(end)的内部步骤。因此,求解器不一定精确地步进到tspan中指定的每个点。但是,在指定点生成的解决方案与在每个内部步骤计算的解决方案具有相同的精度。 指定几个中间点对计算效率几乎没有影响,但对于大型系统,它可能会影响内存管理。 解算器获得的解决方案可能会有所不同,具体取决于您是将tspan指定为双元素向量还是指定为具有中间点的向量。如果tspan包含几个中间点,那么它们会指示问题的比例,这可能会影响求解器所采取的初始步长。
所以只需指定三点。 [t0 (t0+tf)/2 tf]