Services & Resources / Wolfram Forums
MathGroup Archive
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1998

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

Search the Archive

Re: Possible bug in FindRoot[] in Mathematica 3.0

Adrian Cable wrote:
> Hi there,
> I think I've possibly found a bug in Mathematica 3.0. Consider the
> equation:
>         2^x + 3^x = 5^x
> Well, it's obvious that x = 1 is a solution, and you can check with
> Plot[] that x = 1 is indeed the only solution. When I try to Solve[]
> this with Mathematica, it says:
> Solve::"tdep":
>     "The equations appear to involve transcendental functions of the \
> variables in an essentially non-algebraic way."
> This is fair enough - I have no idea how to solve this type of equation
> without some numerical method either. The problem comes when I try to
> use FindRoot:
> In[83]:= FindRoot[2^x+3^x==5^x,{x,0}] Out[83]:= {x -> -21.1781}
> -21? I'm sorry? Obviously, the iterative formula it has created
> (presumably by the Newton-Raphson process) for the equation diverges
> when the starting point is taken as x = 0. However, if I do something
> like this, it handles it correctly:
> In[86]:= FindRoot[2^x+3^x==5^x,{x,-1}] FindRoot::"cvnwt":
>     "Newton's method failed to converge to the prescribed accuracy after
> \
> 15 iterations."
> Out[86]:= {x -> -21.0059}
> So, why does Mathematica correctly recognise that the iterative sequence
> does not converge in the second case, yet it doesn't recognise this in
> the first case and thus returns a totally bogus result without any
> error message?
> This looks like a bug to me. Or am I just missing something here?
> Thanks, cheers,
> Adrian Cable.

It is converging. To a value outside the complex plane, unfortunately.
Numeric routines can be like that.

In[9]:= ee = 2^x + 3^x - 5^x;

In[10]:=  Limit[ee, x->-Infinity]
Out[10]= 0

In[11]:= FindRoot[ee, {x,0}]
Out[11]= {x -> -21.1781}

In[12]:= ee /. %
Out[12]= 4.21538 10

To get values for x that leave smaller residuals, you might do

In[14]:=  FindRoot[ee, {x,0}, AccuracyGoal->32, MaxIterations->500]
Out[14]= {x -> -107.739}

In[15]:= ee /. %
Out[15]= 3.69142 10

Just a guess, but possibly when your starting point is -1 and it gives
{x -> -21.0059} the residual is just large enough that it fails to
satisfy the Automatic AccuracyGoal.

In[24]:= FindRoot[ee, {x,-1}, AccuracyGoal->5] Out[24]= {x -> -16.6796}

In[25]:= ee /. %
Out[25]= 9.53764 10

By the way, the expression ee is entire, that is, analytic throughout
the complex plane. Hence the equation ee == constant will have
infinitely many solutions for all but at most one value of constant. It
is straightforward to show that x->1 is the only real root, hence the
other solutions are complex-valued. Here is one I found by

In[32]:=  FindRoot[ee, {x,4+40I}]
Out[32]= {x -> -0.638232 + 40.1885 I}

In[33]:= ee /. %
                   -10             -10 Out[33]= 2.47291 10    - 1.65612
10    I

Daniel Lichtblau
Wolfram Research

  • Prev by Date: Re: Writing output to text files
  • Next by Date: Mathlink problem with lists of reals
  • Prev by thread: Possible bug in FindRoot[] in Mathematica 3.0
  • Next by thread: Re: Possible bug in FindRoot[] in Mathematica 3.0