Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Using FindRoot on an equation involving Log terms

  • To: mathgroup at smc.vnet.net
  • Subject: [mg115721] Using FindRoot on an equation involving Log terms
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Wed, 19 Jan 2011 05:26:31 -0500 (EST)

Andrew DeYoung wrote:
> Hi,
> 
> I am trying to find the root of a certain expression in Mathematica
> version 7:
> 
> expr = 110.52499999999998 + (300. - 135.52499999999998/(1 - x)) (1 -
> x) - 300. x - 135.52499999999998 Log[1 - x] + 135.52499999999998
> Log[x]
> 
> It appears to plot fine, for example using Plot[expr, {x, 0, 1}].  The
> plot shows that there should be a root at about x=0.85.  However, when
> I try to find this root, using for example the following:
> 
> FindRoot[expr, {x, 0.5}]
> 
> I get an error message:
> 
> "FindRoot::lstol: The line search decreased the step size to within
> tolerance specified by AccuracyGoal and PrecisionGoal but was unable
> to find a sufficient decrease in the merit function.  You may need
> more than MachinePrecision digits of working precision to meet these
> tolerances."
> 
> and it prints a seemingly incorrect (according to the qualitative form
> of the plot) result: {x -> 0.344678}.  Only if I use for example

The plot also shows that 0.5 is not in the basin of attraction for 
Newton's method to find the root, and that it will send one in the 
direction of the local max which is around x=0.35

Other methods might work better. For example, if you provide two start 
points that bracket a root, then Brent's method will be used and it will 
successfully find this root.

In[84]:= FindRoot[expr, {x, 0.5, .9}]
Out[84]= {x -> 0.849823}


> FindRoot[expr, {x, 0.7}]
> 
> do I get the seemingly "correct" root: {x -> 0.849823}.

The zone of attraction for the root is to the right of the local min, 
which appears to be somewhere around x=0.65.


> Can you help me see why the FindRoot is getting stuck at {x ->
> 0.344678} when I use starting values far away from 0.7 or 0.8?  I will
> ultimately want to find the roots of many similar functions, which may
> have more than one "actual" root, so it would be helpful if I could
> see why FindRoot[expr, {x, 0.5}] does not give {x -> 0.849823}.  (also
> when I tried NSolve[expr==0,x], Mathematica will not solve it.)
> 
> Thank you,
> 
> Andrew DeYoung
> Carnegie Mellon University

Solve or NSolve with restrictions on the domain will handle this (in 
version 8).

In[82]:= Solve[{expr == 0, 0 <= x <= 1}, x]
Out[82]= {{x -> 0.849823}}

Daniel Lichtblau
Wolfram Research


  • Prev by Date: Re: Using FindRoot on an equation involving Log terms
  • Next by Date: Re: Using FindRoot on an equation involving Log terms
  • Previous by thread: Re: Using FindRoot on an equation involving Log terms
  • Next by thread: Re: Using FindRoot on an equation involving Log terms