Modeling Yeast Growth with a Discrete Logistic Equation
This article presents a step‑by‑step mathematical modeling of yeast biomass growth using a discrete logistic model, fits the model parameters via least‑squares, validates it with Python code, and discusses its prediction error and broader applicability to S‑shaped population dynamics.
Yeast Growth
Problem
The table provides measurements of yeast culture biomass over time; the task is to build a mathematical model that simulates the growth process.
Analysis
Plotting the biomass against time reveals an S‑shaped curve that increases monotonically and appears to approach a stable value, suggesting a discrete Logistic model for the trend.
Model formulation
We adopt the discrete Logistic model where r is the intrinsic growth rate and N is the system's carrying capacity.
To solve the model, unknown parameters are estimated using the least‑squares method. By rewriting the equation and substituting the 19 observed values, we obtain an over‑determined linear system for the parameters.
Using Python, the parameters are fitted and the fitted curve is compared with the original data (see the figure below).
Verification and Evaluation
The model’s maximum relative error on known points is 31.47%, indicating that predictions for intermediate data points have a noticeable deviation and the model could be further improved.
The discrete Logistic model is not only suitable for yeast culture dynamics but can also be applied to other populations exhibiting S‑shaped growth.
Code
<code>import numpy as np
from matplotlib.pyplot import rc, plot, show, legend, figure
rc('font', size=16); rc('font', family='SimHei')
a = np.loadtxt("Pdata13_6.txt")
plot(np.arange(0, 19), a, '*')
show()
b = np.c_[a[:-1], -a[:-1]**2]
c = np.diff(a)
x = np.linalg.pinv(b).dot(c)
r = x[0]
N = x[0] / x[1]
print("r,s,N的拟合值分别为:", r, '\t', x[1], '\t', N)
Tx = np.zeros(19)
Tx[0] = 9.6
x0 = 9.6
for i in range(1, 19):
xn = x0 + r * x0 * (1 - x0 / N)
Tx[i] = xn
x0 = xn
figure()
plot(np.arange(0, 19), a, '*')
plot(np.arange(19), Tx, 'o-')
legend(("原始数据点", "拟合值"), loc='best')
show()
delta = np.abs((Tx - a) / a)
print("所有已知点的预测值的相对误差", delta)
print("最大相对误差:", delta.max())
</code>References
Python数学实验与建模 / 司守奎, 孙玺菁, 科学出版社
Model Perspective
Insights, knowledge, and enjoyment from a mathematical modeling researcher and educator. Hosted by Haihua Wang, a modeling instructor and author of "Clever Use of Chat for Mathematical Modeling", "Modeling: The Mathematics of Thinking", "Mathematical Modeling Practice: A Hands‑On Guide to Competitions", and co‑author of "Mathematical Modeling: Teaching Design and Cases".
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.