【问题标题】:Is it possible to export additional variables from within an ODE45 function?是否可以从 ODE45 函数中导出其他变量?
【发布时间】:2018-03-18 18:41:25
【问题描述】:

我有一个运动方程函数文件,我将它输入 ode45。函数文件的输出变量必然是ydot。

在我的运动方程函数文件中,我根据状态向量 y 计算许多对象以规定力。

ode45 完成后,我想在每个时间步访问这些对象,以便计算能量。

与其在每个时间步上重新计算它们,不如将它们从 Runge-Kutta 过程中提取出来,当它们被计算为中间步骤时会更快。

可以这样做吗?

【问题讨论】:

  • 您需要提供更多细节。你使用什么语言? ODE45 实现是来自某个库还是您自己编写的代码?
  • 这是 MATLAB。

标签: performance function ode


【解决方案1】:

不能保证右侧的 ODE 函数甚至在输出点处被调用,因为它们通常是从自适应步长算法计算的点中插值的。

我经常看到但需要搜索引用的一个技巧是让函数返回您需要的所有值,并将返回列表缩减为 ODE45 调用中的导数。模适当的语法

function [ydot, extra] = odefunc(t,y,params)

然后使用

sol = ode45(@(t,y): odefunc(t,y,params)(1),...)

然后在sol 中的点上运行odefunc 以提取额外信息。

也许选择输出的想法只适用于 python。然后定义一个显式包装器

function ydot = odewrapper(t,y)
    [ydot,~] = odefunc(t,y,params)
end

然后您通常会致电ode45

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-15
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多