matlab ode23 提取成功集成步骤的变化参数

matlab ode23 extract changing parameter of successful integration steps

我有一个耦合微分方程组。其中一个参数随时间变化,我想跟踪所述参数的变化(并将其与我的最终图表叠加)。

我试图将 v 的所有生成值写入一个单独的向量。但是,由于并非所有函数调用都会导致成功集成,因此我最终得到的 v 值比我的 ode-solver return 向量的值要多。

有人可以指出我如何将此功能实现到我的代码中吗?

非常感谢,已经尝试了几个小时了。不幸的是,无济于事。

干杯, 大来

在下面找到我的代码:

耦合微分方程 + 尝试将 v 的所有值写入向量:

%chemostat model, based on:
%DCc=-v0*Cc/V + umax*Cs*Cc/(Ks+Cs)-rd
%Dcs=(v0/V)*(Cs0-Cs) - Cc*(Ys*umax*Cs/(Ks+Cs)-m)
function dydt=systemEquationsRibose(t,y,funV0Ribose,V,umax,Ks,rd,Cs0,Ys,m)
     v=funV0Ribose(t,y); %funV0Ribose determines v dependent on y(1)

y(2) = max(0, y(2)); %minimum value of y(2), therefore Cs, is 0

      dydt=[-(v/V)*y(1)+(umax*y(1)*y(2))/(Ks+y(2))-rd; 
           (v/V)*(Cs0-y(2))-((1/Ys)*(umax*y(2)*y(1))/(Ks+y(2)));
           ];

%     persistent k
%     persistent vel
%     
%     if isempty(vel)
%          vel=0
%     end
%     
%     if isempty(k)
%         k=1
%     end
%   
%         if v>= vel(k)
%         vel(k+1)=v  %stores all v values, for plotting and analysis of v0 behaviour
%         end
%         assignin('base','vel',vel)
%         k=k+1
end

ode23 求解器调用:

[t,y]=ode23(@systemEquationsRibose, [t0 tx],[Cc0 Cs0],[],@funV0Ribose,V,umax,Ks,rd,Cs0,Ys,m);

v 由一个名为 funV0Ribose.The 的单独函数给出,funV0Ribose 的值在每个给定时间点都取决于 y(1)。

进行更多挖掘(并将正确的词放入 google)我找到了解决方案: 第二个答案连同阅读文档(这对我来说仍然很难,因为我是 MATLAB 的新手): Saving derivative values in ode45 in Matlab

我的实现: 初始化输出函数:

options=odeset('OutputFcn', @recordFun)
global v 
if isempty(v)
    v=0
end

正在调用解算器:

[t,y]=ode23(@systemEquationsRibose, [t0 tx],[Cc0 Cs0],options,@funV0Ribose,V,umax,Ks,rd,Cs0,Ys,m);

记录乐趣:

function status=recordFun(t,y,flag,funV0Ribose,V,umax,Ks,rd,Cs0,Ys,m)
status = 0; %=0 to keep ode-solver running, if =1 ode-solver stops

%counter for growing vectors
persistent k
if isempty(k)
    k=0
end 

%recording of every v value

persistent vel %to store vel for multiple calls of recordFun
global v %to access v from @systemEquationsRibose  


vel(k+1)=v
assignin('base','vel',vel)

k=k+1 %counter increase for next elements of growing vectors
end