Matlab ODE 求解器的多个输出

Hey*_*Man 2 matlab numerical-integration ode

我有以下 Matlab ODE 代码:

[t,y,~,~,ie] = ode23tb(@(t,y) RHSODE(t,y),[0,t_end], [i0;v0],options);
Run Code Online (Sandbox Code Playgroud)

我希望 ODE 求解器还可以给出结果 z,它是 y 和 dy/dt 的函数,这样 z = f(y,dy/dt)。

有谁知道如何将这样的 z 添加到求解器的输出中?

hor*_*ler 5

有两种方法可以做到这一点。最常见且通常最快的方法是利用您的集成功能(在您的情况下)并在执行集成后RHSODE评估您的功能。f您没有提供代码的许多详细信息,但它可能看起来像这样:

ydot = RHSODE(t,y);
z = f(y,ydot);
Run Code Online (Sandbox Code Playgroud)

其中ty是 的输出ode23tb。这要求 和 都RHSODEf矢量化(或者您可以将上面的内容包装在一个for循环中)。

另一种方法要求您z在积分函数 内创建一个附加方程(如果是向量,则创建多个方程)RHSODE。通常ode23tb会对该函数中的任何内容进行积分,因此f必须乘以因子t来抵消此结果。同样,您的代码可能如下所示:

function ydot = RHSODE(t,y)
ydot0 = ... % Your original ODE(s)
z = f(y,ydot);
ydot = [ydot0;z*t]; % Make column vector
Run Code Online (Sandbox Code Playgroud)