是否可以从ODE45函数中导出其他变量?

时间:2018-03-17 18:23:29

标签: performance function ode

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

在我的运动函数方程中,我从状态向量y计算许多对象来规定力。

ode45完成后,我希望每次都能访问这些对象,以便计算能量。

不是在每个时间步骤重新计算它们,而是将它们从Runge-Kutta过程中拉出来,当它们被计算为中间步骤时会更快。

是否可以这样做?

1 个答案:

答案 0 :(得分:0)

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

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

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

然后使用

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

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

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

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

然后您通常会在ode45中调用。