这是我的问题。它很简单,我已经找到了一些好方法,但它们太慢了:
我有一个简单的多项式,其顺序在2到4之间(这是用户的选择)。现在,我们只说我们有第三个订单:
a*x**3 + b*x**2 + c*x + d = 0
我需要反转此函数并获得x的(实际)值,但是需要几百万甚至十亿的值。系数(a,b,c)总是相同的,但d通常是一个包含数百万个条目的数组。
e.g。
a = -0.001
b = -0.1
c = 1.5
d = numpy.random.rand(2000, 2000)
我正在研究scipy的非线性求解器:
http://docs.scipy.org/doc/scipy/reference/optimize.nonlin.html
但这太慢了。有没有快速的方法来进行反演?
我希望你理解我的问题并感谢任何提示。 欢呼声
答案 0 :(得分:0)
存在分析解决方案:Degree 3和Degree 4。你可以直接实现这些。
更新(回复@HansSnah):
使用Sympy提供了一般解决方案:
import sympy as sy
#sy.init_printing() # pretty printing for ipython console
a,b,c,d,e,x = sy.symbols("a,b,c,d,e,x", real=True)
eq3 = sy.Eq(a*x**3 + b*x**2 + c*x + d, 0)
eq3a = eq3.subs({a: -.011, b: 0.1, c: 1.5, d:0})
sy.solve(eq3a, x)
# Gives: [-7.98549886553656, 0.0, 17.0764079564457]
对于我来说,1e9解决方案似乎也不够快。