How can I parameter estimate many unknown parameters in a system of nonlinear ODE?

4 views (last 30 days)
george
george on 8 Aug 2018
Commented: george on 16 Aug 2018
Hello,
I have been following the links below:
  • https://www.mathworks.com/matlabcentral/answers/43439-monod-kinetics-and-curve-fitting
  • https://www.mathworks.com/matlabcentral/answers/361328-parameter-estimation-and-curve-fitting?s_tid=answers_rc1-2_p2_MLT
  • https://www.mathworks.com/matlabcentral/answers/386011-help-me-please-how-to-find-parameter-estimation-with-fminsearch-and-solve-it-with-ode45-why-it-al
  • https://www.mathworks.com/matlabcentral/answers/329901-solving-coupled-differential-equations
I find them helpful, but when I implement the method to my own system of ODE. I am generating wrong answers with the initial guesses I am using from a research manuscript I am following (the parameters used to refit the ode model does not match well with the exp data graphs). So I decided to randomly guess the initial parameter guess using rand. But the code takes over 2 hours to run, so I usually terminate it before the code actually finishes. I tried to use MultiStart to get better parameter initial guesses, but I am not sure if it is working. Am I doing something wrong with the code? Would it be best to use something else other than lsqcurvefit?
I have attached the excel file for the data and the code itself. Many thanks if this problem can be fixed, I have been stuck for weeks now!

Answers (1)

Arthur Goldsipe
Arthur Goldsipe on 14 Aug 2018
I see that you mentioned SimBiology in a comment on the previous answer. I'm a developer on that product, so I wanted to share that it is designed specifically for this sort of problem. You can build the model graphically or programmatically with building blocks like reactions that more closely map to the underlying biology. (Not to mention the fact that this can save you a lot of bookkeeping.) You can also give variables more meaningful names, instead of having to figure out what y(6)/c(38) means.
There are also a lot of performance benefits. The way we do the ODE simulations in SimBiology is also typically quite a bit faster than doing the simulations in core MATLAB yourself. My rule of thumb is that we usually give at least a 20X speedup.
I personally have also spent a lot of time trying to make it easier and faster to do "large" fitting problems exactly like this. When using gradient-based optimization methods like lsqnonlin, we can often provide more accurate estimates of gradients than the default. This can help with the convergence of the algorithm. I have also worked on a couple of global optimization methods that make it easier to scan a large parameter space. Most recently, I implemented an enhanced scatter search algorithm that combines both global and local optimization techniques.
If this sounds interesting to you, I can take a look to see how much work I think it would be to convert your problem over to SimBiology.
  3 Comments
george
george on 16 Aug 2018
Thank you for following up!
I will try the suggestion above and directly enter my system of ode into SimBiology using rate rules. I have attached an image of the reaction rates for extracellular concentration in an older comment called "Sample Reaction eqns." Let me know if you need that PDF from an earlier comment.
Thanks again. I will try that rate rule method.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!