Matlab ODE求解器的多个输出

时间:2014-01-28 00:41:32

标签: matlab ode numerical-integration

我有以下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添加到求解器的输出中?

1 个答案:

答案 0 :(得分:3)

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

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

其中tyode23tb的输出。这需要对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