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ライブラリ。

手で試してみましたが、なかなか簡単ではありません。1時間の計算で、間違いを犯した可能性があります。

SymPyで部分分数分解を試しましたが、それほど進んでいません。

Wolfram Alphaも試しましたが、それもそのレベルの詳細には分解されないようです。

WAの試み

WAが以下に提供する代替フォームを参照してください。

編集

私は完全に手で2回目の試行を行い、次のものを入手しました。

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⎠