簡體   English   中英

是否可以從ODE45函數中導出其他變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM