SymPy / Python을 사용한 부분 분수 분해

Sep 28 2020

상수 A, B, C, D, K, S를 어떻게 찾을 수 있습니까?

1/(x**6+1) = (A*x+B)/(x**2+1) + (C*x+D)/(x**2-sqrt(3)*x+1) + (K*x+S)/(x**2+sqrt(3)*x+1)

모든 실수 x에 대해 참입니다.

확실하지 않은 sympy 코드가 필요할 수 있습니다. 또는 여기에 도움이 될 수있는 다른 Python lib.

수작업으로 시도했지만 전혀 쉽지 않습니다. 1 시간 동안 계산을 한 후 아마도 실수를 한 것 같습니다.

SymPy에서 부분 분수 분해를 시도했지만 그렇게 멀리 가지 않습니다.

Wolfram Alpha도 시도했지만 그 정도의 디테일까지 분해되지 않는 것 같습니다.

WA 시도

아래에서 WA가 제공하는 대체 양식을 참조하십시오.

편집하다

나는 완전히 손으로 두 번째 시도를했고 다음을 얻었습니다.

A = 0
B = 1/3
C = -1/(2*sqrt(3))
D = 1/3
K = 1/(2*sqrt(3))
S = 1/3

이것이 정확한지 어떻게 확인할 수 있습니까?

편집 2

내 질문의 요점은 : 멋지고 재사용 가능한 Python 코드로 이것을 수행하는 방법입니다.

답변

4 OscarBenjamin Sep 29 2020 at 01:31

apartsympy를 사용 하여이 작업을 수행 할 수 있지만 apart기본적으로 합리적 분해를 찾을 수 있으므로 다음에서 작동하도록 지시해야합니다 Q(sqrt(3)).

In [37]: apart(1/(x**6+1))                                                                                                                     
Out[37]: 
        2                     
       x  - 2           1     
- ─────────────── + ──────────
    ⎛ 4    2    ⎞     ⎛ 2    ⎞
  3⋅⎝x  - x  + 1⎠   3⋅⎝x  + 1⎠

In [36]: apart(1/(x**6+1), extension=sqrt(3))                                                                                                  
Out[36]: 
       √3⋅x - 2            √3⋅x + 2           1     
- ───────────────── + ───────────────── + ──────────
    ⎛ 2           ⎞     ⎛ 2           ⎞     ⎛ 2    ⎞
  6⋅⎝x  - √3⋅x + 1⎠   6⋅⎝x  + √3⋅x + 1⎠   3⋅⎝x  + 1⎠