我想取消由两个多项式表达式
f1(z)=p1(z)/q1(z)
给出的有理函数p1,q1
。
一个几乎完整的解决方案如下
import sympy as sp
z = sp.symbols('z')
p1 = z**2 - 1
q1 = z**2 - z
f1 = p1/q1
f2 = f1.cancel() # -> (z + 1)/z
缺少的步骤是从
q2,p2
中提取f2
(我不知道如何完成)。
但是,这不是我的首选方法,因为我所有的代码都基于
p,q
,上面的方法看起来像是一个不必要的往返p1,q1 -> f1 -> f2 -> p2,q1
函数表示f
,我想避免由于性能风险和简单性。
相反,我想直接计算它们
q1, p1 -> q2,p2
,即,我寻求这种形式的解决方案
cancel_common(p1, q1) # -> z+1, z
我希望这个功能应该存在,或者应该通过提供的操作功能简单地实现,因为
q,p
为问题提供了比 p/q
更明确的输入。
我认为起点可能是
sympy.Rational
,因为它明确地基于分子-分母-表示,但不幸的是它无法处理符号z
(即不适用于函数):
sp.Rational(p1, q1) # -> TypeError: invalid input: z**2 - 1
有谁知道如何做到这一点?