еще возникли проблемы с тем, как Matlab работает ...Matlab игнорирует мой, если условие
Я создал модель, состоящую из дифференциальных уравнений, которые называются по ode45 решателя. Сам решатель ode45 передает функцию v0 в систему.
Это моя модель:
%chemostat model, based on:
%DCc=-v0*Cc/V + umax*Cs*Cc/(Ks+Cs)-rd -->Change of cell concentration over time
%Dcs=(v0/V)*(Cs0-Cs) - Cc*(Ys*umax*Cs/(Ks+Cs)-m) -->Change of substrate concentration over time
function dydt=sys(t,y,v0,V,umax,Ks,rd,Cs0,Ys,m)
dydt=[-(v0(t,y)/V)*y(1)+(umax*y(1)*y(2))/(Ks+y(2))-rd;
(v0(t,y)/V)*(Cs0-y(2))-(Ys*umax*y(2)*y(1))/(Ks+y(2))];
Это моя функция v0: `
function v0 = funV0(t,y)
persistent i
if isempty(i)
i=0;
end
if y(1) > 5 || i==1
v0=20
v0 = 20+200*t % As an example, if [Y1] > 5, then set v0 = [Y2]
i=1
else
v0=0
i=0
end
end
модель отлично работает, если я просто передать:
v0=20
v0=v0+200*t
Однако, приведенный выше код с условиями if не работает. Несмотря на то, что y (1) изначально равно 1 (и медленно увеличивается с течением времени), условие if игнорируется.
Может кто-нибудь объяснить это поведение и, возможно, указать на решение?
Заранее спасибо и еще раз спасибо Rollen D'Souza, которые мне помогли с кодом в первую очередь.
вы с помощью ' funV0'? Я не вижу, чтобы его называли. – Memming
'funV0' возвращает' v0'. Я думаю, что вы рассматриваете 'v0' как функцию, когда она фактически является двойной. – Cecilia
@Memming: FunV0 вызывается ode45: [t, y] = ode45 (@ systemEquations2, [0 5], [Cc0 Cs0], [], @ funV0, V, umax, Ks, rd, Cs0 , Ys, м); – Dahlai