SymPy / Python kullanarak kısmi kesir ayrıştırma

Sep 28 2020

A, B, C, D, K, S sabitlerini nasıl bulurum ki

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)

her gerçek x için doğrudur.

Belki biraz sympy koduna ihtiyacım var, emin değilim. Veya burada yardımcı olabilecek başka herhangi bir Python kitaplığı.

Elle denedim ama hiç de kolay değil: 1 saatlik hesaplamadan sonra, muhtemelen bir hata yaptığımı fark ettim.

SymPy'de kısmi kesir ayrıştırmayı denedim ama o kadar ileri gitmiyor.

Wolfram Alpha'yı da denedim, ama öyle görünüyor ki bu ayrıntı düzeyine de ayrışmıyor.

WA denemesi

WA'nın aşağıda verdiği alternatif formlara bakın.

Düzenle

Tamamen elle ikinci bir deneme yaptım ve bunları aldım:

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

Bunların doğru olup olmadığını nasıl doğrulayabilirim?

Düzenle 2

Sorumun ana noktası şudur: bazı güzel / yeniden kullanılabilir Python kodlarıyla bunu nasıl yapabilirim?

Yanıtlar

4 OscarBenjamin Sep 29 2020 at 01:31

Bunu apartsympy kullanarak yapabilirsiniz, ancak apartvarsayılan olarak rasyonel bir çarpanlara ayırma arayacaktır, bu yüzden ona çalışmasını söylemeniz gerekir 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⎠