Descomposición de fracciones parciales usando SymPy / Python

Sep 28 2020

¿Cómo encuentro las constantes A, B, C, D, K, S tales que

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)

es cierto para cada x real.

Necesito un código simpático tal vez, no estoy seguro. O cualquier otra biblioteca de Python que pueda ayudar aquí.

Lo intenté a mano, pero no es nada fácil: después de 1 hora de calcular, descubrí que probablemente había cometido algún error.

Intenté la descomposición de fracciones parciales en SymPy pero no llega tan lejos.

También probé Wolfram Alpha, pero parece que tampoco se descompone a ese nivel de detalle.

Intento de WA

Vea las formas alternativas que WA da a continuación.

Editar

Hice un segundo intento completamente a mano y obtuve estos:

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

¿Cómo puedo verificar si son correctos?

Editar 2

El punto principal de mi pregunta es: ¿cómo hacer esto con un código Python agradable / reutilizable?

Respuestas

4 OscarBenjamin Sep 29 2020 at 01:31

Puede hacer esto usando aparten sympy, pero apartbuscará una factorización racional de forma predeterminada, por lo que debe decirle que funcione en 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⎠