Let's assume you're looking for moderate accuracy, say 10 sig figs. If a,b >> 1, but c < 4ab or so, then x ~ 1 and x ~ c/ab give good starting values for the secant method: say 10 sig figs in 10-25 iterations. When c is larger, as Gene points out, x ~ c^(1/5) : of course, you need a separate iteration just to get this starting value. Even then, the secant method is useless until the two function values are roughly the same size --- until you get to that state, you will probably have to use binary subdivision as he suggests. Given that situation, it may well be faster to forget about fifth roots altogether: use subdivision in reverse to find your starting values in the first place, e.g. start from x = 1 and iterate x := 2*x until your function changes sign. Then binary subdivision, then secant. Newton's method is slower than secant, unless you can compute the derivative easily from the function: the trouble is that it costs you two evaluations to get order 2 convergence, so effectively its order is only 1.4142 compared to the secant's 1.6180. If you could pin down the ranges of a,b,c sufficiently, you might be able to use series reversion to express x as a convergent series in a,b,c, or rather some functions of these which << 1; you might even try Pad\'e approximation in this context. Then refine via iteration as before. Fred Lunnon On 2/2/07, Christian Boyer <cboyer@club-internet.fr> wrote:
About x(x² + a)(x² + b) = c
Thanks Joshua and Fred for your first answers. I know these old methods. By sometimes better suitable methods exist depending on the equation to analyze.
a, b, c can greatly vary, but are large numbers. Not close to 1. b is approx. of the same size than a, say: a < b < 12a.
And because x(x²+a)(x²+b) is a growing function, we are sure that the solution x exists, is real, and is unique.
Franck, you are perfectly right, the key is to find a good starting point. What would be a good starting point?