2

我有以下 Matlab ODE 代码:

[t,y,~,~,ie] = ode23tb(@(t,y) RHSODE(t,y),[0,t_end], [i0;v0],options);

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

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

4

1 回答 1

4

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

ydot = RHSODE(t,y);
z = f(y,ydot);

其中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
于 2014-01-28T03:55:10.653 回答