解决具有许多次幂的长多项式的最快方法

Pop*_*orn 5 python math optimization performance 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和其他语言的解决方案。

注意,这是目标函数的导数。我只是在尝试最大化目标函数,因此,除了解决这个多项式之外,如果还有更好的方法可以做到这一点!解决方案应该相当快,因为​​我正在尝试解决许多这些目标功能。

Kev*_*vin 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
Run Code Online (Sandbox Code Playgroud)

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

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