Re: How to make fitting code using NDSolve?
- To: mathgroup at smc.vnet.net
- Subject: [mg127767] Re: How to make fitting code using NDSolve?
- From: "Kevin J. McCann" <kjm at KevinMcCann.com>
- Date: Mon, 20 Aug 2012 21:29:23 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <k0sroq$jn4$1@smc.vnet.net>
There are a couple of problems below.One is that you have a number of subscripted variables that need to be Symbolized first. Also, your call of model in FindFit has both the variables as inputs (ok), and the desired output, but the latter is not defined as an output in your definition of model. I prefer to roll my own lsq rather than use FindFit, and have included a notebook under separate email. Hope this helps. Kevin On 8/20/2012 4:16 AM, JYeom wrote: > Hello, > I am trying to fit some basic data to a partial differential equation- here are the data points: > > data = { > {2.113, 2.915*^-7}, {2.256, 2.758*^-7}, {2.303, 2.567*^-7}, {2.493, > 2.343*^-7}, {2.635, 2.085*^-7}, {2.825, 1.838*^-7}, {3.015, > 1.614*^-7}, {3.205, 1.412*^-7}, {3.538, 1.199*^-7}, {3.775, > 1.03*^-7}, {4.108, 8.173*^-8}, {4.487, 6.266*^-8}, {4.915, > 4.695*^-8}, {5.295, 3.349*^-8}, {5.912, 2.34*^-8}, {6.672, > 1.554*^-8}, {7.527, 7.692*^-9}, {8.524, 5.448*^-9}, {9.426, > 4.326*^-9}, {10.23, 3.205*^-9}, {10.99, > 2.083*^-9}, {11.99, -1.608*^-10} > } > > And there are four parameters to fit in our fitting equation: > > model[ka_?NumberQ, kr_?NumberQ, kd_?NumberQ, > kb_?NumberQ] := (model[ka, kr, kd, kb] = > First[Subscript[Dye, 0] /. NDSolve[{ > Derivative[1][Subscript[Dye, 0]][ > t] ==\[VeryThinSpace]-ka Subscript[Dye, 0][t] + > kr Subscript[Dyes, 0][t], Subscript[Dye, 0][0] == 1.22 10^-6, > Derivative[1][Subscript[Dye, 1]][ > t] == -ka Subscript[Dye, 1][t] + kr Subscript[Dyes, 1][t], > Subscript[Dye, 1][0] == 0, > > Derivative[1][Subscript[Dyes, 0]][t] == > ka Subscript[Dye, 0][t] - kr Subscript[Dyes, 0][t] - > kd Subscript[CI, 0][t] Subscript[Dyes, 0][t] - > kd /2 * Subscript[CI, 1][t] Subscript[Dyes, 1][t], > Subscript[Dyes, 0][0] == 0, > Derivative[1][Subscript[Dyes, 1]][t] == > ka Subscript[Dye, 1][t] - > kd Subscript[CI, 1][t] Subscript[Dyes, 0][t] - > kr Subscript[Dyes, 1][t] - > kd Subscript[CI, 0][t] Subscript[Dyes, 1][t], > Subscript[Dyes, 1][0] == 0, > > Derivative[1][Subscript[CI, 0]][ > t] == -kd Subscript[CI, 0][t] Subscript[Dyes, 0][t] - > kd/2* Subscript[CI, 1][t] Subscript[Dyes, 1][t] - > kb Subscript[CI, 0][t] Subscript[HDye, 0][t] - > kb/2* Subscript[CI, 1][t] Subscript[HDye, 1][t], > Subscript[CI, 0][0] == 3.18 10^-3, > Derivative[1][Subscript[CI, 1]][ > t] == -kd Subscript[CI, 1][t] Subscript[Dyes, 0][t] - > kd/2* Subscript[CI, 0][t] Subscript[Dyes, 1][t] - > kb Subscript[CI, 1][t] Subscript[HDye, 0][t] - > kb/2*Subscript[CI, 0][t] Subscript[HDye, 1][t], > Subscript[CI, 1][0] == 0, > > Derivative[1][Subscript[HDye, 0]][t] == > kd Subscript[CI, 0][t] Subscript[Dyes, 0][t] + > kd/2* Subscript[CI, 1][t] Subscript[Dyes, 1][t] - > kb Subscript[CI, 0][t] Subscript[HDye, 0][t] - > kb /2* Subscript[CI, 1][t] Subscript[HDye, 1][t], > Subscript[HDye, 0][0] == 0, > Derivative[1][Subscript[HDye, 1]][t] == > kd Subscript[CI, 1][t] Subscript[Dyes, 0][t] + > kd Subscript[CI, 0][t] Subscript[Dyes, 1][t] - > kb Subscript[CI, 1][t] Subscript[HDye, 0][t] - > kb Subscript[CI, 0][t] Subscript[HDye, 1][t], > Subscript[HDye, 1][0] == 0 > }, {Subscript[Dye, 0][t], Subscript[Dyes, 0][t], > Subscript[CI, 0][t], Subscript[HDye, 0][t], > Subscript[Dye, 1][t], Subscript[Dyes, 1][t], > Subscript[CI, 1][t], Subscript[HDye, 1][t]}, {t, 0, 12}]]) > > In the NDSolve, what we want to fit is Dye0[t]. So we wrote code for fitting using FindFit: > > fit = FindFit[data, > model[ ka, kr, kd, kb][Subscript[Dye, > 0]], {{ka, 10^(-4)}, {kr, 10^(-4)}, {kd, 500}, {kb, 500}}, > Subscript[Dye, 0]] > > However, we encountered the error message like this: > > FindFit::nrlnum: "The function value {-2.915*10^-7+Subscript[Dye, 0][2.113],-2.758*10^-7+Subscript[Dye, 0][2.256],-2.567*10^-7+Subscript[Dye, 0][2.303],<<16>>,-3.205*10^-9+Subscript[Dye, 0][10.23],-2.083*10^-9+Subscript[Dye,0][10.99],1.608*10^-10+Subscript[Dye, 0][11.99]} is not a list of real numbers with dimensions {22} at {ka,kr,kd,kb} = {0.0001,0.0001,500.,500.}." > > The desirable solution for parameter is around ka= 0.67, kr = 10^(-3), kd=1600, kb=1600. > > Does anyone know what I am doing wrong? >