[英]Is it possible to export additional variables from within an ODE45 function?
我有一个输入给ode45的运动函数文件方程。 功能文件的输出变量必须是ydot。
在运动函数文件的方程式中,我根据状态向量y计算了许多对象以规定力。
ode45完成后,我想在每个时间步访问这些对象,以便可以计算能量。
相对于在每个时间步长上重新计算它们,将它们从Runge-Kutta流程中拉出,无论如何都是更快的方法,这样反而会更快。
是否有可能做到这一点?
不能保证右侧的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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.