[英]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**m
在x**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
等等。
这有效:
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.