pet*_*rov 8 python numpy sympy python-3.x pandas
我如何找到常数 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
我如何验证这些是否正确?
我的问题的要点是:如何使用一些不错的/可重用的 Python 代码来做到这一点?
您可以使用apartsympy 来执行此操作,但apart默认情况下会寻找有理因式分解,因此您必须告诉它在 中工作Q(sqrt(3)):
In [37]: apart(1/(x**6+1)) \nOut[37]: \n 2 \n x - 2 1 \n- \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n \xe2\x8e\x9b 4 2 \xe2\x8e\x9e \xe2\x8e\x9b 2 \xe2\x8e\x9e\n 3\xe2\x8b\x85\xe2\x8e\x9dx - x + 1\xe2\x8e\xa0 3\xe2\x8b\x85\xe2\x8e\x9dx + 1\xe2\x8e\xa0\n\nIn [36]: apart(1/(x**6+1), extension=sqrt(3)) \nOut[36]: \n \xe2\x88\x9a3\xe2\x8b\x85x - 2 \xe2\x88\x9a3\xe2\x8b\x85x + 2 1 \n- \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n \xe2\x8e\x9b 2 \xe2\x8e\x9e \xe2\x8e\x9b 2 \xe2\x8e\x9e \xe2\x8e\x9b 2 \xe2\x8e\x9e\n 6\xe2\x8b\x85\xe2\x8e\x9dx - \xe2\x88\x9a3\xe2\x8b\x85x + 1\xe2\x8e\xa0 6\xe2\x8b\x85\xe2\x8e\x9dx + \xe2\x88\x9a3\xe2\x8b\x85x + 1\xe2\x8e\xa0 3\xe2\x8b\x85\xe2\x8e\x9dx + 1\xe2\x8e\xa0\nRun Code Online (Sandbox Code Playgroud)\n编辑:评论要求一种在更一般的情况下找到它的方法,而不需要知道sqrt(3)生成扩展。
我们可以用.apart(full=True)线性因子来计算完整的 PFE:
In [29]: e = apart(1/(x**6+1), full=True).doit()\n\nIn [30]: e\nOut[30]: \n \xe2\x88\x9a3 \xe2\x85\x88 \xe2\x88\x9a3 \xe2\x85\x88 \xe2\x88\x9a3 \xe2\x85\x88 \xe2\x88\x9a3 \xe2\x85\x88 \n - \xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80 - \xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80 \n 2 2 2 2 2 2 2 2 \xe2\x85\x88 \xe2\x85\x88 \n- \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n \xe2\x8e\x9b \xe2\x88\x9a3 \xe2\x85\x88\xe2\x8e\x9e \xe2\x8e\x9b \xe2\x88\x9a3 \xe2\x85\x88\xe2\x8e\x9e \xe2\x8e\x9b \xe2\x88\x9a3 \xe2\x85\x88\xe2\x8e\x9e \xe2\x8e\x9b \xe2\x88\x9a3 \xe2\x85\x88\xe2\x8e\x9e 6\xe2\x8b\x85(x + \xe2\x85\x88) 6\xe2\x8b\x85(x - \xe2\x85\x88)\n 6\xe2\x8b\x85\xe2\x8e\x9cx + \xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x8e\x9f 6\xe2\x8b\x85\xe2\x8e\x9cx + \xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80\xe2\x8e\x9f 6\xe2\x8b\x85\xe2\x8e\x9cx - \xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x8e\x9f 6\xe2\x8b\x85\xe2\x8e\x9cx - \xe2\x94\x80\xe2\x94\x80 - \xe2\x94\x80\xe2\x8e\x9f \n \xe2\x8e\x9d 2 2\xe2\x8e\xa0 \xe2\x8e\x9d 2 2\xe2\x8e\xa0 \xe2\x8e\x9d 2 2\xe2\x8e\xa0 \xe2\x8e\x9d 2 2\xe2\x8e\xa0 \nRun Code Online (Sandbox Code Playgroud)\n这不是我们想要的,因为您想要真正的二次分母而不是引入复数。这里的术语以复共轭对的形式出现,因此我们可以将这些对组合起来:
\nIn [46]: terms1 = []\n\nIn [47]: for a in terms:\n ...: if conjugate(a) not in terms1:\n ...: terms1.append(a)\n ...: \n\nIn [49]: terms_real = [(t+t.conjugate()) for t in terms1]\n\nIn [51]: Add(*(factor(cancel(t)) for t in terms_real))\nOut[51]: \n \xe2\x88\x9a3\xe2\x8b\x85x - 2 \xe2\x88\x9a3\xe2\x8b\x85x + 2 1 \n- \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n \xe2\x8e\x9b 2 \xe2\x8e\x9e \xe2\x8e\x9b 2 \xe2\x8e\x9e \xe2\x8e\x9b 2 \xe2\x8e\x9e\n 6\xe2\x8b\x85\xe2\x8e\x9dx - \xe2\x88\x9a3\xe2\x8b\x85x + 1\xe2\x8e\xa0 6\xe2\x8b\x85\xe2\x8e\x9dx + \xe2\x88\x9a3\xe2\x8b\x85x + 1\xe2\x8e\xa0 3\xe2\x8b\x85\xe2\x8e\x9dx + 1\xe2\x8e\xa0\nRun Code Online (Sandbox Code Playgroud)\n请注意,通常可能不存在任何简单的根表达式 (Abel-Ruffini),因此这种部分分数展开式对于所有可能的分母多项式都不会成功。这就是为什么.apart默认情况下计算不可约分母的展开式(总是可以成功的)。