Re: combining FindFit and ParametricNDSolve?

*To*: mathgroup at smc.vnet.net*Subject*: [mg131748] Re: combining FindFit and ParametricNDSolve?*From*: dantimatter <google at dantimatter.com>*Date*: Fri, 27 Sep 2013 02:29:52 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-outx@smc.vnet.net*Delivered-to*: mathgroup-newsendx@smc.vnet.net*References*: <l1ha8c$33$1@smc.vnet.net>

So it turns out that my institution has a certain amount of Mathematica technical support included in their license. I posed this question to the good people at Wolfram and this was their response: "I've attached a notebook containing examples of how you might successfully use FindFit with your parametric differential equation system. The notebook doesn't contain the results of the FindFit evaluations, as they seemed to be taking a bit of time to evaluate. However, the syntax and usage of all expressions in the notebook is correct as far as I have tested and should give you a fit to your model." The relevant contents of the notebook are: ClearAll[DNA]; solutions = ParametricNDSolve[ {Derivative[1, 0][MG][t, DNA] == a*DNA*NTP[t, DNA]/(Km1 + NTP[t, DNA]) - b*MG[t, DNA], Derivative[1, 0][NTP][t, DNA] == -f*a*DNA*NTP[t, DNA]/(Km1 + NTP[t, DNA]) - d*MG[t, DNA] NTP[t, DNA]/(Km2 + NTP[t, DNA]) - c*NTP[t, DNA]/(Km3 + NTP[t, DNA]), Derivative[1, 0][GFP][t, DNA] == g*d*MG[t, DNA] NTP[t, DNA]/(Km2 + NTP[t, DNA]), NTP[0, DNA] == NTP0, MG[0, DNA] == 0, GFP[0, DNA] == 0}, {MG, NTP, GFP}, {t, 0, 800}, {DNA, 5, 10},(* chosen as example domain *) {a, b, c, d, f, g, Km1, Km2, Km3, NTP0}, Method -> "StiffnessSwitching" ] ClearAll[model]; model = MG /. solutions; parameters = {a, b, c, d, f, g, Km1, Km2, Km3, NTP0}; startingValues = {6.8`, 0.012`, 247, 1.54`, 19.6`, 22.2`, 352200, 127882, 5134.5`, 611628}; (* quick test *) model @@ startingValues %[100, 7] fit = FindFit[ data, {model[a, b, c, d, f, g, Km1, Km2, Km3, NTP0][t, DNA], {a > 0, b > 0, c > 0, d > 0, f > 0, g > 0, Km1 > 1000, Km2 > 1000, Km3 > 1000, NTP0 > 100000}}, Thread@{parameters, startingValues}, {t, DNA} ] On Friday, September 20, 2013 4:06:52 AM UTC-7, dantimatter wrote: > Hello All, > > I'd like to use FindFit to find best fit parameter values for a system of differential equations, but instead of using NDSolve (as is shown in the Help example), I think I need to use ParametricNDSolve to simultaneously fit to multiple datasets that resulted from varying just a single model parameter. The data is in the form of > > > > {{t1_dataset1, param1, y1_dataset1}, {t2_dataset1, param1_dataset1, y2_dataset1}, ... > > {t1_dataset2, param2, y1_dataset2}, {t2_dataset2, param2, y2_dataset2}, . .. > > {t1_dataset3, param3, y1_dataset3}, {t2_dataset3, param3, y2_dataset3}, . .. }; > > > > I'm getting very lost in the syntax. Can anyone give a simple example of how this might be done? > > Thanks