MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: NonlinearRegress and numerical functions...

  • To: mathgroup at smc.vnet.net
  • Subject: [mg20253] Re: [mg20132] NonlinearRegress and numerical functions...
  • From: Mike Trefry <mike.trefry at per.clw.csiro.au>
  • Date: Fri, 8 Oct 1999 18:30:24 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

I had exactly the same problem several months ago. I could get
FindMinimum to work with a function involving NDSolve, but
NonlinearRegress would not work properly. Hence I could not use
Mathematica to generate confidence intervals on its best-fit parameters
for an inverse pde problem.



Larske Ragnarsson wrote:

> Hi again
> Thanks for the help. However as Daniel pointed out, I am trying to use
> NonlinearFit/Regress on a function which is rather complex. Since I want
> to fit on the parameters which are both involved in the DE AND the integration
> I MUST (I think) solve the DE each time. On top of this I must also solve
> it numerically since it has no symbolic solutions (which of course would
> have trivialized the problem).
> Daniel suggested that I use FindMinimum, and it seems to work (I actually
> tried this before) but it is very slow and is often unsuccesful, e.g. this
> error message turns up now and then:
> FindMinimum::regex :
>  Reached the point 5.5743824908216554`*^23 which
> is outside the region {{10^21, 10^25}, {0, 0.2}, {0, 0.2}}.
> which as you can see is quite strange :-) Any suggestions on this matter
> are of course welcome and appreciated!
> Problems most often arise when I try to fit on more than two of the
> parameters.
> There were also some who mentioned that I would need more data, and
> that is true, but since this are real measurements (passivation of defects)
> and the measurements take a while to do, this is what I have. Below
> are my actual problem again, with the data and FindMinimum call. Last,
> there is a mathematica cell expression!
> Thanks again for any help!!
>
> /Larske Ragnarsson
> ----------
>  Statistics`NormalDistribution`
>  Statistics`NonlinearFit`
> k0[T_,Ef0_]:=1.43 10^-12 E^-(Ef0/8.618 10^-5/T)
> k1[T_,Ef1_]:=1.43 10^-12 E^-(Ef1/8.618 10^-5/T)
> Pb0H2[t_, T_, Ef0_, Ef1_, H20_, Pb00_, Pb10_] :=
> (Pb0[t] /. (NDSolve[{Pb0'[t] == -k0[T, Ef0] H2[t]Pb0[t], Pb1'[t] ==
> -k1[T, Ef1] H2[t]Pb1[t], H2'[t] == -k0[T, Ef0]/tox; H2[t] Pb0[t]
> - k1[T, Ef1]/tox H2[t] Pb1[t], Pb0[0] == Pb00, Pb1[0] == Pb10, H2[0]
> == H20},
> {Pb0[t], Pb1[t], H2[t]}, {t,0,10000}, MaxSteps -> 100000])[[1]])/Pb00
> Pb0H2p[t_, T_, Ef0_, Ef1_, H20_, Pb00_, Pb10_] := Pb0H2[t0, T, Ef0,Ef1,
> H20, Pb00, Pb10] /. {t0 -> t}
> Pb0H2DistDouble[t_, T_, Ef0_, sigma0_, Ef1_, sigma1_, H20_, Pb00_, Pb10_]:=
>  NIntegrate[(Pb0H2p[t, T, Eff0, Eff1, H20, Pb00, Pb10]* PDF[NormalDistribution[Ef0,
> sigma0], Eff0]* PDF[NormalDistribution[Ef1,sigma1], Eff1]), {Eff0,
> Ef0 - 5sigma0, Ef0 + 5sigma0}, {Eff1, Ef1 - 5sigma1, Ef1 + 5sigma1},
> Method -> Trapezoidal, AccuracyGoal -> 2, PrecisionGoal -> 2]
> fittingdata= {{0, 170, 1.}, {100, 170, 1.0007}, {1000, 170, 0.97656},
> {10000, 170,
>  0.94368}, {0, 200, 1.}, {100, 200, 0.98866}, {1000,
> 200, 0.9525}, {10000,
>  200, 0.93537}, {0, 230, 1.}, {100, 230, 0.95589},
> {1000, 230,
>  0.92255}, {10000, 230, 0.91}, {0, 260, 1.}, {100,
> 260, 0.9215}, {1000,
>  260, 0.90957}, {10000, 260, 0.90555}}
> NonlinearRegress trial:
> -----------------------
> NonlinearRegress[fittingdata, Pb0H2DistSingle[t, T, 1.51, 0.14,
> 1.57, 0.15, H20, 1.4 10^16, 1.1 10^16], {t, T}, {H20,{10^23,10^24},10^21,10^25}]
> ====> plenty of errors
>
> FindMinimum trial:
> -------------------
> Pb0H2DistDoubleFitMS[Ef0_, sigma0_, Ef1_, sigma1_, H20_, Pb00_, Pb10_]
> :=
>  Plus @@ Apply[(Pb0H2DistDoubleFit[#1, #2, Ef0, sigma0, Ef1,
> sigma1, H20, Pb00,
>
> Pb10] - #3)^2 &amp;, fittingdata, {1}]
> fit2 =
>  FindMinimum[
>  Pb0H2DistDoubleFitMS[1.51, sigma0, 1.57,
> sigma1, H20, 1.4 10^16,
>  1.1 10^16], {H20, {5 10^23,
> 6 10^23}, 10^21,
>  10^25}, {sigma0, {0.1, 0.12},
> 0, 0.2}, {sigma1, {0.1, 0.12}, 0,
>  0.2}, AccuracyGoal -> 50,
> MaxIterations -> 1000,
>  WorkingPrecision -> 100]
> ====>
> FindMinimum::regex :
>  Reached the point 5.5743824908216554`*^23 which
> is outside the region {{10^21, 10^25}, {0, 0.2}, {0, 0.2}}.
>
> --------------------------------
> Mathematica Expression
> --------------------------------
>
> Cell[CellGroupData[{
> Cell["Nonlinearfitting", "Subsection"],
> Cell[BoxData[{
>  \( Statistics`NormalDistribution`\), "\[IndentingNewLine]",
>  \( Statistics`NonlinearFit`\)}], "Input"],
> Cell[BoxData[{
>  \(k0[T_, Ef0_] :=
>  1.43\ 10^\(-12\)\ E^\(-\((Ef0/8.618\
> 10^\(-5\)/
>
> T)\)\)\), "\[IndentingNewLine]",
>  \(k1[T_, Ef1_] :=
>  1.43\ 10^\(-12\)\ E^\(-\((Ef1/8.618\
> 10^\(-5\)/T)\)\)\)}], "Input"],
> Cell[BoxData[{
>  \(Pb0H2[t_, T_, Ef0_, Ef1_, H20_, Pb00_,
>  Pb10_] := \((Pb0[
>
> t] /. \((NDSolve[{\(Pb0'\)[t] == \(-k0[T, Ef0]\)\ H2[t]
>
> Pb0[t], \(Pb1'\)[t] == \(-k1[T, Ef1]\)\ H2[t]
>
> Pb1[t], \(H2'\)[t] == \(-k0[T, Ef0]\)/tox; \
>
> H2[t]\ Pb0[t] - k1[T, Ef1]/tox\ H2[t]\ Pb1[t],
>
> Pb0[0] == Pb00, Pb1[0] == Pb10, H2[0] == H20}, {Pb0[t],
>
> Pb1[t], H2[t]}, {t, 0, 10000},
>
> MaxSteps -> 100000])\)[\([1]\)])\)/
>  Pb00\), "\[IndentingNewLine]",
>  \(Pb0H2p[t_, T_, Ef0_, Ef1_, H20_, Pb00_, Pb10_]
> :=
>  Pb0H2[t0, T, Ef0, Ef1, H20, Pb00, Pb10]
> /. {t0 -> t}\)}], "Input"],
> Cell[BoxData[
>  \(Pb0H2DistDouble[t_, T_, Ef0_, sigma0_, Ef1_, sigma1_,
> H20_, Pb00_,
>  Pb10_] := NIntegrate[\((Pb0H2p[t,
> T, Eff0, Eff1, H20, Pb00, Pb10]*
>
> PDF[NormalDistribution[Ef0, sigma0], Eff0]*
>
> PDF[NormalDistribution[Ef1, sigma1], Eff1])\), {Eff0,
>  Ef0 - 5
> sigma0, Ef0 + 5 sigma0}, {Eff1, Ef1 - 5 sigma1,
>  Ef1 + 5
> sigma1}, Method -> Trapezoidal, AccuracyGoal -> 2,
>  PrecisionGoal -> 2]\)],
> "Input"],
> Cell[BoxData[
>  \(fittingdata = {{0, 170, 1. }, {100, 170, 1.0007},
> {1000, 170,
>  0.97656}, {10000,
> 170, 0.94368}, {0, 200, 1. }, {100, 200,
>  0.98866}, {1000,
> 200, 0.9525}, {10000, 200, 0.93537}, {0, 230,
>  1. }, {100,
> 230, 0.95589}, {1000, 230, 0.92255}, {10000, 230,
>  0.91}, {0, 260,
> 1. }, {100, 260, 0.9215}, {1000, 260,
>  0.90957}, {10000,
> 260, 0.90555}}\)], "Input"],
> Cell[BoxData[
>  \(NonlinearRegress[fittingdata,
>  Pb0H2DistSingle[t, T, 1.51, 0.14, 1.57,
> 0.15, H20, 1.4\ 10^16,
>  1.1\ 10^16], {t, T}, {H20,
> {10^23, 10^24}, 10^21,
>  10^25}]\)], "Input"],
> Cell[BoxData[{
>  \(Pb0H2DistDoubleFitMS[Ef0_, sigma0_, Ef1_, sigma1_,
> H20_, Pb00_, Pb10_] :=
>  Plus @@ Apply[\((Pb0H2DistDoubleFit[#1,
> #2, Ef0, sigma0, Ef1, sigma1,
>
> H20, Pb00, Pb10] - #3)\)^2 &amp;,
>  fittingdata,
> {1}]\), "\[IndentingNewLine]",
>  \(fit2 =
>  FindMinimum[
>  Pb0H2DistDoubleFitMS[1.51,
> sigma0, 1.57, sigma1, H20, 1.4\ 10^16,
>  1.1\ 10^16],
> {H20, {5\ 10^23, 6\ 10^23}, 10^21,
>  10^25}, {sigma0,
> {0.1, 0.12}, 0, 0.2}, {sigma1, {0.1, 0.12}, 0,
>  0.2}, AccuracyGoal
> -> 50, MaxIterations -> 1000,
>  WorkingPrecision -> 100]\)}],
> "Input"]
> }, Open ]]

--





  • Prev by Date: Re: Why Doesn't N[Pi,i] Give i Digits For Small i, Mathematica 4,on NT
  • Next by Date: Re: Why Doesn't N[Pi,i] Give i Digits For Small i, Mathematica 4,on NT
  • Previous by thread: Re: NonlinearRegress and numerical functions...
  • Next by thread: Rationalize[] in Mathematica3 vs. Mathematica4