【问题标题】:MATLAB ODE45: only saving last solutionMATLAB ODE45:只保存最后一个解决方案
【发布时间】:2017-05-10 21:08:53
【问题描述】:

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

之所以要这样做,是为了避免出现以下错误:

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

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

【问题讨论】:

    标签: arrays matlab ode45


    【解决方案1】:

    来自文档:

    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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多