I have the following Matlab ODE code:
[t,y,~,~,ie] = ode23tb(@(t,y) RHSODE(t,y),[0,t_end], [i0;v0],options);
I want the ODE solver could also give me the result z, which is a function of y and dy/dt, such that z = f(y,dy/dt).
Does anyone know how to add such z into the output of the solver?
There are two ways to do this. The most common, and usually fastest, way is to take advantage of your integration function ( RHSODE
in your case) and evaluate your function f
after performing the integration. You haven't provided many details with your code but it might look something like this:
ydot = RHSODE(t,y);
z = f(y,ydot);
where t
and y
are the outputs from ode23tb
. This requires that both RHSODE
and f
be vectorized (or you can wrap the above in a for
loop).
The other way requires that you create an additional equation (or equations if z
is a vector) inside of your integration function, RHSODE
. Normally ode23tb
integrates anything in this function so f
must be multiplied by a factor of t
to cancel this out. Again, your code might look something like this:
function ydot = RHSODE(t,y)
ydot0 = ... % Your original ODE(s)
z = f(y,ydot);
ydot = [ydot0;z*t]; % Make column vector
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.