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: [mg115769] Re: Using FindRoot on an equation involving Log terms
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Thu, 20 Jan 2011 06:30:15 -0500 (EST)

Starting just below the local max can also give the correct answer (more  
or less by accident).

For instance:

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

FindRootPlot[expr, {x, 0.28}, PlotRange -> {{0, 1}, {-100, 100}}]

Bobby

On Wed, 19 Jan 2011 04:26:20 -0600, Gabriel Landi <gtlandi at gmail.com>  
wrote:

> Hey Andrew,
>
> The problem is likely the direction it uses to begin the search.
> x = 0.655 is a minimum. If you give a initial value above that it finds  
> your
> root.
> If you give a initial value below that it will go the other way which
> eventually diverges when x approaches zero.
>
> You can take a better look using the following two lines of code:
>
> << Optimization`UnconstrainedProblems`
>
> FindRootPlot[expr, {x, 0.6}, PlotRange -> {{0, 1}, {-100, 100}}]
>
>
> (The output graph comes out bugged but you can still see what you need to
> see: the steps it took).
>
> The colors are explained in
> http://reference.wolfram.com/mathematica/tutorial/UnconstrainedOptimizationPlottingSearchData.html
>
>
> By the way, FindInstance works:
>
>
>
> FindInstance[expr == 0, x, Reals] // N
>
>
> Cheers,
>
>
> Gabriel
>
>
>
> On Tue, Jan 18, 2011 at 8:51 AM, 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
>>


-- 
DrMajorBob at yahoo.com


  • Prev by Date: Re: The new (v.8.0) distribution plots using a numerical
  • Next by Date: Re: Do I need MathLink to run finite-difference fast enough
  • Previous by thread: Re: Using FindRoot on an equation involving Log terms
  • Next by thread: Re: Using FindRoot on an equation involving Log terms