2014-12-23 20 views
0

這是我的問題。它非常簡單,我已經找到了一些很好的方法,但它們實在太慢了:蟒蛇中最多1E9值的非線性反演

我有一個簡單的多項式,其順序在2到4之間(這是用戶的選擇)。現在,讓我們只說我們有3級:

a*x**3 + b*x**2 + c*x + d = 0 

我需要反轉此功能,並得到x的(真正)值,但對於幾百萬,甚至十億值。係數(a,b,c)總是相同的,但d通常是有數百萬條目的數組。

例如

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

當訂單爲2或更多時,可以有多個解決方案。你想如何處理多種解決方案? –

回答

0

存在分析解決方案:Degree 3Degree 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的解決方案無論是。

+0

嘿。感謝您的回答。我意識到,有可以實施的分析解決方案,但我希望已經有一個封裝在那裏,正是這樣做。 – HansSnah