解决具有许多不同功率的长多项式的最快方法

时间:2011-12-06 20:58:26

标签: python performance math optimization package

我正在寻找这个多项式方程的最快解x:

设m是集合M中的元素。

对所有m {a_m * x ^(b_m) - c_m * x ^(b_m - 1)} = 0求和,其中a_m,b_m,c_m对于每个m都是不同的。集合M有~15-20个元素。

如果解决方案是>如果解决方案是< 4,它将返回4。 0,它将返回0。 最快的方法是什么?用数字做它?

我更喜欢python中的解决方案,只有在切换非常有利的情况下才会使用其他语言。

注意这是目标函数的导数。我只是试图最大化目标函数,所以如果除了求解这个多项式之外还有更好的方法,那也会有效!解决方案应该相当快,因为​​我试图解决许多这些目标函数。

1 个答案:

答案 0 :(得分:2)

如果你只是寻找一个根而不是所有的根,你可以使用Newton's Method,我期望你所描述的多项式相当快。

让f(x)=对所有m {a*x^(b) - c*x^(b-1)}

求和

然后f'(x),f(x)的导数,是所有m {(a*b)*x^(b-1) - (c*(b-1))*x^(b-2)}的总和。

def newton(f, fprime, firstguess, epsilon):
    x = firstguess
    while abs(f(x)) > epsilon:
        x = x - (f(x) / fprime(x))
    return x

这将返回多项式的近似根。如果它不够准确,请传入一个较小的epsilon直到它足够准确。

请注意,此函数可能会发散,并永远运行,或抛出ZeroDivisionError。小心处理。