Monod kinetics and curve fitting

186 views (last 30 days)
kknd on 12 Jul 2012
Commented: Star Strider on 14 Apr 2024
Hi to everyone!
I think i should start immediately with a short description of what i' m dealing with. I have a system of two (2) equations. Generally, these equations are expressed as following:
1. dS/dt = (mmax * X * S)/(Y * (Ks + S)
2. dX/dt = (mmax * X * S)/ (Ks + S) - (b * X)
S = So and X = Xo
In the laboratory, i' ve measured concentration values versus time, e.g. (t, S). Moreover, i know the initial value Xo. As a result, i' m trying to estimate all the other parameters.
So the problem is how do i solve the differential equation system and then use this solution for the curve fitting procedure? I tried simbiology and the absence of a constraint search for the best solutions leads to estimates with no physical meaning.
What should i try next? Perhaps the solution is associated with non linear fitting tools, but i would like a more specific answer by an experienced user, before i start the effort.
Star Strider on 17 May 2017
Post new Questions, and copy the URL here as a reference.

Star Strider on 12 Jul 2012
Edited: Star Strider on 12 Jul 2012
The differential equations may have long since been integrated and published:
so all you need to do is fit them to your data. (They are both free PDFs.) I didn't look through the lists in the articles to be sure they have specifically integrated the equations you're interested in fitting.
I can't claim to be an experienced user with respect to fitting chemical kinetics data, since I haven't done anything with chemical kinetics in a while, but I'm familiar with MATLAB's nonlinear curve fitting routines. Either ‘nlinfit’, ‘lsqcurvefit’, or others should be able to estimate the parameters you want. They can also provide confidence intervals on the parameter estimates with ‘nlparci’ and the fitted estimates with ‘nlpredci’.
TheGymnopedist on 14 Apr 2024
Hi, thanks for the useful solution; however I am getting an error.
"Error using lsqcurvefit. Function value and YDATA sizes are not equal."
This is because although the 2 matricies have the same number of columns (23), but different numbers of rows between ydata (8) and the function value (number varies due to ode solver).
Do you have any suggestions as to how to solve this issue?
Star Strider on 14 Apr 2024
The result of the integration has to match the size of the dependent variable matrix. The ODE solver should not have any effect on this, however if the solver detects a singularity, it will stop and the resulting matrix sizes (specifically the row sizes) will not be equal. The solution for that is to keep trying different initial parameter estimates to lsqcurvefit until you get a set that works. (Functions in the Global Optimization Toolbox can make this easier.) Fitting an (Nx23) data matrix is likely going to be a problem.
Later versions of this approach (for example Parameter Estimation for a System of Differential Equations) estimate the initial conditions as well, so consider that option.
Without knowing more about your particular data and model, I cannot offer specific guidance. For that, it would be best for you to provide that in a new question post rather than pursue it here, posting he code for your differential equations and attaching your data. Also consider using one of the stiff solvers (for example ode15s) in the event that your paraameters have widely-varying magnitudes (several orders-of-magnitude difference). And of course, check your differential equations code for errors, since that can be a source of problems.