我有以下 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 添加到求解器的输出中?
我有以下 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 添加到求解器的输出中?
有两种方法可以做到这一点。最常见且通常最快的方法是利用您的集成功能(在您的情况下)并在执行集成后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