Re: NonlinearRegress and numerical functions...
- To: mathgroup at smc.vnet.net
- Subject: [mg20180] Re: [mg20132] NonlinearRegress and numerical functions...
- From: BobHanlon at aol.com
- Date: Sun, 3 Oct 1999 21:07:44 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Larske, If definition of g, use Evaluate so that you only solve the DE once, rather than each time g is called g[t1_] := Evaluate[y[t] /. DSolve[{y'[t] == -y[t] 3, y[0] == 6}, y[t], t][[1]] /. t -> t1]; Fit won't be very accurate for four data points, use more data = {0, 1, 2, 5, 10, 20, 50, 100}; fit = Transpose[{data, g[data]}]; There is no need for a numerical solution (NDSolve) in definition of f. Also, use Evaluate as above. f[t1_, a_, b_] := Evaluate[y[t] /. DSolve[{y'[t] == -y[t] a, y[0] == b}, y[t], t][[1]] /. t -> t1]; Needs["Statistics`NonlinearFit`"] You need to fit to "fit" not "data" BestFitParameters /. NonlinearRegress[fit, f[t, a, 6], {t}, {a}] {a\[Rule]3.} BestFitParameters /. NonlinearRegress[fit, f[t, a, b], {t}, {a,b}] {a\[Rule]3.,b\[Rule]6.} Bob Hanlon In a message dated 10/2/1999 8:47:21 AM, loke at ic.chalmers.se writes: >I've got a big problem making Mathematica realize that my function is >numerical. The following problem illustrates it in a rather simplified >way: > >g[t1_] := y[t] /. DSolve[{y'[t] == -y[t] 3, y[0] == 6}, y[t], t][[1]] /. >t -> t1 > >data = {0, 10, 20, 100}; > >fit = Transpose[{data, g[data]}]; > >f[t1_, a_,b_] := (y[t] /.NDSolve[{y'[t] == -y[t] a, y[0] == b}, y[t], >{t, 0, 100}][[1]]) /.t -> t1 > >NonlinearRegress[data, f[t, a, 6], {t}, {a, {2.9, 3.2}, 2, 4}] > > >It should be rather straightforward to solve this, but NonlinearRegress >seem to evaluate the function 'f' first and the results: > >NDSolve::"ndnum": "Encountered non-numerical value for a derivative at >\ > >\!\(t\) == \!\(2.680466916142905`*^-274\)." > >etc.... > >I've tried to use Unevaluated and Hold but nothing works! >