具有复系数的多项式的辛简化

时间:2018-06-23 18:18:18

标签: sympy symbolic-math complex-numbers polynomial-math

研究具有复杂系数的多项式的问题, 我陷入了以下问题:

假设我有一个多项式P =λ^ 16 * z +λ^ 15 * z ^ 2,其中λ是复数。 我想简化以下约束:λ^ 14 = 1。 因此,插入后,我们应该得到:

P =λ^ 2 * z +λ* z ^ 2。

我已经尝试过P.subs(λ** 14,1),但是它不起作用,因为我假设λ是真实的。因此它返回原始表达式:P =λ^ 16 * z +λ^ 15 * z ^ 2,而没有排除λ^ 14 ...

任何提示将不胜感激。 谢谢!

4 个答案:

答案 0 :(得分:1)

解决方案

我不知道有什么简单的方法可以在sympy中实现所需的功能,但是您可以显式替换每个值:

p = (λ**16)*z + (λ**15)*(z**2)

p = p.subs(λ**16, λ**2).subs(λ**15, λ**1)
>>> z**2*λ + z*λ**2

为什么subs在这里无法工作

subs仅在x**mx**n的因数时用m替换表达式n,例如:

p.subs(λ, 1)
>>> z**2 + z

p.subs(λ**2, 1)
>>> z**2*λ**15 + z

p.subs(λ**3, 1)
>>> z**2 + z*λ**16

p.subs(λ**6, 1)
>>> z**2*λ**15 + z*λ**16

答案 1 :(得分:0)

如果您假设λ是实数,则可以这样做:

lambda_, z = sym.symbols('lambda z', real=True)
print((lambda_**16*z + lambda_**15*z**2).subs(lambda_**14, 1))
z**2 + z

编辑:
它实际上不应该工作,因为λ可能为负。仅当λ为正数时,您想要的才是正确的。

答案 2 :(得分:0)

您可以使用 ratsimpmodprime() 函数以一组其他多项式为模减少多项式。还有 reduce() 函数,它执行类似的操作。

>>> P = λ**16*z + λ**15*z**2
>>> ratsimpmodprime(P, [λ**14 - 1])
z**2*λ + z*λ**2

答案 3 :(得分:-1)

这有效:

P.simplify().subs(λ**15,1).expand()