首页 > 解决方案 > 使用 SymPy / Python 进行部分分数分解

问题描述

我如何找到常数 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 提供的替代形式。

编辑

我完全用手做了第二次尝试,我得到了这些:

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

我如何验证这些是否正确?

编辑 2

我的问题的要点是:如何使用一些不错的/可重用的 Python 代码来做到这一点?

标签: pythonpython-3.xpandasnumpysympy

解决方案


您可以使用apartin sympy 执行此操作,但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⎠



推荐阅读