문제

SINJISY를 사용하여 "X"(잠재적으로 다른 기호의)의 다항식 인 표현식 F가 있다고 가정합니다.

일부 정수 N보다 큰 순서로 모든 용어를 모든 용어를 삭제하는 효율적인 방법이있는 경우 알고 싶습니다.

특별한 경우는 매우 복잡한 기능을 가지고 있지만 x에서 2 차까지 최대한의 용어를 유지하고 싶습니다.이 작업을 수행하는 효율적인 방법은 무엇입니까?

명백하고 매우 효율적인 방법은 N보다 작은 것, M 유도체를 가져 가고 x를 0으로 설정하여 X ^ m의 계수를 얻습니다.우리는 각 계수를 얻은 다음 다항식을 재구성합니다.그러나 파생 상품을 복용하는 것은 가장 효율적인 것이 아닙니다.

도움이 되었습니까?

해결책

이를 수행하는 쉬운 방법은

와 같은 표현식에 O(x**n)를 추가하는 것입니다.
In [23]: x + x**2 + x**4 + x**10 + O(x**3)
Out[23]:
     2    ⎛ 3⎞
x + x  + O⎝x ⎠
.

나중에 제거하려면 removeO 메소드

를 사용하십시오.
In [24]: (x + x**2 + x**4 + x**10 + O(x**3)).removeO()
Out[24]:
 2
x  + x
.

series를 사용하여 표현식의 시리즈 확장을 수행 할 수도 있습니다.여기의 차이는 비 다항식 용어가 표현식에서 끝나는 경우 다음과 같습니다.

In [25]: x + sin(x) + O(x**3)
Out[25]:
              ⎛ 3⎞
sin(x) + x + O⎝x ⎠

In [26]: (x + sin(x)).series(x, 0, 3)
Out[26]:
       ⎛ 3⎞
2⋅x + O⎝x ⎠
.

다른 팁

다항식 모듈 문서를 살펴 보는 경우 :

"Nofollow"> http://docs.sympy.org/latest/modules/polys/reference.html

상황의 특성에 따라 그것에 대해가는 방법이 많이있을 것입니다.일하는 몇 가지 다른 방법 :

.coeffs() 사용 :

>>> f = 3 * x**3 + 2 * x**2 + x * y + y**3 + 1
>>> order = 2

>>> coeffs = Poly(f, x).coeffs()
>>> f_new = sum(x**n * coeffs[-(n+1)] for n in range(order+1)) # the +1 is to get 0th order
>>> f_new
2*x**2 + x*y + y**3 + 1
.

또는 .all_terms()의 항목을 반복 할 수 있습니다.

>>> all_terms = Poly(f, x).all_terms()
>>> sum(x**n * term for (n,), term in all_terms() if n <= order)
.

모듈에 많은 조작 기능이 있으며 계산 / 파생물 / 등을 복용하는 것이 아니라 표현식을 직접 작업 할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top