【问题标题】:How do I store factors of polynomials in a list in sympy?如何将多项式的因子存储在 sympy 的列表中?
【发布时间】:2023-02-04 02:26:37
【问题描述】:

假设我有 x^6-1 我想分解,使用 .factor 我得到了我的不可约因素,但我想要列表中的这些因素。我尝试使用 .factor_list() 但它没有给我我想要的结果而是将它们存储在一个元组中并且在因素旁边总是有一个 1 。我希望每个因式多项式都单独在一个列表中,如果可能的话我该怎么做?

比如,

from sympy import Symbol, factor, Poly

x = Symbol('x')
p = x**6 - 1
factors = factor(p)
factors

这给了我这些因素 4 个不可约的因素,我如何将它们存储在列表中而不是作为元组?

【问题讨论】:

    标签: python-3.x sympy


    【解决方案1】:

    我想你可以使用as_terms()方法

    factors.as_terms()[1]
    

    这将产生以下列表:

    [x - 1, x + 1, x**2 - x + 1, x**2 + x + 1]
    

    【讨论】:

      【解决方案2】:

      factor_list 的输出是前导系数,然后是一元不可约因子及其多重性的元组列表:

      In [13]: factor_list(x**6 - 1)
      Out[13]: 
      ⎛   ⎡                        ⎛ 2           ⎞  ⎛ 2           ⎞⎤⎞
      ⎝1, ⎣(x - 1, 1), (x + 1, 1), ⎝x  - x + 1, 1⎠, ⎝x  + x + 1, 1⎠⎦⎠
      

      您可以只从 factor_list 输出中提取所需的返回值部分:

      In [12]: [f for f, m in factor_list(x**6 - 1)[1]]
      Out[12]: 
      ⎡               2           2        ⎤
      ⎣x - 1, x + 1, x  - x + 1, x  + x + 1⎦
      

      【讨论】:

        【解决方案3】:

        您可以通过强制将因式分解的结果像产品一样对待(无论是否),将产品分解为一系列因素;这会给你一个因素元组。如果需要,您可以使用 list 将其更改为列表:

        >>> from sympy import Mul
        >>> list(Mul.make_args(factor(x**6-1)))
        [x + 1, x - 1, x**2 + x + 1, x**2 - x + 1]
        

        您说“我希望每个因式多项式都单独放在一个列表中,如果可能的话我该怎么做”;你是这个意思吗:

        >>> [[i] for i in Mul.make_args(factor(x**6-1))]
        [[x + 1], [x - 1], [x**2 + x + 1], [x**2 - x + 1]]
        

        您想对重复的参数做什么?

        >>> [b for b,e in factor_list((x+1)*(x**6-1))[1] for i in range(e)]
        [x - 1, x + 1, x + 1, x**2 - x + 1, x**2 + x + 1]
        >>> [b for b,e in factor_list((x+1)*(x**6-1))[1]]
        [x - 1, x + 1, x + 1, x**2 - x + 1, x**2 + x + 1]
        >>> from collections import Counter
        >>> [b**(e*c) for (b,e),c in Counter(factor_list((x+1)*(x**6-1))[1]).items()]
        [x - 1, (x + 1)**2, x**2 - x + 1, x**2 + x + 1]
        

        我不认为最后一步对于合并类似因素是必要的。我会将其报告为错误,因为文档字符串显示了另一个示例,其中重数为 2 的因子在元组中出现一次。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-09
          • 2012-05-28
          • 2018-08-07
          相关资源
          最近更新 更多