MathGroup Archive 1998

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

Search the Archive

Re: any ideas on this ? (solving nonlinear equations)


  • To: mathgroup@smc.vnet.net
  • Subject: [mg11010] Re: any ideas on this ? (solving nonlinear equations)
  • From: weber@math.uni-bonn.de (Matthias Weber)
  • Date: Mon, 16 Feb 1998 18:15:18 -0500
  • Organization: RHRZ - University of Bonn (Germany)
  • References: <6c8ql9$avb@smc.vnet.net>

In article <6c8ql9$avb@smc.vnet.net>, fenris@hotmail.com wrote:

> I am having a problem with a set of 3 non-linear equations in three
> unkowns. They have to be solved with a non-linear method such as
> findroots. The reason that i am not bothering to post the exact
> equations is that i feel it is irelavant to the question i have. With a
> system of m non-linear equations in m unknowns, how does one go about
> determining the starting values the findroots requires for each of the
> m variables? I have looked through my numerical texts, they explain
> nicely how to solve the system, but no explanation on how to get the
> starting points for iteration? Any help on how to obtain the starting
> values in general would be appreciated.
> 

Because an arbitrary function can be as bad as you want, there is NO way
to find a zero of a function. This is especially hard in dim>1, because
there is no way to bracket a zero.

The usual textbook methods provide a good way to find a solution if you
have a good initial guess. But these are mostly based on interpolation
methods, and when one uses interpolating functions for extrapolation,
there is not much hope in general.

The first thing one should probably do is to think about ones problem:
Sometimes the function in question has special properties (polynomial,
harmonic,...) which can be useful.
If all fails, my recipe at the moment is to use random initial points
and apply as many methods as are available.

Unfortunately, Mathematica has not too much to offer here, but a couple
of routines can easily be implemented by hand. Here are some
suggestions:

Use FindMinimum on a  norm of your function like Sum@@. Findminimum
appears to be more robust than root finders (also much slower...). 
You might also want to implement the Simplex downhill method (numerical
recipes in C) by yourself, because FindMinimum appears to apply a
coordinate wise minimazition first and to stop if the initial point is
a minimum coordinate wise.  Then you can use variations of the secant
method: it is quite easy to damp this method so that the stepsize
becomes small: Just find an approximate direction of largest decent and
go just a little bit in that direction.  

Similarly, you can try an inductive procedure as in the inductive proof
of the implicit function theorem: Solve for one variable such that one
coordinate function vanishes, etc.

Good luck.

Matthias Weber



  • Prev by Date: Re: Get rid of Input cells when printing?
  • Next by Date: why use ValueBox? (was: saving notebook styles)
  • Prev by thread: Re: sort and find in MATHEMATICA like in MATLAB
  • Next by thread: why use ValueBox? (was: saving notebook styles)