我正在寻找这个多项式方程的最快解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中的解决方案,只有在切换非常有利的情况下才会使用其他语言。
注意这是目标函数的导数。我只是试图最大化目标函数,所以如果除了求解这个多项式之外还有更好的方法,那也会有效!解决方案应该相当快,因为我试图解决许多这些目标函数。
答案 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。小心处理。