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