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

时间:2015-04-15 18:17:08

标签: matlab ode

我有一个耦合微分方程系统。其中一个参数随着时间的推移而变化,我想跟踪所述参数的变化(并用我的最终图表覆盖它)。

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

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

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

干杯, dahlai

在下面找到我的代码:

耦合微分方程+尝试将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-solver call:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

致电ode-solver:

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

recordFun:

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