Filter löschen
Filter löschen

ode45 gave errors

2 Ansichten (letzte 30 Tage)
Carey n'eville
Carey n'eville am 19 Dez. 2020
Kommentiert: Carey n'eville am 19 Dez. 2020
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);

Akzeptierte Antwort

Alan Stevens
Alan Stevens am 19 Dez. 2020
Bearbeitet: Alan Stevens am 19 Dez. 2020
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 Kommentare
Alan Stevens
Alan Stevens am 19 Dez. 2020
[0 40] contains the others! Do you mean something else is meant to change for each of those timespan?
Carey n'eville
Carey n'eville am 19 Dez. 2020
Bearbeitet: Carey n'eville am 19 Dez. 2020
Yes same code with tspan=[0 10]= graph 1 for this case TH=10
tspan=[0 20]= graph 2 for this case TH=20
tspan=[0 40]= graph 3 for this case TH=40 (you'have already wrote it)
I mention plotting these 3 code in unique graph

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Alan Stevens
Alan Stevens am 19 Dez. 2020
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!
  1 Kommentar
Carey n'eville
Carey n'eville am 19 Dez. 2020
Thanks I guess this is true!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Specifying Target for Graphics Output finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by