Re: Re: Fitting parameters of nonlinear diff equation system
- To: mathgroup at smc.vnet.net
- Subject: [mg81505] Re: [mg81303] Re: Fitting parameters of nonlinear diff equation system
- From: "Szabolcs Horvát" <szhorvat at gmail.com>
- Date: Wed, 26 Sep 2007 06:39:52 -0400 (EDT)
- References: <fcnl8h$s85$1@smc.vnet.net> <200709181002.GAA04068@smc.vnet.net>
Hi Paul,
I am writing to warn you that something *might* have gone wrong with
the calculations. (Let's hope that it is just a misunderstanding).
On 24/09/2007, Paul Thomas <paul.pgt at gmail.com> wrote:
> Hi everyone,
>
> Just wanted to follow up with this. The e-mail below from Szabolcs was very
> helpful and it did work, with just a minor syntax change. He suggested the
> following code for fitting a system of differential equations with multiple
> parameters:
>
> fun[a_, b_, c_] :=
> First[
> f /. NDSolve[
> deq /. {b1 -> a, h -> b, r -> c},
> {v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, f},
> {t, 0, 10} (* dummy values *)
> ]]
>
> opt[a_?NumericQ, b_?NumericQ, c_?NumericQ] :=
> Norm[fun[a, b, c] /@ tvals - fvals]
>
> Now use FindMinimum on 'opt', like this:
>
> FindMinimum[opt[a,b,c], {{a,1.}, {b,2.}, {c,3.}}]
>
> One change I had to make was in the "fun[a_,b_,c_]" equation--instead of
> "f/.NDSolve" it should be "f[t]/.NDSolve" etc etc.
While I admit that I did not test these commands thoroughly (as I did
not have access to the data), something seems to be wrong with these
modifications. I meant fun[] to return a function, not a number (note
that we later map this function to a list) ... if f is changed to
f[t], then the return value will not be a function.
> The other change I had to make was in the opt equation. I just needed to put
> parentheses around the "(fun[a, b, c] /@ tvals)" term--otherwise it thinks
> the "/@" Map command is being applied to tvals-fvals.
Something seems to be wrong here too, as /@ has a higher precedence than - .
Example:
In[1]:=
a={1,2,3};
b={4,5,6};
In[3]:= f/@a-b
Out[3]= {-4+f[1],-5+f[2],-6+f[3]}
> I want to thank everyone for their comments, I'm so pleased with this
> technique now. I think it works very much like the documentation says
> FindFit works, but it is much more flexible in terms of the data you can
> input for the fit and also allows a whole system to be solved with data only
> from a single equation. To me, those are both huge advantages. Thanks!
>
> Paul
Szabolcs
- References:
- Re: Fitting parameters of nonlinear diff equation system
- From: Szabolcs Horvát <szhorvat@gmail.com>
- Re: Fitting parameters of nonlinear diff equation system