How can I output intermediate vaviables when using ode45 funcion?

2 次查看(过去 30 天)
I want to output an intermediate vaviable when using ode45 funcion.In the following codes, a_k is the function of w, I want to output the value of a_k at every step, which is [-110:1:115],and plot(w,a_k). Is there any way to solve the problem? Thank you all!
function main
CA_span= -110:1:115;
Qf0=0;
mf0=0.005;
m0=2.5;
y0=[Qf0 mf0 m0];
[T,Y]=ode45(@hrr_ode1,CA_span,y0);
end
function dy=hrr_ode1(w,y)
T=p(w)*Vz(w)/(y(3)*R);
a_k=(y(3)-y(2))/(L0*y(2));
% a_k is the function of w, I want to output the value of a_k at every step, which is [-110:1:115]
x1=0.001*p(w)*dVzdw(w);
x2=dQ0dw(T,p(w),w);
x3=(1/(R/1000))*C_v(T,a_k)*(Vz(w)*dpdfai(w)+p(w)*dVzdw(w))*0.001;
x4=U(T,a_k);
x5=C_v(T,a_k)*T;
x6=y(3)*U_ak(T,a_k)*a_k/y(2);
dy=zeros(3,1);
if w<0
dy(1)=0;
dy(2)=0;
dy(3)=0;
else
dy(1)=(x1+x2+x3)/(1-(1/Hu)*(x4-x5-x6));
dy(2)=max( dy(1)/Hu,0);
dy(3)=max( dy(1)/Hu,0);
end
end

采纳的回答

Grzegorz Knor
Grzegorz Knor 2013-7-16
You can use OutputFcn to do this. Just add options to ode45 in this way:
options = odeset('OutputFcn',@myfun);
[T,Y]=ode45(@hrr_ode1,CA_span,y0);
And define myfun as:
function status = myfun(t,y,flag)
.
.
.
switch(flag)
case 'init'
.
.
.
case 'done'
.
.
.
end
end
status = 0;
You have to fill dots in the code above with proper commands.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by