[Date Index]
[Thread Index]
[Author Index]
RE: Help with findroot
 To: mathgroup at smc.vnet.net
 Subject: [mg9236] RE: [mg9202] Help with findroot
 From: Ersek_Ted%PAX1A at mr.nawcad.navy.mil
 Date: Fri, 24 Oct 1997 01:00:50 0400
 Sender: ownerwrimathgroup 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
interpolation. If you are interested read about Brent's method in
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 812 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.
email 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
ersek_ted%pax1a at mr.nawcad.navy.mil
Prev by Date:
Re: Horse Race Puzzle
Next by Date:
Re: Help with findroot
Previous by thread:
Re: Help with findroot
Next by thread:
Re: Help with findroot
 