MathOverflow is a question and answer site for professional mathematicians. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How to compute the (real) roots of

$$\sum_{i=1}^n \frac{c_i}{(a_i + b_i \cdot x)^p}$$

for given reals $a_i, b_i, c_i$, and positive integers $n, p$? The cases $p=1, ..., 5$ and $n=6, ..., 20$ would already be very useful for me. I actually just need any root in a given interval.

Multiplying by the denominators, this task can be reduced to finding roots of a polynomial, but this only works for very small $n$ whereas even for $n=8$ the coefficients in the polynomial are numerically unstable.

The only other method I could think of is using binary search (aka the bisection method). But this is too slow. Is there a faster method that is numerically stable?

share|cite|improve this question
If $p$ is even, I don't think you'll find many real roots! – Barry Cipra Feb 1 '13 at 20:40
Sorry, I had set $c_i = 1$ to simplify the question. I have now put it back in so there may be roots even for even $p$. – Emanuele Viola Feb 1 '13 at 20:48
With a $c_i$ in the numerator, you can simplify the denominator to just $(x-d_i)^p$. – Barry Cipra Feb 1 '13 at 20:52
did you try Newton-Raphson? – Suvrit Feb 1 '13 at 20:53
Thanks. I have not tried it because I was not sure what starting point to choose/whether the method would work in general. Do you see it? – Emanuele Viola Feb 1 '13 at 21:49

This recent master thesis by Leonardo Robol treats the case $p=1$ in a numerically sound way. I think they are going to release some code soon, so you might want to contact the author.

share|cite|improve this answer
Thanks for the useful pointer. I wonder if something like that can be done for $p > 1$? – Emanuele Viola Feb 19 '13 at 14:48

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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