2014-12-23 2 views
0

여기 내 문제입니다. 매우 간단하고 좋은 접근법을 이미 찾았지만 단순히 너무 느리다.비선형 역변환 최대 1E9 값에 대한 파이썬

2와 4 사이의 임의의 차수로 간단한 다항식을 사용할 수있다 (이것은 사용자의 선택이다). 지금은 단지 우리가 3 차를 가지고 있다고 할 수 있습니다 :

나는이 기능을 반전하고 x의 (실제) 값을 얻을 수 있지만, 몇 백만, 심지어 억 값을 필요
a*x**3 + b*x**2 + c*x + d = 0 

. 계수 (a, b, c)는 항상 동일하지만 d는 대개 수백만 개의 항목이있는 배열입니다.

http://docs.scipy.org/doc/scipy/reference/optimize.nonlin.html

을하지만이 너무 느렸다 :

a = -0.001 
b = -0.1 
c = 1.5 
d = numpy.random.rand(2000, 2000) 

나는 scipy의 비선형 솔버로보고 있었다. 반전을 할 빠른 방법이 있습니까?

내 문제를 이해하고 어떤 힌트를 주셔서 감사합니다. 건배

+0

주문량이 2 이상이면 하나 이상의 해결 방법이있을 수 있습니다. 어떻게 여러 솔루션을 처리하고 싶습니까? –

답변

0

분석 솔루션은 Degree 3Degree 4입니다. 직접 구현할 수 있습니다.

업데이트 (@HansSnah에 회신) :

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 솔루션을 나에게 충분히 빨리하지 않는 것 :

Sympy를 사용하여 일반적인 솔루션이 있습니다.

+0

안녕하세요. 귀하의 답변에 감사드립니다. 구현할 수있는 분석 솔루션이 있다는 것을 알았지 만, 정확히 여기에 어딘가에 패키지가 이미 있기를 바랬습니다. – HansSnah

관련 문제