遇到的问题
Mathematica 中有一个自带的部分分式分解函数 Apart
。
In := Apart[(-3 + x)/((-1 + x) (1 + x))]
Out := -(1/(-1 + x)) + 2/(1 + x)
但是 Apart
遇到分解结果中带无理数的就会摆烂:
In := Apart[x/(1 - x - x^2)]
Out := -(x/(-1 + x + x^2))
解决方案 1
我们有一个函数 Integrate`ComplexApart
可以使用:
In := Integrate`ComplexApart[x/(1 - x - x^2), x]
Out := -((-1 + Sqrt[5])/(2 Sqrt[5] (1/2 (1 - Sqrt[5]) + x))) + (-1 - Sqrt[
5])/(2 Sqrt[5] (1/2 (1 + Sqrt[5]) + x))
它不是官方文档内的函数,但是似乎可以正常使用。
解决方案 2
使用 ResourceFunction
中的函数 ApartAll
:
In := ApartAll = ResourceFunction["ApartAll"];
In := ApartAll[x/(1 - x - x^2)]
Out := (5 + Sqrt[5])/(10 (1/2 (-1 - Sqrt[5]) - x)) + (5 - Sqrt[5])/(
10 (1/2 (-1 + Sqrt[5]) - x))
也可以使用函数 ExtendedApart
:
In := ExtendedApart = ResourceFunction["ExtendedApart"];
似乎 ExtendedApart
更强大一些。