我有以下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添加到求解器的输出中?
答案 0 :(得分:3)
有两种方法可以做到这一点。最常见且通常最快的方法是利用集成功能(在您的情况下为RHSODE
)并在执行集成后评估您的函数f
。您没有在代码中提供许多详细信息,但它可能如下所示:
ydot = RHSODE(t,y);
z = f(y,ydot);
其中t
和y
是ode23tb
的输出。这需要对RHSODE
和f
进行矢量化(或者您可以在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