MathGroup Archive 2011

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

Search the Archive

Re: Using FindRoot on an equation involving Log terms

  • To: mathgroup at smc.vnet.net
  • Subject: [mg115743] Re: Using FindRoot on an equation involving Log terms
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Wed, 19 Jan 2011 05:30:53 -0500 (EST)

expr = 110.52499999999998 + (300. - 135.52499999999998/(1 - x)) (1 - x) - 
   300. x - 135.52499999999998 Log[1 - x] + 135.52499999999998 Log[x];

Use the form of FindRoot that avoids use of derivatives

FindRoot[expr, {x, 0.5, 0.9}]

{x -> 0.849823}

Alternatively,

expr2 = Rationalize[expr] // FullSimplify

275 - 600*x - (5421/20)*ArcTanh[1 - 2*x]

Reduce[expr2 == 0, x, Reals] // N // ToRules

{x -> 0.849823}


Bob Hanlon

---- Andrew DeYoung <adeyoung at andrew.cmu.edu> 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

FindRoot[expr, {x, 0.7}]

do I get the seemingly "correct" root: {x -> 0.849823}.

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



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