python-3.x 在symy中如何将多项式的因子存储在一个列表中?

5anewei6  于 2023-02-10  发布在  Python
关注(0)|答案(3)|浏览(139)

假设我有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个不可约因子,我怎么把它们存储在一个列表中,而不是元组中?

bwleehnv

bwleehnv1#

您可以通过强制将因子分解结果视为产品(无论是否为产品),将产品分解为一系列因子;这将给予你一个因子元组。如果需要的话,你可以使用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出现在一个元组。

aiazj4mn

aiazj4mn2#

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⎦
mzmfm0qo

mzmfm0qo3#

我想你可以用as_terms()方法

factors.as_terms()[1]

这将生成以下列表:

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

相关问题