部分分数 - 相当于 MATLAB 的 partfrac 和 Mathematica 在 Julia 中的 apart

问题描述 投票:0回答:1

我正在尝试在 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

julia symbolic-math polynomial-math
1个回答
0
投票

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]))

看起来除法的余数可以作为浮点数返回,因此您可能需要在除法后将它们恢复为整数。

© www.soinside.com 2019 - 2024. All rights reserved.