       RE: Help with findroot

• To: mathgroup at smc.vnet.net
• Subject: [mg9236] RE: [mg9202] Help with findroot
• Date: Fri, 24 Oct 1997 01:00:50 -0400
• Sender: owner-wri-mathgroup at wolfram.com

```Following up on the discussion between Sean Ross and Karl: |>
|> I'm having a problem using findroot to solve an equation.  Perhaps |>
someone
|>  could shed some light on what's wrong. |>
|> FindRoot[Sqrt[x/(1.2 10^ -4)]==-0.1*Tan[Sqrt[x/(1.2*10^ |>
-4)]],{x,0.1,0.1,2}]
|>
|To shed some light on what is happening, try plotting both |sides of
your equation independently and see where they cross  ie: |

I think it's better to plot the difference between the left hand
side  and right hand side.
The solution is where the difference is zero.  I think this is why the
command is called FindRoot instead of FindEqual.

|
|There are two methods that come to mind. |
|1) Engineering approach.  Tangent changes value so rapidly near the
|roots that any kind of precision is going to be both hard to achieve
|and potentially meaningless, so just do the graphic solution and let
|the roots be equal to the vertical asymptotes of Tangent, ie
x/(1.2*10^ |-4)=n Pi/2.  Before proceeding, ask yourself exactly why
you need those |roots and how much precision you need and how hard you
are willing to |work to get it.
|
I agree with the above.
|
|2)  For really ugly root finding problems, the Bisection method is
|usually the best.  It is generally the first algorithm mentioned in
|Numerical Methods textbooks because it is very simple.  It is
|comparatively slow, but always converges and does not depend on
|derivatives or slopes.
|
However, Mathematica will use Brent's method if f[x_]:= (left hand side
- right hand side) has opposite sign at the two initial guesses.

Brent's method is very effective.
It's uses a combination of bisection and 2nd order inverse
Numerical Recipes in C.

Brent's method is also guaranteed to converge, and doesn't need values
of  the functions derivatives.

If your problem has any practical significance, and the function is
continuous at a first order root you can be pretty sure Brent's method
will  converge faster than bisection.  Usually 8-12 iterations does the
trick.

However, the Bisection method will converge the fastest in the worst
case  scenario.

Note:  I have special bag of tricks for efficiently finding a multiple
root.
e-mail me if you are interested.

|
|As a general point of problem solving technique, it is usually a good
|idea to learn as much about your problem as you can before attempting
|to solve it.  In your case, graphing out the functions would have told
|you that something was fishy before starting out.  It also shows that
|no collection of canned routines(like mathematica) can substitute for
a |working knowledge of numerical methods. |

I agree with the above.

Ted Ersek