【问题标题】:Sympy simplification of polynomial with complex coefficients复数多项式的 Sympy 简化
【发布时间】:2018-06-23 18:18:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你检查documentation了吗?
  • 同情是正确的;你的预期结果是错误的。例如,λ=e**(i * 2* pi /15)。然后λ**15=1,但λ**16不是1
  • @Stelios,感谢您的回复。如果,如你所说,我们取 λ=e^(i * 2* pi /15),那么由于 λ^15=1,我们应该得到 λ^16 = λ*λ^15 = λ,对吧?因此,我的预期结果应该是正确的。还是我错过了什么?再次感谢。
  • @Gev_2000 是的,当然,你是对的。抱歉,我看错了你的帖子。
  • @Stelios,不用担心 :) 你知道如何解决这个问题吗?谢谢。

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


【解决方案1】:

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

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

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

为什么subs 在这里不起作用:

subs 仅在 mn 的一个因子时替换 x**n 中的表达式 x**m,例如:

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

等等

【讨论】:

    【解决方案2】:

    如果您假设 λ 是实数,则可行:

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

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

    【讨论】:

    • Lambda 是统一的 14 次根 - 它可能是唯一的真实值是 1 和 -1。
    • Gev_2000 要求的结果仅是正实数的有效 lambda。他们没有指定 lambda 一个正实数。如果他们这样做了,他们就会得到想要的结果。不知道你不同意什么。
    • 我的意思是你不能假设它是真实的——它有 12 个可能的非真实值。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这行得通:

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

      【讨论】:

      • 谢谢,但是如果我们有不同的约束条件,假设 λ^14 = 1,那么我们应该得到 P = λ^2*z + λ*z^2,但是你的在这种情况下,解决方案不起作用。不知道为什么...
      猜你喜欢
      • 2021-05-05
      • 1970-01-01
      • 2022-06-11
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多