0

我只想让 ODE45 保留最后一个解决方案。而是从 tspan = [t0 tf]; 返回所有解决方案 我只希望返回的向量成为 tf.

我想这样做的原因是为了避免以下错误:

使用 horzcat 时出错 请求的 442368x1828 (6.0GB) 数组超出了最大数组大小首选项。创建大于此限制的数组可能需要很长时间并导致 MATLAB 变得无响应。有关更多信息,请参阅数组大小限制或首选项面板。

ode45 错误(第 428 行)yout = [yout, zeros(neq,chunk,dataType)];

4

1 回答 1

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]

于 2017-05-10T21:30:24.010 回答