研究具有复杂系数的多项式的问题, 我陷入了以下问题:
假设我有一个多项式P =λ^ 16 * z +λ^ 15 * z ^ 2,其中λ是复数。 我想简化以下约束:λ^ 14 = 1。 因此,插入后,我们应该得到:
P =λ^ 2 * z +λ* z ^ 2。
我已经尝试过P.subs(λ** 14,1),但是它不起作用,因为我假设λ是真实的。因此它返回原始表达式:P =λ^ 16 * z +λ^ 15 * z ^ 2,而没有排除λ^ 14 ...
任何提示将不胜感激。 谢谢!
答案 0 :(得分:1)
我不知道有什么简单的方法可以在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
等
答案 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()