0
我有一個耦合微分方程組。其中一個參數隨着時間而變化,我想跟蹤所述參數的變化(並用我的最終圖形覆蓋它)。matlab ode23提取成功的積分步驟改變參數
我試圖將所有生成的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求解器調用:
[t,y]=ode23(@systemEquationsRibose, [t0 tx],[Cc0 Cs0],[],@funV0Ribose,V,umax,Ks,rd,Cs0,Ys,m);
v由一個單獨的函數fu nV0Ribose。funV0Ribose的值取決於y(1)在每個給定的時間點。
如在您的其他問題提出,而不是使用'[T0 TX]'規定的採樣點的列表,'linspace(T0,TX,300)'或類似。步長仍然是自適應的,採樣點處的值將被內插。 – LutzL
嗨再次=) 我不知道這是如何幫助。我仍然會得到一個向量vel,其中包含v的值,返回數組中沒有相應的值。如果我錯過了一些事情,請詳細說明。 – Dahlai
難道你不能只在't'上評估'funV0Ribose'並且''你在oncce上''ode23'已經完成了嗎? – David