MATLAB Answers

Plotting bacterial growth using odes

29 ビュー (過去 30 日間)
Billy Bob
Billy Bob 2019 年 10 月 16 日
コメント済み: Star Strider 2019 年 10 月 21 日
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 件のコメント

darova 2019 年 10 月 16 日
Show the code you tried

Sign in to comment.


Star Strider
Star Strider 2019 年 10 月 16 日
編集済み: Star Strider 2019 年 10 月 16 日
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
t = ysol.x;
ys = ysol.y;
for k = 1:numel(t)
dy(:,k) = M(t(k),ys(:,k));
plot(t, dy)
xlim([0 35])
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 件のコメント

Billy Bob
Billy Bob 2019 年 10 月 21 日
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
Star Strider 2019 年 10 月 21 日
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.

その他の回答 (1 件)

darova 2019 年 10 月 16 日
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%

  0 件のコメント

Sign in to comment.

Translated by