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.
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.