我正在尝试在 Julia 中本地进行部分分数分解。在 MATLAB 中,必须使用的命令是
partfrac
,在 Mathematica 中是 Apart
。我知道我可能可以使用 PyCall.jl 来使用它的 apart 版本,但这可能会产生一些开销..
我想知道是否有人知道任何可以让您在 Julia 中本地执行此操作的包/要点/小代码;即获得
partfrac
(MATLAB),Apart
(Mathematica)或apart
(SymPy)的等价物。
我通过谷歌搜索找到的是here(最后一次更新是在 6 年前)和here,这似乎又过时了(如果没有弃用的话)。
我期待它成为 Julia 中一些标准包的一部分。我在
Polynomials.jl中发现了
residues
的提及,但没有其他文档......它看起来不像Apart
,partfrac
或apart
。
residues()
Polynomials
的文档说
help?> ?residues 搜索:残留物
残差(pq::AbstractRationalFunction; method=:numerical, kwargs...)
如果 p/q =d + r/q,返回 d 和有理分数 r/q 的余数。
首先通过divrem 表示p/q =d + r/q r 次于q。然后找到 r/q 的极点。为一个
极点,λj 的重数 k 有 k 个残基,rⱼ[k]/(z-λⱼ)^k, rⱼ[k-1]/(z-λⱼ)^(k-1), rⱼ[k-2]/ (z-λⱼ)^(k-2),
…, rⱼ[1]/(z-λⱼ)。使用以下公式找到残基:1/j! * dʲ/dsʲ (F(s)(s - λⱼ)^k 在 λⱼ
处计算
(5-28 (https://stanford.edu/~boyd/ee102/rational.pdf)).
举个例子:
using Polynomials
let
nume = Polynomial([6, 9, 16, 8, 1])
den = Polynomial([6, 11, 6, 1])
@show residues(nume // den)
end
residues(nume // den) = (Polynomial(2.0 + 1.0*x),
Dict(-1.9999999999999998 => [-4.000000000000001], -1.0000000000000002 =>
[3.0000000000000036], -3.0 => [-6.0]))
看起来除法的余数可以作为浮点数返回,因此您可能需要在除法后将它们恢复为整数。