MATLAB Answers

0

Plotting bacterial growth using odes

Asked by Billy Bob on 16 Oct 2019 at 6:56
Latest activity Commented on by Star Strider
on 21 Oct 2019 at 0:31
Hi,
I would like to plot the following functions using Matlab:
dx/dt v. time and ds/dt v. time (with dx/dt on the y axis and time on the x axis)
The expression for dx/dt is given as the following:
---- where S and X are unknown
there is an expression for S in this case:
--- where S and X are unknown.
I know how to plot the above system by converting the differentials to first order and then solving them using 'ode45'. However, this gives me the plots for X v. t and S v. t.
What I would like instead are plot of the differential equations themselves against time. Any help in this regard would be much appreciated!

  1 Comment

darova
on 16 Oct 2019 at 11:44
Show the code you tried

Sign in to comment.

2 Answers

Answer by Star Strider
on 16 Oct 2019 at 11:41
Edited by Star Strider
on 16 Oct 2019 at 18:02
 Accepted Answer

I believe Monod kinetics and curve fitting can help. You are not fitting data, so just use the ODE and ode45 call syntax.
EDIT — (16 Oct 2019 at 17:30)
If you want to plot the differential equations themselves, substitute ‘t’ and ‘y’ back into ‘M’ to get the derivatives:
% Change to First Order%
[V,Sbs] = odeToVectorField([ode1,ode2,ode3])
M = matlabFunction(V,'vars',{'t','Y'})
% Setting Intervals%
interval = [0 1000];
% Initial Conditions%
y0 = [X0 S0 P0];
ysol = ode45(M,interval,y0)
% Graph Plots%
fplot(@(x)deval(ysol,x,1), [0, 35]);
hold on
fplot(@(x)deval(ysol,x,2), [0, 35]);
fplot(@(x)deval(ysol,x,3), [0, 35]);
hold off
legend(string(Sbs))
t = ysol.x;
ys = ysol.y;
for k = 1:numel(t)
dy(:,k) = M(t(k),ys(:,k));
end
figure
plot(t, dy)
grid
legend(string(Sbs))
xlim([0 35])
title('Derivatives')
Alternatively, you can use the gradient function on the solved values of ‘y’, although you would need to specify ‘interval’ as a vector of more than two elements using the linspace function for best results, since gradient prefers regularly-sampled vectors. It all depends on what you want to do.
EDIT — (16 Oct 2019 at 17:59)
#Plotting bacterial growth using odes.png
The plot image is not appearing when I paste it in, so I attached it as well.

  2 Comments

Billy Bob on 21 Oct 2019 at 0:20
Hi! Thank you for the help, it was much appreciated. I tried it and the code worked! I only have one question in that when I do run the code, in the derivative chart, all of the graph should be above thex-axis. Yet, by using the code you provided, the graph for the S-derivative is below the x-axis. Is there a way I can plot the 3 derivatove graphs separately and then reflect the S graph?
Star Strider
on 21 Oct 2019 at 0:31
As always, my pleasure.
You can take the absolute value of if you like (or the absolute values of all of the derivatives), however I strongly advise against that. The integrated value of decreases for the entire time, then evenutally levels off at 0. The derivative reflects that.
I would not change anything.

Sign in to comment.


Answer by darova
on 16 Oct 2019 at 17:10

How do you know that it is the correct order (why not S,X,P ?)
y0 = [X0 S0 P0];
Try this to plot X vs S
[t,ysol] = ode45(M,interval,y0)
% Graph Plots%
plot(ysol(:,1),ysol(:,2))

  0 Comments

Sign in to comment.