2013-06-16 3 views
0

나는 값을 반환하는 기능을 가지고 A A PolyFit에 따라 값 A0, C, C0에 따라 :파이썬은 또 다른 큰 하나에 하나의 다항식을 삽입 sympy 얻을 최종 다항식

import sympy 

a = Symbol("a") 
a0 = Symbol("a0") 
c = Symbol("c") 
c0 = Symbol("c0") 
t = Symbol("t") 

a_func = Poly(0, a0, c, c0) 
coeff = np.array([-0.71424954, 1.7335939 , -1.76528173, 1.2361201 , 0.00255529]) 
num_a_coeff = len(coeff) 
for ii in xrange(num_a_coeff): 

    a_func += coeff[ii] * ((c-c0)/a0)**(num_a_coeff-1-ii) 

a_func = a0 + (a_func * c) 

아직 잘되지 않습니다 일반적인 다항식과 같은 형식의, num_a_coeff 내가 다른 표현이 a_func을 구현하려는 내 경우 5 인 :

multiFit_coeff = np.array([944210317e-03,-280710762e-03,378400594e-04]) 
# gives power of 1, a, c, t 
multiFit_power = np.array([[5,0,0,0],[4,3,2,0],[,4,1,0]]) 
main_func = [] 
num_coeff = len(multiFit_coeff) 
for i in xrange(num_coeff): 

    temp = multiFit_coeff[i] * 
     (1**multiFit_power_less[i][0] * 
     a_func**inc.multiFit_power[i][1] * 
     c**multiFit_power[i][2] * 
     t**multiFit_power[i][3]) 

    main_func.append(temp) 

그래서 A0, C0, C와 t에 의존하는 표현이있다.

a_func**4 * c 

I는 (C)의 다항식 싶은 말 이래 (A0 : 마지막 식에 각 변수 (a_func, C 및 t)의 최대 출력은 I과 같은 식을 예 그래서 5 인 , C0, t는 상수), I는 목록으로 잘 형식의 다항식을 저장 루프 마지막에

main_func.append(sympy.polys.poly_from_expr(temp, c)) 

을 사용했습니다. 그러나 a_func가 3 이상의 값으로 작동하는 경우를 생각해 보면 계산이 끝나지 않습니다 ...이 문제를 해결하는 방법은 무엇입니까? 나는이 계산이 sympy에서 그렇게 힘들지 않을 것이라고 생각했다. 어떤 제안이라도 많은 덕분입니다. 이것은 내 첫 번째 질문입니다.

+0

'multiFit_power'에 지정한 줄에 오타가 있습니다. – asmeurer

답변

0

코드 덤프에서 무슨 일이 벌어지고 있는지 이해하는 데 어려움이 있습니다. 그러나 내가 정확히 원하는 것을 이해하면 collect(a_func, c)을 필요로한다고 생각합니다. c에 대한 계수는 a_func이다.

+0

답장을 보내 주셔서 감사합니다. 그러나이 함수는 제 경우에는 동일한 표현을 반환하지 않습니다. poly_from_expr는 작동하지만 매우 큰 방정식에는 너무 오래 걸립니다 – user2489877

+1

이것이 원하는 것이 아니라면 질문을 더 명확하게 해보는 것이 좋습니다. 자신이 가지고있는 식과 자신이 갖고 싶은 식의 샘플을 넣으십시오. 사람들이 코드에서 무슨 일이 일어나는지 알아 내려고하지 마십시오. – asmeurer