繁体   English   中英

复系数多项式的Sympy化简

[英]Sympy simplification of polynomial with complex coefficients

在处理具有复系数多项式的问题时,我遇到了以下问题:

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

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

我试过P.subs(λ**14,1)但它不起作用,因为我猜它假设λ是真实的。 所以它返回原始表达式: P = λ^16*z + λ^15*z^2 ,没有分解出λ^14 ...

我不知道在 sympy 中实现您想要的任何简单方法,但是您可以明确替换每个值:

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

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

为什么subs不能在这里工作:

subs仅替换表达式x**mx**nm是一个因素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

等等。

这有效:

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

如果您假设 λ 是真实的,则此方法有效:

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

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

您可以使用ratsimpmodprime()函数来以一组其他多项式为模减少多项式。 还有reduce()函数,它做类似的事情。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM