1
$\begingroup$

This question already has an answer here:

I am designing a software that has to find the roots of polynomials. I have to write this software from scratch as opposed to using an already existing library due to company instructions. I currently know three main methods of finding roots: the Secant method, the Newton-Raphson method and the Interval Bisection method. I will need to implement the most efficient one of these algorithms in my software, so could someone please let me know how these methods compare in terms of speed? Or if anyone knows any different methods that could potentially be more efficient the three mentioned above, could they please mention them too? Thanks.

It is currently my understanding that the Interval-Bisection method is slower than the Newton-Raphson one. However, I also know that the Newton-Raphson method does not always reach the correct answer due to asymptotes. In regards to this, would it be more efficient to mix two, or more, algorithms, for example, loop through the Newton-Raphson method for a set number of times and then switch to the slower Interval Bisection method after that in case the Newton-Raphson method never reaches an answer? If this is the case, which algorithms would be the most efficient to implement together? I do not currently know how the Secant method compares to the other two in terms of efficiency, so any insight on that would be appreciated too.

Thanks very much for your time.

Update

I would be using these methods to find the Internal Rate of Return (IRR). Therefore, I would not necessarily need to find the complex roots as I will be dealing with finance. However, it could be a very large polynomial depending on how many payments there are.

$\endgroup$

marked as duplicate by LutzL, apnorton, Umberto P., Jeel Shah, Tom Oldfield Jul 9 '14 at 16:08

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • 3
    $\begingroup$ Your question is too general to give you accurate answers. What kind of polynomials are you dealing with; you also need to have a rough guess of where your roots are before you apply any method. Do you care about complex roots? Btw, unless you have multiple roots, it's better to start with a slow method, and then switch to Newton–Raphson which works well when close to your roots. $\endgroup$ – gniourf_gniourf Jul 4 '14 at 8:42
  • $\begingroup$ You just asked another question with the same theme. I think you need to close one as duplicate. $\endgroup$ – MonK Jul 4 '14 at 8:56
  • $\begingroup$ I would not rule out fixed point iteration $f(x) = 0 \iff f(x) + x = x$, but you definitely need to go through some numerical analysis texts to compare efficiency and speed up techniques. It was raised here as well: link. $\endgroup$ – mvw Jul 4 '14 at 9:13
2
$\begingroup$

This is a very general question and there is no definite answer. It depends on polynomials you have. But, if you want to get an insight, these methods are usually discussed in textbooks for numerical/computational mathematics. There is always a section called non-linear equations, where they present Interval Bisection, Secant and Newton method and study their convergence.

However, beware of multiple roots. These are trouble and it is very difficult to retrieve them using numerical methods. To get ideas, google 'approximate GCD' and 'numerical factorization of a polynomial'. Also, if you plan to divide a polynomial once you get any root, google a term 'approximate polynomial division'. In papers that deal with these questions there is a variety of methods you might use.

But as gniourf_gniourf said, your question is too general to give you accurate answers. You have to look around and find a method that suits your problem.

$\endgroup$
1
$\begingroup$

For interest rate calculations the function that you consider often is or can be transformed into a monotonic convex function on the positive axis. Then there is only one root. In this situation, Newton's method works quite well. If the goal is robustness, use the Illinois modification of the regula falsi method (false position method). The additional advantage is that this does not require derivative computations.


The English Wikipedia article has a largely deficient description of the Illinois variant (and nothing on the other variants), the German one is by far better (in contradiction to the usual picture) https://de.wikipedia.org/wiki/Regula_falsi#Illinois-.2C_Pegasus-_und_Anderson.2FBj.C3.B6rk-Verfahren

See also my answers to related questions https://math.stackexchange.com/a/787685/115115 and https://stackoverflow.com/a/22284632/3088138,

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.