ode45 gave errors
1 次查看(过去 30 天)
显示 更早的评论
Hello everyone, I have a case about two concentration which are ode functions. So, I guess I have to use ode 45 but in the code given below I couldn't figure out how to draw X(biomass) and S(substrate) concentration in time (in same graph). Could you help me?
clear all;
clc;
close all;
X0=2;
tspan = [0 40];
[tX,X]=ode45(@biomass, tspan, X0);
S0=1000;
tspan = [0 40];
[tS,S]=ode45(@substrate, tspan, S0);
figure
hold on
plot(tX,X)
plot(tS,S)
xlabel('time (year)')
ylabel('Concentration (mg/L)')
legend('Biomass','Substrate','location','southeast')
function biomassgrowth=biomass(t,X)
X0=2;
Sin=1000;
So=0;
S0=So+Sin;
V=10;
TH=40;
ko=0.2;
kd=0.01;
Ks=150;
Y=0.5;
S=-((X0/Y)*ko*TH)+S0-(Ks*ln(S/S0));
biomassgrowth=((ko*S*X)/(Ks+S))-(kd*X);
end
function substratutilize=substrate(t,S)
X0=2;
Sin=1000;
So=0;
S0=So+Sin;
ko=0.2;
Ks=150;
Y=0.5;
substratutilize=-((ko*X0*S)/(Y*(Ks+S)));
end
ERRORS I HAVE GOT:
Unrecognized function or variable 'S'.
Error in ikinciHW6Q2>biomass (line 32)
S=-((X0/Y)*ko*TH)+S0-(Ks*ln(S/S0));
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in ikinciHW6Q2 (line 7)
[tX,X]=ode45(@biomass, tspan, X0);
0 个评论
采纳的回答
Alan Stevens
2020-12-19
编辑:Alan Stevens
2020-12-19
You use S in calculating X, so you need to solve them together, not one after the other.
Also ln is log in MATLAB.
Try
XS0=[2, 1000];
tspan = [0 40];
[t,XS]=ode45(@BSfn, tspan, XS0);
figure
hold on
plot(t,XS(:,1),t,XS(:,2))
xlabel('time (year)')
ylabel('Concentration (mg/L)')
legend('Biomass','Substrate','location','southeast')
function dXSdt=BSfn(~,XS)
X = XS(1); S = XS(2);
X0=2;
Sin=1000;
So=0;
S0=So+Sin;
V=10;
TH=40;
ko=0.2;
kd=0.01;
Ks=150;
Y=0.5;
S=-((X0/Y)*ko*TH)+S0-(Ks*log(S/S0));
biomassgrowth=((ko*S*X)/(Ks+S))-(kd*X);
substratutilize = -((ko*X0*S)/(Y*(Ks+S)));
dXSdt = [biomassgrowth; substratutilize];
end
4 个评论
Alan Stevens
2020-12-19
[0 40] contains the others! Do you mean something else is meant to change for each of those timespan?
更多回答(1 个)
Alan Stevens
2020-12-19
If you want them in different colours on one graph then just plot(t(1:n),XS(1:n,1),'r',t(n+1:m),XS(n+1:m,1),'b', t(m+1:end),XS(m+1:end,1),'g') where n is the index corresponding to a time of 10, and m corresponds to a time of 20. I'm not sure I've understood what you are trying to achieve though!
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!