MathGroup Archive 2011

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

Search the Archive

Re: Problem with FindFit - No more memory available.

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123638] Re: Problem with FindFit - No more memory available.
  • From: Ray Koopman <koopman at sfu.ca>
  • Date: Wed, 14 Dec 2011 05:59:49 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jc7app$p0g$1@smc.vnet.net>

On Dec 13, 2:52 am, Anne Beyer <abe... at stanford.edu> wrote:
> Hi,
>
> I'm trying to fit a model to data using FindFit.  The model includes a
> FindRoot and NIntegrate function.  When I run the program, I get the
> error message that "No more memory is available.  Mathematica kernel
> has shut down."  Do you know what I'm doing wrong?  Any help is highly
> appreciated.
>
> Thanks,
> Anne
>
> << "MultivariateStatistics`"
>
> H[t_, m_, s_] := CDF[LogNormalDistribution[m, s], t]/
> PDF[LogNormalDistribution[m, s], t]
>
> r[t_, c_, m_, s_] := (c + t)/(c*H[t, m, s] + t*(c + t))
>
> t[c_?NumericQ, m_?NumericQ, s_?NumericQ, y_?NumericQ] :=  x /.
> FindRoot[r[x, c, m, s] == y, {x, 0.2}]
>
> U[t_?NumericQ, m_?NumericQ, s_?NumericQ, c_?NumericQ] :=
> NIntegrate[0.5*(c/(c*H[x, m, s] + x*(c + x)))^2, {x, t, Infinity}]
>
> w[c_?NumericQ, m_?NumericQ, s_?NumericQ, y_?NumericQ] :=  U[t[c, m, s,
> y], m, s, c] + (t[c, m, s, y]*c)/(c + t[c, m, s, y])*1/2*y^2
>
> "Data and estimation"
> data = {{0.2, 0.02}, {0.4, 0.05}, {0.6, 0.1}, {0.8, 0.15}, {0.3,
> 0.03}}
> model = w[c, m, s, y]
> estimatedw =  FindFit[data, {model, c > 0, s > 0}, {{c, 1}, {m, 1},
> {s, 1}}, y]
> Show[ListPlot[data], Plot[estimatedw[r], {r, 0, 0.8}], Frame -> True]

This works fine for me (using v5.2), but I made several changes to
your code. Most notably, I eliminated the constraints in FindFit by
solving for the logs of c and s, and I defined estimatedw to be a
function of y.

<<Statistics`ContinuousDistributions`

H[t_,m_,s_] = CDF[LogNormalDistribution[m, s], t]/
              PDF[LogNormalDistribution[m, s], t];

r[t_,c_,m_,s_] = (c+t)/(c*H[t,m,s] + t*(c+t));

t[c_?NumericQ, m_?NumericQ, s_?NumericQ, y_?NumericQ] :=
  x /. FindRoot[r[x,c,m,s] == y, {x, .2}]

U[t_?NumericQ, m_?NumericQ, s_?NumericQ, c_?NumericQ] :=
  NIntegrate[.5*(c/(c*H[x,m,s] + x*(c+x)))^2, {x, t, Infinity}]

w[c_?NumericQ, m_?NumericQ, s_?NumericQ, y_?NumericQ] :=
  With[{x = t[c,m,s,y]}, U[x,m,s,c] + .5 y^2/(1/c + 1/x)]

data = {{.2, .02}, {.4, .05}, {.6, .1}, {.8, .15}, {.3, .03}};

model = w[E^logc, m, E^logs, y];

estimatedw[y_] =  model /.
  FindFit[data, model, {{logc,0},{m,1},{logs,0}}, y]

w[3.99091, -1.61356, 1.07757, y]

Plot[estimatedw[y], {y,0,.8}, Frame->True,
     Prolog->{PointSize[.02],Point/@data}]



  • Prev by Date: Re: color-bar legend for the LisContourPlot
  • Next by Date: Re: NMinimize problem: fct minimized uses FindRoot
  • Previous by thread: Problem with FindFit - No more memory available.
  • Next by thread: "Need tutor" scam on newsgroup?